You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/08/15 23:11:59 UTC
svn commit: r1514496 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/catalina/manager/ java/org/apache/catalina/manager/host/
java/org/apache/catalina/valves/ java/org/apache/coyote/ajp/
java/org/apache/coyote/http11/ java/org/apache/tomcat/util/http/ j...
Author: markt
Date: Thu Aug 15 21:11:58 2013
New Revision: 1514496
URL: http://svn.apache.org/r1514496
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55399
Have the message in the response line use the locale set for the response.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1514291,1514305,1514485-1514486
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java Thu Aug 15 21:11:58 2013
@@ -116,7 +116,8 @@ public final class HTMLManagerServlet ex
HttpServletResponse response)
throws IOException, ServletException {
- StringManager smClient = getStringManager(request);
+ StringManager smClient = StringManager.getManager(
+ Constants.Package, request.getLocales());
// Identify the request parameters that we need
// By obtaining the command from the pathInfo, per-command security can
@@ -175,7 +176,8 @@ public final class HTMLManagerServlet ex
HttpServletResponse response)
throws IOException, ServletException {
- StringManager smClient = getStringManager(request);
+ StringManager smClient = StringManager.getManager(
+ Constants.Package, request.getLocales());
// Identify the request parameters that we need
// By obtaining the command from the pathInfo, per-command security can
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java Thu Aug 15 21:11:58 2013
@@ -319,7 +319,8 @@ public class ManagerServlet extends Http
HttpServletResponse response)
throws IOException, ServletException {
- StringManager smClient = getStringManager(request);
+ StringManager smClient = StringManager.getManager(
+ Constants.Package, request.getLocales());
// Identify the request parameters that we need
String command = request.getPathInfo();
@@ -406,7 +407,8 @@ public class ManagerServlet extends Http
HttpServletResponse response)
throws IOException, ServletException {
- StringManager smClient = getStringManager(request);
+ StringManager smClient = StringManager.getManager(
+ Constants.Package, request.getLocales());
// Identify the request parameters that we need
String command = request.getPathInfo();
@@ -1575,6 +1577,11 @@ public class ManagerServlet extends Http
}
+ /**
+ * @deprecated Use {@link StringManager#getManager(String, Enumeration)}.
+ * This method will be removed in Tomcat 8.
+ */
+ @Deprecated
protected StringManager getStringManager(HttpServletRequest req) {
Enumeration<Locale> requestedLocales = req.getLocales();
while (requestedLocales.hasMoreElements()) {
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HTMLHostManagerServlet.java Thu Aug 15 21:11:58 2013
@@ -80,7 +80,8 @@ public final class HTMLHostManagerServle
HttpServletResponse response)
throws IOException, ServletException {
- StringManager smClient = getStringManager(request);
+ StringManager smClient = StringManager.getManager(
+ Constants.Package, request.getLocales());
// Identify the request parameters that we need
String command = request.getPathInfo();
@@ -120,7 +121,8 @@ public final class HTMLHostManagerServle
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
- StringManager smClient = getStringManager(request);
+ StringManager smClient = StringManager.getManager(
+ Constants.Package, request.getLocales());
// Identify the request parameters that we need
String command = request.getPathInfo();
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java Thu Aug 15 21:11:58 2013
@@ -212,7 +212,8 @@ public class HostManagerServlet
HttpServletResponse response)
throws IOException, ServletException {
- StringManager smClient = getStringManager(request);
+ StringManager smClient = StringManager.getManager(
+ Constants.Package, request.getLocales());
// Identify the request parameters that we need
String command = request.getPathInfo();
@@ -709,6 +710,11 @@ public class HostManagerServlet
}
+ /**
+ * @deprecated Use {@link StringManager#getManager(String, Enumeration)}.
+ * This method will be removed in Tomcat 8.
+ */
+ @Deprecated
protected StringManager getStringManager(HttpServletRequest req) {
Enumeration<Locale> requestedLocales = req.getLocales();
while (requestedLocales.hasMoreElements()) {
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/ErrorReportValve.java Thu Aug 15 21:11:58 2013
@@ -30,6 +30,7 @@ import org.apache.catalina.connector.Res
import org.apache.catalina.util.RequestUtil;
import org.apache.catalina.util.ServerInfo;
import org.apache.tomcat.util.ExceptionUtils;
+import org.apache.tomcat.util.res.StringManager;
/**
* <p>Implementation of a Valve that outputs HTML error pages.</p>
@@ -182,8 +183,11 @@ public class ErrorReportValve extends Va
// Do nothing if there is no report for the specified status code and
// no error message provided
String report = null;
+ StringManager smClient = StringManager.getManager(
+ Constants.Package, request.getLocales());
+ response.setLocale(smClient.getLocale());
try {
- report = sm.getString("http." + statusCode);
+ report = smClient.getString("http." + statusCode);
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
}
@@ -191,7 +195,7 @@ public class ErrorReportValve extends Va
if (message.length() == 0) {
return;
} else {
- report = sm.getString("errorReportValve.noDescription");
+ report = smClient.getString("errorReportValve.noDescription");
}
}
@@ -199,29 +203,29 @@ public class ErrorReportValve extends Va
sb.append("<html><head><title>");
sb.append(ServerInfo.getServerInfo()).append(" - ");
- sb.append(sm.getString("errorReportValve.errorReport"));
+ sb.append(smClient.getString("errorReportValve.errorReport"));
sb.append("</title>");
sb.append("<style><!--");
sb.append(org.apache.catalina.util.TomcatCSS.TOMCAT_CSS);
sb.append("--></style> ");
sb.append("</head><body>");
sb.append("<h1>");
- sb.append(sm.getString("errorReportValve.statusHeader",
+ sb.append(smClient.getString("errorReportValve.statusHeader",
"" + statusCode, message)).append("</h1>");
sb.append("<HR size=\"1\" noshade=\"noshade\">");
sb.append("<p><b>type</b> ");
if (throwable != null) {
- sb.append(sm.getString("errorReportValve.exceptionReport"));
+ sb.append(smClient.getString("errorReportValve.exceptionReport"));
} else {
- sb.append(sm.getString("errorReportValve.statusReport"));
+ sb.append(smClient.getString("errorReportValve.statusReport"));
}
sb.append("</p>");
sb.append("<p><b>");
- sb.append(sm.getString("errorReportValve.message"));
+ sb.append(smClient.getString("errorReportValve.message"));
sb.append("</b> <u>");
sb.append(message).append("</u></p>");
sb.append("<p><b>");
- sb.append(sm.getString("errorReportValve.description"));
+ sb.append(smClient.getString("errorReportValve.description"));
sb.append("</b> <u>");
sb.append(report);
sb.append("</u></p>");
@@ -230,7 +234,7 @@ public class ErrorReportValve extends Va
String stackTrace = getPartialServletStackTrace(throwable);
sb.append("<p><b>");
- sb.append(sm.getString("errorReportValve.exception"));
+ sb.append(smClient.getString("errorReportValve.exception"));
sb.append("</b> <pre>");
sb.append(RequestUtil.filter(stackTrace));
sb.append("</pre></p>");
@@ -240,7 +244,7 @@ public class ErrorReportValve extends Va
while (rootCause != null && (loops < 10)) {
stackTrace = getPartialServletStackTrace(rootCause);
sb.append("<p><b>");
- sb.append(sm.getString("errorReportValve.rootCause"));
+ sb.append(smClient.getString("errorReportValve.rootCause"));
sb.append("</b> <pre>");
sb.append(RequestUtil.filter(stackTrace));
sb.append("</pre></p>");
@@ -250,9 +254,9 @@ public class ErrorReportValve extends Va
}
sb.append("<p><b>");
- sb.append(sm.getString("errorReportValve.note"));
+ sb.append(smClient.getString("errorReportValve.note"));
sb.append("</b> <u>");
- sb.append(sm.getString("errorReportValve.rootCauseInLogs",
+ sb.append(smClient.getString("errorReportValve.rootCauseInLogs",
ServerInfo.getServerInfo()));
sb.append("</u></p>");
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Thu Aug 15 21:11:58 2013
@@ -949,7 +949,8 @@ public abstract class AbstractAjpProcess
message = response.getMessage();
}
if (message == null){
- message = HttpMessages.getMessage(response.getStatus());
+ message = HttpMessages.getInstance(
+ response.getLocale()).getMessage(response.getStatus());
}
if (message == null) {
// mod_jk + httpd 2.x fails with a null status message - bug 45026
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/AbstractOutputBuffer.java Thu Aug 15 21:11:58 2013
@@ -354,7 +354,8 @@ public abstract class AbstractOutputBuff
message = response.getMessage();
}
if (message == null) {
- write(HttpMessages.getMessage(status));
+ write(HttpMessages.getInstance(
+ response.getLocale()).getMessage(status));
} else {
write(message);
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalAprOutputBuffer.java Thu Aug 15 21:11:58 2013
@@ -63,7 +63,7 @@ public class InternalAprOutputBuffer ext
finished = false;
// Cause loading of HttpMessages
- HttpMessages.getMessage(200);
+ HttpMessages.getInstance(response.getLocale()).getMessage(200);
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java Thu Aug 15 21:11:58 2013
@@ -61,7 +61,7 @@ public class InternalNioOutputBuffer ext
finished = false;
// Cause loading of HttpMessages
- HttpMessages.getMessage(200);
+ HttpMessages.getInstance(response.getLocale()).getMessage(200);
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/HttpMessages.java Thu Aug 15 21:11:58 2013
@@ -16,6 +16,10 @@
*/
package org.apache.tomcat.util.http;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
import org.apache.tomcat.util.res.StringManager;
/**
@@ -28,14 +32,24 @@ import org.apache.tomcat.util.res.String
* @author costin@eng.sun.com
*/
public class HttpMessages {
+
+ private static final Map<Locale,HttpMessages> instances =
+ new ConcurrentHashMap<Locale, HttpMessages>();
+
+ private static final HttpMessages DEFAULT = getInstance(Locale.getDefault());
+
// XXX move message resources in this package
- protected static final StringManager sm =
- StringManager.getManager("org.apache.tomcat.util.http.res");
+ private final StringManager sm;
+
+ private String st_200 = null;
+ private String st_302 = null;
+ private String st_400 = null;
+ private String st_404 = null;
+
+ private HttpMessages(StringManager sm) {
+ this.sm = sm;
+ }
- static String st_200=null;
- static String st_302=null;
- static String st_400=null;
- static String st_404=null;
/** Get the status string associated with a status code.
* No I18N - return the messages defined in the HTTP spec.
@@ -45,36 +59,53 @@ public class HttpMessages {
* Common messages are cached.
*
*/
- public static String getMessage( int status ) {
+ public String getMessage(int status) {
// method from Response.
// Does HTTP requires/allow international messages or
// are pre-defined? The user doesn't see them most of the time
switch( status ) {
case 200:
- if( st_200==null ) {
- st_200=sm.getString( "sc.200");
+ if(st_200 == null ) {
+ st_200 = sm.getString("sc.200");
}
return st_200;
case 302:
- if( st_302==null ) {
- st_302=sm.getString( "sc.302");
+ if(st_302 == null ) {
+ st_302 = sm.getString("sc.302");
}
return st_302;
case 400:
- if( st_400==null ) {
- st_400=sm.getString( "sc.400");
+ if(st_400 == null ) {
+ st_400 = sm.getString("sc.400");
}
return st_400;
case 404:
- if( st_404==null ) {
- st_404=sm.getString( "sc.404");
+ if(st_404 == null ) {
+ st_404 = sm.getString("sc.404");
}
return st_404;
}
return sm.getString("sc."+ status);
}
+
+ public static HttpMessages getInstance(Locale locale) {
+ HttpMessages result = instances.get(locale);
+ if (result == null) {
+ StringManager sm = StringManager.getManager(
+ "org.apache.tomcat.util.http.res", locale);
+ if (Locale.getDefault().equals(sm.getLocale())) {
+ result = DEFAULT;
+ } else {
+ result = new HttpMessages(sm);
+ }
+ instances.put(locale, result);
+ }
+ return result;
+ }
+
+
/**
* Filter the specified message string for characters that are sensitive
* in HTML. This avoids potential attacks caused by including JavaScript
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java Thu Aug 15 21:11:58 2013
@@ -18,6 +18,7 @@
package org.apache.tomcat.util.res;
import java.text.MessageFormat;
+import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Map;
@@ -208,4 +209,27 @@ public class StringManager {
}
return mgr;
}
+
+ /**
+ * Retrieve the StringManager for a list of Locales. The first StringManager
+ * found will be returned.
+ *
+ * @param requestedLocales the list of Locales
+ *
+ * @return the found StringManager or the default StringManager
+ */
+ public static StringManager getManager(String packageName,
+ Enumeration<Locale> requestedLocales) {
+ while (requestedLocales.hasMoreElements()) {
+ Locale locale = requestedLocales.nextElement();
+ StringManager result = getManager(packageName, locale);
+ if (result.getLocale().equals(locale)) {
+ return result;
+ }
+ }
+ // Return the default
+ return getManager(packageName);
+ }
+
+
}
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1514496&r1=1514495&r2=1514496&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Aug 15 21:11:58 2013
@@ -137,6 +137,10 @@
Ensure that <code>java.lang.VirtualMachineError</code>s are not
swallowed when using the HTTP or AJP NIO connectors. (markt)
</fix>
+ <fix>
+ <bug>55399</bug>: Use the response locale to select the language to use
+ for the status message in the HTTP response. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org