struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lukasz Lenart (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (WW-3651) Struts 2 is calling response.setLocale even though it will not handle the request
Date Wed, 18 Sep 2013 06:28:53 GMT

     [ https://issues.apache.org/jira/browse/WW-3651?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Lukasz Lenart updated WW-3651:
------------------------------

    Description: 
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.

  was:
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.

    
> 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

Mime
View raw message