[
https://issues.apache.org/jira/browse/WW-3651?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lukasz Lenart updated WW-3651:
------------------------------
Fix Version/s: (was: 2.3.17)
2.3.16
> Struts 2 is calling response.setLocale even though it will not handle the
> request
> ---------------------------------------------------------------------------------
>
> Key: WW-3651
> URL: https://issues.apache.org/jira/browse/WW-3651
> Project: Struts 2
> Issue Type: Bug
> Components: Dispatch Filter
> Affects Versions: 2.2.3
> Environment: Windows 7, Java 1.6
> Reporter: Alfredo Osorio
> Fix For: 2.3.16
>
>
> The org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter -->
> org.apache.struts2.dispatcher.Dispatcher.prepare(HttpServletRequest request,
> HttpServletResponse response) is calling response.setLocale(locale) when you
> specify a default locale (using struts.properties struts.locale). This is
> wrong because consider the following example:
> This is a static resource stored in the following path:
> www.mydomain.com/myApp/scripts/utils.js where myApp is the webcontext and
> /scripts/utils.js is a java script file.
> 1. A request to /myApp/scripts/utils.js.
> 1. Even though Struts 2 is not going to handle the request
> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter calls
> prepare.setEncodingAndLocale(request, response);
> which sets the Request Encoding and the Response Locale.
> 2. Servlet Container Response setLocale obtains the character encoding
> corresponding to that locale and assign a character encoding to the response.
> This behavior is correct according to the spec:
> http://download.oracle.com/javaee/5/api/javax/servlet/ServletResponse.html#setLocale%28java.util.Locale%29
> 3. Struts Execute filter doesn't handle the request so
> chain.doFilter(request, response); is called.
> 4. Once all filters are called the servlet container DefaultServlet is called
> to handle the request and send the content of the file assigning the response
> header Content-Type in which this case it will use the encoding type that was
> set before by the StrutsPrepareFilter. This might not correspond to the
> actual encoding of the file.
> An example of the Header Response Content-Type:
> Content-Type application/x-javascript;charset=ISO-8859-1
> This only happens when you specify the default locale in the
> struts.properties because of these lines in Dispatcher.prepare():
> {code:java}
> String encoding = null;
> if (defaultEncoding != null) {
> encoding = defaultEncoding;
> }
> Locale locale = null;
> if (defaultLocale != null) {
> locale = LocalizedTextUtil.localeFromString(defaultLocale,
> request.getLocale());
> }
> {code}
>
> I think that locale = LocalizedTextUtil.localeFromString(defaultLocale,
> request.getLocale()); should be removed because setting locale will set the
> character encoding. And this has side effects when requests are made to
> static resources.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira