You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@locus.apache.org on 2000/11/25 01:57:25 UTC
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/deploy ErrorPage.java LoginConfig.java
craigmcc 00/11/24 16:57:25
Modified: catalina/src/share/org/apache/catalina/core
LocalStrings.properties StandardContext.java
StandardWrapper.java
catalina/src/share/org/apache/catalina/deploy ErrorPage.java
LoginConfig.java
Log:
Improve backwards compatibility of servlet 2.2 applications running under
Catalina, by conditionally accepting context-relative pathnames that do
not start with "/". To enable this acceptance, you must explicitly
reference the public identifier of the 2.2 DTD in your web.xml file:
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
(in other words, the standard DOCTYPE declaration for a 2.2 webapp). The
paths without leading slashes are accepted on the following web.xml
elements:
* <jsp-file> subelement of the <servlet> element.
* <location> subelement of the <error-page> element.
* <form-login-page> and <form-error-page> subelements of the
<form-login-config> element.
To encourage attention to this issue, a warning message will be logged to
the Logger associated with this Context, if such a value is accepted.
If you specify the 2.3 version of the DTD, attempts to specify such a path
without a leading "/" will be rejected. This is based on the tightened
requirements that are specifically defined in the 2.3 specification.
Revision Changes Path
1.19 +10 -0 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings.properties
Index: LocalStrings.properties
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings.properties,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- LocalStrings.properties 2000/11/02 06:14:09 1.18
+++ LocalStrings.properties 2000/11/25 00:57:24 1.19
@@ -25,6 +25,9 @@
standardContext.alreadyStarted=Context has already been started
standardContext.applicationListener=Error configuring application listener of class {0}
standardContext.applicationSkipped=Skipped installing application listeners due to previous error(s)
+standardContext.errorPage.error=Error page location {0} must start with a '/'
+standardContext.errorPage.required=ErrorPage cannot be null
+standardContext.errorPage.warning=WARNING: Error page location {0} must start with a '/' in Servlet 2.3
standardContext.filterMap.either=Filter mapping must specify either a <url-pattern> or a <servlet-name>
standardContext.filterMap.name=Filter mapping specifies an unknown filter name {0}
standardContext.filterMap.pattern=Invalid <url-pattern> {0} in filter mapping
@@ -32,6 +35,11 @@
standardContext.isUnavailable=This application is not currently available
standardContext.listenerStart=Exception sending context initialized event to listener instance of class {0}
standardContext.listenerStop=Exception sending context destroyed event to listener instance of class {0}
+standardContext.loginConfig.errorPage=Form error page {0} must start with a '/'
+standardContext.loginConfig.errorWarning=WARNING: Form error page {0} must start with a '/' in Servlet 2.3
+standardContext.loginConfig.loginPage=Form login page {0} must start with a '/'
+standardContext.loginConfig.loginWarning=WARNING: Form login page {0} must start with a '/' in Servlet 2.3
+standardContext.loginConfig.required=LoginConfig cannot be null
standardContext.managerLoad=Exception loading sessions from persistent storage
standardContext.managerUnload=Exception unloading sessions to persistent storage
standardContext.mappingError=MAPPING configuration error for relative URI {0}
@@ -51,6 +59,8 @@
standardContext.stoppingLoader=Exception stopping Loader
standardContext.stoppingManager=Exception stopping Manager
standardContext.stoppingWrapper=Exception stopping Wrapper for servlet {0}
+standardContext.wrapper.error=JSP file {0} must start with a '/'
+standardContext.wrapper.warning=WARNING: JSP file {0} must start with a '/' in Servlet 2.3
standardContext.invalidEnvEntryValue={0} environment entry has an invalid value for specified type
standardContext.invalidEnvEntryType={0} environment entry has an invalid type
standardContext.bindFailed=Bind naming operation failed : {0}
1.30 +91 -12 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java
Index: StandardContext.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- StandardContext.java 2000/11/24 22:36:23 1.29
+++ StandardContext.java 2000/11/25 00:57:24 1.30
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java,v 1.29 2000/11/24 22:36:23 craigmcc Exp $
- * $Revision: 1.29 $
- * $Date: 2000/11/24 22:36:23 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java,v 1.30 2000/11/25 00:57:24 craigmcc Exp $
+ * $Revision: 1.30 $
+ * $Date: 2000/11/25 00:57:24 $
*
* ====================================================================
*
@@ -131,7 +131,7 @@
*
* @author Craig R. McClanahan
* @author Remy Maucherat
- * @version $Revision: 1.29 $ $Date: 2000/11/24 22:36:23 $
+ * @version $Revision: 1.30 $ $Date: 2000/11/25 00:57:24 $
*/
public final class StandardContext
@@ -681,23 +681,23 @@
/**
- * Return the login configuration descriptor for this web application.
+ * Set the Loader with which this Context is associated.
+ *
+ * @param loader The newly associated loader
*/
- public LoginConfig getLoginConfig() {
+ public synchronized void setLoader(Loader loader) {
- return (this.loginConfig);
+ super.setLoader(loader);
}
/**
- * Set the Loader with which this Context is associated.
- *
- * @param loader The newly associated loader
+ * Return the login configuration descriptor for this web application.
*/
- public synchronized void setLoader(Loader loader) {
+ public LoginConfig getLoginConfig() {
- super.setLoader(loader);
+ return (this.loginConfig);
}
@@ -709,6 +709,36 @@
*/
public void setLoginConfig(LoginConfig config) {
+ // Validate the incoming property value
+ if (config == null)
+ throw new IllegalArgumentException
+ (sm.getString("standardContext.loginConfig.required"));
+ String loginPage = config.getLoginPage();
+ if ((loginPage != null) && !loginPage.startsWith("/")) {
+ if (isServlet22()) {
+ log(sm.getString("standardContext.loginConfig.loginWarning",
+ loginPage));
+ config.setLoginPage("/" + loginPage);
+ } else {
+ throw new IllegalArgumentException
+ (sm.getString("standardContext.loginConfig.loginPage",
+ loginPage));
+ }
+ }
+ String errorPage = config.getErrorPage();
+ if ((errorPage != null) && !errorPage.startsWith("/")) {
+ if (isServlet22()) {
+ log(sm.getString("standardContext.loginConfig.errorWarning",
+ errorPage));
+ config.setErrorPage("/" + errorPage);
+ } else {
+ throw new IllegalArgumentException
+ (sm.getString("standardContext.loginConfig.errorPage",
+ errorPage));
+ }
+ }
+
+ // Process the property setting change
LoginConfig oldLoginConfig = this.loginConfig;
this.loginConfig = config;
support.firePropertyChange("loginConfig",
@@ -761,6 +791,10 @@
*/
public void setPublicId(String publicId) {
+ if (debug >= 1)
+ log("Setting deployment descriptor public ID to '" +
+ publicId + "'");
+
String oldPublicId = this.publicId;
this.publicId = publicId;
support.firePropertyChange("publicId", oldPublicId, publicId);
@@ -971,6 +1005,17 @@
if (!(child instanceof Wrapper))
throw new IllegalArgumentException
(sm.getString("standardContext.notWrapper"));
+ Wrapper wrapper = (Wrapper) child;
+ String jspFile = wrapper.getJspFile();
+ if ((jspFile != null) && !jspFile.startsWith("/")) {
+ if (isServlet22()) {
+ log(sm.getString("standardContext.wrapper.warning", jspFile));
+ wrapper.setJspFile("/" + jspFile);
+ } else {
+ throw new IllegalArgumentException
+ (sm.getString("standardContext.wrapper.error", jspFile));
+ }
+ }
super.addChild(child);
}
@@ -1045,6 +1090,24 @@
*/
public void addErrorPage(ErrorPage errorPage) {
+ // Validate the input parameters
+ if (errorPage == null)
+ throw new IllegalArgumentException
+ (sm.getString("standardContext.errorPage.required"));
+ String location = errorPage.getLocation();
+ if ((location != null) && !location.startsWith("/")) {
+ if (isServlet22()) {
+ log(sm.getString("standardContext.errorPage.warning",
+ location));
+ errorPage.setLocation("/" + location);
+ } else {
+ throw new IllegalArgumentException
+ (sm.getString("standardContext.errorPage.error",
+ location));
+ }
+ }
+
+ // Add the specified error page to our internal collections
String exceptionType = errorPage.getExceptionType();
if (exceptionType != null) {
synchronized (exceptionPages) {
@@ -2967,6 +3030,22 @@
protected void addDefaultMapper(String mapperClass) {
super.addDefaultMapper(this.mapperClass);
+
+ }
+
+
+ /**
+ * Are we processing a version 2.2 deployment descriptor?
+ */
+ protected boolean isServlet22() {
+
+ if (this.publicId == null)
+ return (false);
+ if (this.publicId.equals
+ (org.apache.catalina.startup.Constants.WebDtdPublicId_22))
+ return (true);
+ else
+ return (false);
}
1.11 +7 -7 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
Index: StandardWrapper.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- StandardWrapper.java 2000/10/13 05:58:52 1.10
+++ StandardWrapper.java 2000/11/25 00:57:24 1.11
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v 1.10 2000/10/13 05:58:52 craigmcc Exp $
- * $Revision: 1.10 $
- * $Date: 2000/10/13 05:58:52 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v 1.11 2000/11/25 00:57:24 craigmcc Exp $
+ * $Revision: 1.11 $
+ * $Date: 2000/11/25 00:57:24 $
*
* ====================================================================
*
@@ -101,7 +101,7 @@
* make them efficient are counter-productive.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.10 $ $Date: 2000/10/13 05:58:52 $
+ * @version $Revision: 1.11 $ $Date: 2000/11/25 00:57:24 $
*/
public final class StandardWrapper
@@ -307,9 +307,9 @@
*/
public void setJspFile(String jspFile) {
- if ((jspFile != null) && !jspFile.startsWith("/"))
- throw new IllegalArgumentException
- (sm.getString("standardWrapper.jspFile.format", jspFile));
+ // if ((jspFile != null) && !jspFile.startsWith("/"))
+ // throw new IllegalArgumentException
+ // (sm.getString("standardWrapper.jspFile.format", jspFile));
String oldJspFile = this.jspFile;
this.jspFile = jspFile;
1.3 +7 -7 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/deploy/ErrorPage.java
Index: ErrorPage.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/deploy/ErrorPage.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ErrorPage.java 2000/10/07 20:08:43 1.2
+++ ErrorPage.java 2000/11/25 00:57:25 1.3
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/deploy/ErrorPage.java,v 1.2 2000/10/07 20:08:43 craigmcc Exp $
- * $Revision: 1.2 $
- * $Date: 2000/10/07 20:08:43 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/deploy/ErrorPage.java,v 1.3 2000/11/25 00:57:25 craigmcc Exp $
+ * $Revision: 1.3 $
+ * $Date: 2000/11/25 00:57:25 $
*
* ====================================================================
*
@@ -74,7 +74,7 @@
* deployment descriptor.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.2 $ $Date: 2000/10/07 20:08:43 $
+ * @version $Revision: 1.3 $ $Date: 2000/11/25 00:57:25 $
*/
public final class ErrorPage {
@@ -181,9 +181,9 @@
*/
public void setLocation(String location) {
- if ((location == null) || !location.startsWith("/"))
- throw new IllegalArgumentException
- ("Error Page Location must start with a '/'");
+ // if ((location == null) || !location.startsWith("/"))
+ // throw new IllegalArgumentException
+ // ("Error Page Location must start with a '/'");
this.location = RequestUtil.URLDecode(location);
}
1.4 +10 -10 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/deploy/LoginConfig.java
Index: LoginConfig.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/deploy/LoginConfig.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LoginConfig.java 2000/10/07 20:08:43 1.3
+++ LoginConfig.java 2000/11/25 00:57:25 1.4
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/deploy/LoginConfig.java,v 1.3 2000/10/07 20:08:43 craigmcc Exp $
- * $Revision: 1.3 $
- * $Date: 2000/10/07 20:08:43 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/deploy/LoginConfig.java,v 1.4 2000/11/25 00:57:25 craigmcc Exp $
+ * $Revision: 1.4 $
+ * $Date: 2000/11/25 00:57:25 $
*
* ====================================================================
*
@@ -74,7 +74,7 @@
* deployment descriptor.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.3 $ $Date: 2000/10/07 20:08:43 $
+ * @version $Revision: 1.4 $ $Date: 2000/11/25 00:57:25 $
*/
public final class LoginConfig {
@@ -108,9 +108,9 @@
}
public void setErrorPage(String errorPage) {
- if ((errorPage == null) || !errorPage.startsWith("/"))
- throw new IllegalArgumentException
- ("Error Page resource path must start with a '/'");
+ // if ((errorPage == null) || !errorPage.startsWith("/"))
+ // throw new IllegalArgumentException
+ // ("Error Page resource path must start with a '/'");
this.errorPage = RequestUtil.URLDecode(errorPage);
}
@@ -125,9 +125,9 @@
}
public void setLoginPage(String loginPage) {
- if ((loginPage == null) || !loginPage.startsWith("/"))
- throw new IllegalArgumentException
- ("Login Page resource path must start with a '/'");
+ // if ((loginPage == null) || !loginPage.startsWith("/"))
+ // throw new IllegalArgumentException
+ // ("Login Page resource path must start with a '/'");
this.loginPage = RequestUtil.URLDecode(loginPage);
}