[ 
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.x)
                   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():
>     String encoding = null;
>         if (defaultEncoding != null) {
>             encoding = defaultEncoding;
>         }
> Locale locale = null;
>         if (defaultLocale != null) {
>             locale = LocalizedTextUtil.localeFromString(defaultLocale, 
> request.getLocale());
>         }
>               
> 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

Reply via email to