Skip to content

Character encoding of ServletOutputStream print methods #112

Open
@glassfishrobot

Description

@glassfishrobot

The async API is only available on the output stream. Thus we have had a framework that used to do:

response.setContentType("application/json;charset=UTF-8");
...
response.getWriter().print("Ӝ");

convert to asynchronous style and now it does:

response.setContentType("application/json;charset=UTF-8");
...
response.getOutputStream().print("Ӝ");

This works fine on some containers (eg Jetty), but apparently many containers do not respect the encoding set by the setContentType. They either convert the character as ISO8859-1 or if the first character is UTF-8, they throw a CharacterEncoding exception.

We have also seen at least one container handle the following writes out of order:

response.getOutputStream().print("one");
response.getOutputStream().write("two".getBytes(UTF_8);
response.getOutputStream().print("three");

As the async API will now make more character oriented frameworks use the output stream, I believe that we need to clarify the semantics of the ServletOutputStream print method so that it:

  • is definitely mix and match with write - so we must say that print cannot buffer any data.
  • respects the character encoding set on the response

Metadata

Metadata

Labels

Candidate4NextReleaseThis issues should be consider for inclusion in the next release project.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions