You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (JIRA)" <ji...@apache.org> on 2013/06/03 19:49:22 UTC

[jira] [Updated] (WW-3651) Struts 2 is calling response.setLocale even though it will not handle the request

     [ 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