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