Author: costin
Date: Mon Aug 21 08:20:40 2006
New Revision: 433260
URL: http://svn.apache.org/viewvc?rev=433260&view=rev
Log:
More refactoring - lite directory cleaned up of most functionality that could
go to a module, all modules
transformed into filter/servlets or listeners.
Finally implemented a new web.xml reader, and support saving the processed
result in .ser.
Starting to make the old valves/etc general purpose filters with no dep on
lite, user-space possible
Added:
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/TomcatLite.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/ctxmap/
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/ctxmap/WebappContextMapper.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/http/
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/http/CoyoteAdapter.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/webmap/
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/webmap/WebappFilterMapper.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/webmap/WebappServletMapper.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/config/
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/config/EnvEntryData.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/config/FilterData.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/config/FilterMappingData.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/config/SecurityConstraintData.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/config/ServletData.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/config/WebAppData.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/config/WebResourceCollectionData.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/deploy/
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/deploy/InitServlet.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/deploy/ReloadServlet.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/deploy/WebAnnotation.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/deploy/WebXml.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/session/
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/session/HttpSessionImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/session/SessionManagerServlet.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/servlets/util/RandomGenerator.java
tomcat/sandbox/tomcat-lite/resources/tomcat-lite.MF (with props)
tomcat/sandbox/tomcat-lite/webapps/ROOT/
tomcat/sandbox/tomcat-lite/webapps/ROOT/WEB-INF/
tomcat/sandbox/tomcat-lite/webapps/ROOT/WEB-INF/classes (with props)
tomcat/sandbox/tomcat-lite/webapps/ROOT/WEB-INF/lib/
tomcat/sandbox/tomcat-lite/webapps/ROOT/WEB-INF/lib/moneydance.jar (with
props)
tomcat/sandbox/tomcat-lite/webapps/ROOT/dav/
tomcat/sandbox/tomcat-lite/webapps/ROOT/index.html
tomcat/sandbox/tomcat-lite/webapps/__x_deploy/
tomcat/sandbox/tomcat-lite/webapps/__x_deploy/WEB-INF/
tomcat/sandbox/tomcat-lite/webapps/__x_deploy/WEB-INF/web.xml
tomcat/sandbox/tomcat-lite/webapps/__x_engine/
tomcat/sandbox/tomcat-lite/webapps/__x_engine/WEB-INF/
tomcat/sandbox/tomcat-lite/webapps/__x_engine/WEB-INF/web.xml
tomcat/sandbox/tomcat-lite/webapps/__x_protocol/
tomcat/sandbox/tomcat-lite/webapps/__x_protocol/WEB-INF/
tomcat/sandbox/tomcat-lite/webapps/__x_protocol/WEB-INF/web.xml
Removed:
tomcat/sandbox/tomcat-lite/java/org/apache/coyote/
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/CoyoteAdapter.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/Host.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/HttpSessionImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/Main.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/ServletFacade.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/WebappContextMapper.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/WebappFilterMapper.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/WebappServletMapper.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/WebappSessionManager.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/servlets/ReloadServlet.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/webxml/
tomcat/sandbox/tomcat-lite/resources/coyote-servlet.MF
Modified:
tomcat/sandbox/tomcat-lite/build.xml
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterChainImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/RequestDispatcherImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/ServletConfigImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/ServletContextImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/ServletRequestImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/ServletRequestWrapperImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/ServletResponseImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/ServletResponseWrapperImpl.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/jmx/JmxListener.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/package.html
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/util/CharsetMapper.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/util/ParameterMap.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/util/net/http11/Http11Processor.java
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/util/net/nio/NioEndpoint.java
Modified: tomcat/sandbox/tomcat-lite/build.xml
URL:
http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/build.xml?rev=433260&r1=433259&r2=433260&view=diff
==============================================================================
--- tomcat/sandbox/tomcat-lite/build.xml (original)
+++ tomcat/sandbox/tomcat-lite/build.xml Mon Aug 21 08:20:40 2006
@@ -74,10 +74,10 @@
<target name="tomcat-lite.jar" depends="compile,pack_tomcat-lite.jar"/>
<target name="pack_tomcat-lite.jar" >
- <jar destfile="tomcat-lite.jar" manifest="resources/coyote-servlet.MF">
+ <jar destfile="tomcat-lite.jar" manifest="resources/tomcat-lite.MF">
<fileset dir="${sandbox.home}/classes" >
<include name="org/apache/commons/logging/*.class"/>
- <include name="org/apache/coyote/servlet/**"/>
+ <include name="org/apache/tomcat/lite/**"/>
<include name="org/apache/tomcat/servlets/**"/>
<include name="org/apache/tomcat/util/buf/**"/>
<include name="org/apache/tomcat/util/loader/**"/>
Modified:
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterChainImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterChainImpl.java?rev=433260&r1=433259&r2=433260&view=diff
==============================================================================
--- tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterChainImpl.java
(original)
+++ tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterChainImpl.java
Mon Aug 21 08:20:40 2006
@@ -27,8 +27,6 @@
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
-import org.apache.tomcat.util.res.StringManager;
-
// Not thread safe !!
/**
@@ -39,9 +37,7 @@
* method itself.
*
* @author Craig R. McClanahan
- * @version $Revision: 303523 $ $Date: 2004-11-22 08:35:18 -0800 (Mon, 22 Nov
2004) $
*/
-
public final class FilterChainImpl implements FilterChain {
public static final int INCREMENT = 8;
@@ -79,13 +75,6 @@
private ServletConfigImpl wrapper;
- /**
- * The string manager for our package.
- */
- private static final StringManager sm =
- StringManager.getManager("org.apache.coyote.servlet");
-
-
// ---------------------------------------------------- FilterChain Methods
@@ -119,8 +108,7 @@
throw e;
} catch (Throwable e) {
e.printStackTrace();
- throw new ServletException
- (sm.getString("filterChain.filter"), e);
+ throw new ServletException("Throwable", e);
}
return;
}
@@ -136,8 +124,7 @@
} catch (RuntimeException e) {
throw e;
} catch (Throwable e) {
- throw new ServletException
- (sm.getString("filterChain.servlet"), e);
+ throw new ServletException("Throwable", e);
}
}
@@ -165,7 +152,7 @@
/**
* Release references to the filters and wrapper executed by this chain.
*/
- void release() {
+ public void release() {
n = 0;
pos = 0;
servlet = null;
Modified:
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java?rev=433260&r1=433259&r2=433260&view=diff
==============================================================================
---
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java
(original)
+++
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/FilterConfigImpl.java
Mon Aug 21 08:20:40 2006
@@ -18,10 +18,8 @@
package org.apache.tomcat.lite;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Enumeration;
-import java.util.HashMap;
import java.util.Map;
import javax.servlet.Filter;
@@ -29,8 +27,8 @@
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
+import org.apache.tomcat.servlets.config.FilterData;
import org.apache.tomcat.servlets.util.Enumerator;
-import org.apache.tomcat.util.log.SystemLogHandler;
/**
@@ -39,64 +37,37 @@
* - className - used to instantiate the filter
* - init params
* - other things not used in the servlet container ( icon, descr, etc )
- *
- *
*/
-public final class FilterConfigImpl implements FilterConfig, Serializable {
+public final class FilterConfigImpl implements FilterConfig {
public FilterConfigImpl(ServletContextImpl context) {
super();
this.context = context;
}
+ private FilterData data;
+
/**
* The Context with which we are associated.
*/
private ServletContextImpl context = null;
- private Map parameters = new HashMap();
-
/**
* The application Filter we are configured for.
*/
private transient Filter filter = null;
- private String filterName = null;
-
- private String filterClass = null;
-
- void setFilterName(String filterName) {
- this.filterName = filterName;
+ public void setData(FilterData data) {
+ this.data = data;
}
- public Map getParameterMap() {
- return (this.parameters);
- }
-
- public void setParameterMap(Map initParams) {
- parameters = initParams;
- }
-
- public String getFilterClass() {
- return (this.filterClass);
- }
-
- public void setFilterClass(String filterClass) {
- this.filterClass = filterClass;
- }
-
- // --------------------------------------------------- FilterConfig Methods
-
public String getFilterName() {
- return (this.filterName);
+ return data.filterName;
}
public String getInitParameter(String name) {
- Map map = getParameterMap();
- if (map == null)
- return (null);
- else
- return ((String) map.get(name));
+ if (data.initParams == null) return null;
+ return ((String) data.initParams.get(name));
}
@@ -105,13 +76,11 @@
* parameters for this Filter.
*/
public Enumeration getInitParameterNames() {
-
- Map map = getParameterMap();
+ Map map = data.initParams;
if (map == null)
return (new Enumerator(new ArrayList()));
else
return (new Enumerator(map.keySet()));
-
}
@@ -124,55 +93,31 @@
/**
* Return the application Filter we are configured for.
- *
- * @exception ClassCastException if the specified class does not implement
- * the <code>javax.servlet.Filter</code> interface
- * @exception ClassNotFoundException if the filter class cannot be found
- * @exception IllegalAccessException if the filter class cannot be
- * publicly instantiated
- * @exception InstantiationException if an exception occurs while
- * instantiating the filter object
- * @exception ServletException if thrown by the filter's init() method
*/
- Filter getFilter() throws ClassCastException, ClassNotFoundException,
+ public Filter getFilter() throws ClassCastException,
ClassNotFoundException,
IllegalAccessException, InstantiationException, ServletException {
// Return the existing filter instance, if any
- if (this.filter != null)
- return (this.filter);
+ if (filter != null)
+ return filter;
// Identify the class loader we will be using
- String filterClass = getFilterClass();
ClassLoader classLoader = null;
- if (filterClass.startsWith("org.apache.tomcat.servlet."))
- classLoader = this.getClass().getClassLoader();
- else
- classLoader = context.getClassLoader();
+
+ classLoader = context.getClassLoader();
ClassLoader oldCtxClassLoader =
Thread.currentThread().getContextClassLoader();
-
- // Instantiate a new instance of this filter and return it
- Class clazz = classLoader.loadClass(filterClass);
-
-
- this.filter = (Filter) clazz.newInstance();
- if (context instanceof ServletContextImpl &&
- ((ServletContextImpl)context).getSwallowOutput()) {
- try {
- SystemLogHandler.startCapture();
- filter.init(this);
- } finally {
- String log = SystemLogHandler.stopCapture();
- if (log != null && log.length() > 0) {
- getServletContext().log(log);
- }
- }
- } else {
- filter.init(this);
+ Thread.currentThread().setContextClassLoader(classLoader);
+ try {
+ Class clazz = classLoader.loadClass(data.filterClass);
+ this.filter = (Filter) clazz.newInstance();
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldCtxClassLoader);
}
+
+ filter.init(this);
return (this.filter);
-
}
@@ -180,17 +125,10 @@
* Release the Filter instance associated with this FilterConfig,
* if there is one.
*/
- void release() {
-
+ public void release() {
if (this.filter != null){
- filter.destroy();
+ filter.destroy();
}
this.filter = null;
-
}
-
-
- // -------------------------------------------------------- Private Methods
-
-
}
Modified:
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/RequestDispatcherImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/RequestDispatcherImpl.java?rev=433260&r1=433259&r2=433260&view=diff
==============================================================================
---
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/RequestDispatcherImpl.java
(original)
+++
tomcat/sandbox/tomcat-lite/java/org/apache/tomcat/lite/RequestDispatcherImpl.java
Mon Aug 21 08:20:40 2006
@@ -19,9 +19,6 @@
import java.io.IOException;
import java.io.PrintWriter;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
@@ -35,14 +32,9 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-//import org.apache.catalina.Globals;
-//import org.apache.catalina.InstanceEvent;
-//import org.apache.catalina.connector.ClientAbortException;
-//import org.apache.catalina.util.InstanceSupport;
-//import org.apache.catalina.util.StringManager;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.tomcat.lite.webmap.WebappFilterMapper;
import org.apache.tomcat.util.res.StringManager;
/**
@@ -61,6 +53,13 @@
final class RequestDispatcherImpl implements RequestDispatcher {
+ public RequestDispatcherImpl(ServletConfigImpl wrapper, String name) {
+ this.wrapper = wrapper;
+ this.name = name;
+ this.context = (ServletContextImpl) wrapper.getParent();
+
+ }
+
/**
* Construct a new instance of this class, configured according to the
* specified parameters. If both servletPath and pathInfo are
@@ -78,13 +77,9 @@
* @param name Servlet name (if a named dispatcher was created)
* else <code>null</code>
*/
- public RequestDispatcherImpl
- (ServletConfigImpl wrapper, String requestURI, String servletPath,
- String pathInfo, String queryString, String name) {
-
- super();
-
- // Save all of our configuration parameters
+ public RequestDispatcherImpl(ServletConfigImpl wrapper,
+ String requestURI, String servletPath,
+ String pathInfo, String queryString) {
this.wrapper = wrapper;
this.context = (ServletContextImpl) wrapper.getParent();
this.requestURI = requestURI;
@@ -92,17 +87,6 @@
this.origServletPath = servletPath;
this.pathInfo = pathInfo;
this.queryString = queryString;
- this.name = name;
-// if (wrapper instanceof StandardWrapper)
-// this.support = ((StandardWrapper) wrapper).getInstanceSupport();
-// else
-// this.support = new InstanceSupport(wrapper);
-
- if ( log.isDebugEnabled() )
- log.debug("servletPath=" + this.servletPath + ", pathInfo=" +
- this.pathInfo + ", queryString=" + queryString +
- ", name=" + this.name);
-
}
/**
@@ -203,126 +187,85 @@
private static Log log = LogFactory.getLog(RequestDispatcherImpl.class);
/**
- * The request specified by the dispatching application.
- */
- private ServletRequest appRequest = null;
-
-
- /**
- * The response specified by the dispatching application.
- */
- private ServletResponse appResponse = null;
-
-
- /**
* The Context this RequestDispatcher is associated with.
*/
private ServletContextImpl context = null;
-
- /**
- * Are we performing an include() instead of a forward()?
- */
- private boolean including = false;
-
-
- /**
- * Descriptive information about this implementation.
- */
- private static final String info =
- "org.apache.catalina.core.ApplicationDispatcher/1.0";
-
-
/**
* The servlet name for a named dispatcher.
*/
private String name = null;
-
+ /*
+ OrigRequest(ServletRequestImpl) -> include/forward * -> this include
+
+ On the path: user-defined RequestWrapper or our ServletRequestWrapper
+
+ include() is called with a RequestWrapper(->...->origRequest) or
origRequest
+
+ Based on params, etc -> we wrap the req / response in
ServletRequestWrapper,
+ call filters+servlet. Inside, the req can be wrapped again in
+ userReqWrapper, and other include called.
+
+
+ */
+
/**
* The outermost request that will be passed on to the invoked servlet.
*/
private ServletRequest outerRequest = null;
-
/**
* The outermost response that will be passed on to the invoked servlet.
*/
private ServletResponse outerResponse = null;
+ /**
+ * The request wrapper we have created and installed (if any).
+ */
+ private ServletRequest wrapRequest = null;
+
+ /**
+ * The response wrapper we have created and installed (if any).
+ */
+ private ServletResponse wrapResponse = null;
+ // Parameters used when constructing the dispatcvher
/**
* The extra path information for this RequestDispatcher.
*/
private String pathInfo = null;
-
-
/**
* The query string parameters for this RequestDispatcher.
*/
private String queryString = null;
-
-
/**
* The request URI for this RequestDispatcher.
*/
private String requestURI = null;
-
/**
* The servlet path for this RequestDispatcher.
*/
private String servletPath = null;
+ //
private String origServletPath = null;
/**
* The StringManager for this package.
*/
private static final StringManager sm =
- StringManager.getManager("org.apache.coyote.servlet");
-
-
- /**
- * The InstanceSupport instance associated with our Wrapper (used to
- * send "before dispatch" and "after dispatch" events.
- */
- //private InstanceSupport support = null;
-
+ StringManager.getManager("org.apache.tomcat.lite");
/**
* The Wrapper associated with the resource that will be forwarded to
* or included.
*/
private ServletConfigImpl wrapper = null;
+
+ private Servlet servlet;
- /**
- * The request wrapper we have created and installed (if any).
- */
- private ServletRequest wrapRequest = null;
-
-
- /**
- * The response wrapper we have created and installed (if any).
- */
- private ServletResponse wrapResponse = null;
-
-
- // ------------------------------------------------------------- Properties
-
-
- /**
- * Return the descriptive information about this implementation.
- */
- public String getInfo() {
-
- return (info);
-
- }
-
-
- // --------------------------------------------------------- Public Methods
-
/**
* Forward this request and response to another resource for processing.
@@ -345,6 +288,7 @@
throw new IllegalStateException
(sm.getString("applicationDispatcher.forward.ise"));
}
+
try {
response.resetBuffer();
} catch (IllegalStateException e) {
@@ -358,28 +302,12 @@
// Identify the HTTP-specific request and response objects (if any)
HttpServletRequest hrequest = null;
- if (request instanceof HttpServletRequest)
- hrequest = (HttpServletRequest) request;
+ hrequest = (HttpServletRequest) request;
HttpServletResponse hresponse = null;
- if (response instanceof HttpServletResponse)
- hresponse = (HttpServletResponse) response;
-
- // Handle a non-HTTP forward by passing the existing request/response
- if ((hrequest == null) || (hresponse == null)) {
+ hresponse = (HttpServletResponse) response;
- if ( log.isDebugEnabled() )
- log.debug(" Non-HTTP Forward");
-
- processRequest(hrequest,hresponse);
-
- }
-
- // Handle an HTTP named dispatcher forward
- else if ((servletPath == null) && (pathInfo == null)) {
-
- if ( log.isDebugEnabled() )
- log.debug(" Named Dispatcher Forward");
-
+ // Handle a nn-HTTP forward by passing the existing request/response
+ if ((servletPath == null) && (pathInfo == null)) {
ServletRequestWrapperImpl wrequest =
(ServletRequestWrapperImpl) wrapRequest();
wrequest.setRequestURI(hrequest.getRequestURI());
@@ -392,19 +320,11 @@
wrequest.recycle();
unwrapRequest();
-
- }
-
- // Handle an HTTP path-based forward
- else {
-
- if ( log.isDebugEnabled() )
- log.debug(" Path Based Forward");
-
+ } else { // path based
ServletRequestWrapperImpl wrequest =
(ServletRequestWrapperImpl) wrapRequest();
- String contextPath = context.getContextPath();
+ String contextPath = context.getContextPath();
if (hrequest.getAttribute(FORWARD_REQUEST_URI_ATTR) == null) {
wrequest.setAttribute(FORWARD_REQUEST_URI_ATTR,
hrequest.getRequestURI());
@@ -469,38 +389,6 @@
}
-
- /**
- * Prepare the request based on the filter configuration.
- * @param request The servlet request we are processing
- * @param response The servlet response we are creating
- *
- * @exception IOException if an input/output error occurs
- * @exception ServletException if a servlet error occurs
- */
- private void processRequest(ServletRequest request,
- ServletResponse response)
- throws IOException, ServletException {
-
- Integer disInt = (Integer) request.getAttribute
- (WebappFilterMapper.DISPATCHER_TYPE_ATTR);
- if (disInt != null) {
- if (disInt.intValue() != WebappFilterMapper.ERROR) {
- outerRequest.setAttribute
- (WebappFilterMapper.DISPATCHER_REQUEST_PATH_ATTR,
- origServletPath);
- outerRequest.setAttribute
- (WebappFilterMapper.DISPATCHER_TYPE_ATTR,
- new Integer(WebappFilterMapper.FORWARD));
- invoke(outerRequest, response);
- } else {
- invoke(outerRequest, response);
- }
- }
-
- }
-
-
/**
* Include the response from another resource in the current response.
@@ -521,8 +409,7 @@
setup(request, response, true);
// Create a wrapped response to use for this request
- // ServletResponse wresponse = null;
- ServletResponse wresponse = wrapResponse();
+ ServletResponse wresponse = wrapResponse(true);
// Handle a non-HTTP include
if (!(request instanceof HttpServletRequest) ||
@@ -550,7 +437,7 @@
wrequest.setAttribute(WebappFilterMapper.DISPATCHER_TYPE_ATTR,
new
Integer(WebappFilterMapper.INCLUDE));
wrequest.setAttribute(WebappFilterMapper.DISPATCHER_REQUEST_PATH_ATTR,
origServletPath);
- invoke(outerRequest, outerResponse);
+ invoke(outerRequest, wresponse);
wrequest.recycle();
}
@@ -585,11 +472,12 @@
wrequest.setAttribute(WebappFilterMapper.DISPATCHER_TYPE_ATTR,
new
Integer(WebappFilterMapper.INCLUDE));
wrequest.setAttribute(WebappFilterMapper.DISPATCHER_REQUEST_PATH_ATTR,
origServletPath);
- invoke(outerRequest, outerResponse);
+ invoke(outerRequest, wresponse);
wrequest.recycle();
}
+
}
@@ -597,6 +485,35 @@
/**
+ * Prepare the request based on the filter configuration.
+ * @param request The servlet request we are processing
+ * @param response The servlet response we are creating
+ *
+ * @exception IOException if an input/output error occurs
+ * @exception ServletException if a servlet error occurs
+ */
+ private void processRequest(ServletRequest request,
+ ServletResponse response)
+ throws IOException, ServletException {
+ Integer disInt =
+ (Integer)
request.getAttribute(WebappFilterMapper.DISPATCHER_TYPE_ATTR);
+ if (disInt != null) {
+ if (disInt.intValue() != WebappFilterMapper.ERROR) {
+ outerRequest.setAttribute
+ (WebappFilterMapper.DISPATCHER_REQUEST_PATH_ATTR,
+ origServletPath);
+ outerRequest.setAttribute
+ (WebappFilterMapper.DISPATCHER_TYPE_ATTR,
+ new Integer(WebappFilterMapper.FORWARD));
+ }
+ invoke(outerRequest, response);
+ }
+
+ }
+
+
+
+ /**
* Ask the resource represented by this RequestDispatcher to process
* the associated request, and create (or append to) the associated
* response.
@@ -627,52 +544,20 @@
}
// Initialize local variables we may need
- HttpServletRequest hrequest = (HttpServletRequest) request;
HttpServletResponse hresponse = (HttpServletResponse) response;
- Servlet servlet = null;
IOException ioException = null;
ServletException servletException = null;
RuntimeException runtimeException = null;
- boolean unavailable = false;
-
- // Check for the servlet being marked unavailable
- if (wrapper.isUnavailable()) {
- wrapper.getLogger().warn(
- sm.getString("applicationDispatcher.isUnavailable",
- wrapper.getName()));
- long available = wrapper.getAvailable();
- if ((available > 0L) && (available < Long.MAX_VALUE))
- hresponse.setDateHeader("Retry-After", available);
- hresponse.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, sm
- .getString("applicationDispatcher.isUnavailable", wrapper
- .getName()));
- unavailable = true;
- }
-
- // Allocate a servlet instance to process this request
- try {
- if (!unavailable) {
- servlet = wrapper.allocate();
- }
- } catch (ServletException e) {
-
wrapper.getLogger().error(sm.getString("applicationDispatcher.allocateException",
- wrapper.getName()),
ServletConfigImpl.getRootCause(e));
- servletException = e;
- servlet = null;
- } catch (Throwable e) {
-
wrapper.getLogger().error(sm.getString("applicationDispatcher.allocateException",
- wrapper.getName()), e);
- servletException = new ServletException
- (sm.getString("applicationDispatcher.allocateException",
- wrapper.getName()), e);
- servlet = null;
- }
+
+ servletException = allocateServlet(hresponse, servletException);
// Get the FilterChain Here
WebappFilterMapper factory =
((ServletContextImpl)wrapper.getServletContext()).getFilterMapper();
FilterChainImpl filterChain = factory.createFilterChain(request,
-
wrapper,servlet);
+ wrapper,
+ servlet);
+
// Call the service() method for the allocated servlet instance
try {
String jspFile = wrapper.getJspFile();
@@ -680,54 +565,27 @@
request.setAttribute(JSP_FILE_ATTR, jspFile);
else
request.removeAttribute(JSP_FILE_ATTR);
-// support.fireInstanceEvent(InstanceEvent.BEFORE_DISPATCH_EVENT,
-// servlet, request, response);
// for includes/forwards
if ((servlet != null) && (filterChain != null)) {
filterChain.doFilter(request, response);
}
- // Servlet Service Method is called by the FilterChain
- request.removeAttribute(JSP_FILE_ATTR);
-// support.fireInstanceEvent(InstanceEvent.AFTER_DISPATCH_EVENT,
-// servlet, request, response);
-// } catch (ClientAbortException e) {
-// request.removeAttribute(Globals.JSP_FILE_ATTR);
-// support.fireInstanceEvent(InstanceEvent.AFTER_DISPATCH_EVENT,
-// servlet, request, response);
-// ioException = e;
} catch (IOException e) {
- request.removeAttribute(JSP_FILE_ATTR);
-// support.fireInstanceEvent(InstanceEvent.AFTER_DISPATCH_EVENT,
-// servlet, request, response);
wrapper.getLogger().error(sm.getString("applicationDispatcher.serviceException",
- wrapper.getName()), e);
+ wrapper.getServletName()), e);
ioException = e;
} catch (UnavailableException e) {
- request.removeAttribute(JSP_FILE_ATTR);
-// support.fireInstanceEvent(InstanceEvent.AFTER_DISPATCH_EVENT,
-// servlet, request, response);
wrapper.getLogger().error(sm.getString("applicationDispatcher.serviceException",
- wrapper.getName()), e);
+ wrapper.getServletName()), e);
servletException = e;
wrapper.unavailable(e);
} catch (ServletException e) {
- request.removeAttribute(JSP_FILE_ATTR);
-// support.fireInstanceEvent(InstanceEvent.AFTER_DISPATCH_EVENT,
-// servlet, request, response);
- Throwable rootCause = ServletConfigImpl.getRootCause(e);
-// if (!(rootCause instanceof ClientAbortException)) {
-//
wrapper.getLogger().error(sm.getString("applicationDispatcher.serviceException",
-// wrapper.getName()), rootCause);
-// }
servletException = e;
} catch (RuntimeException e) {
- request.removeAttribute(JSP_FILE_ATTR);
-// support.fireInstanceEvent(InstanceEvent.AFTER_DISPATCH_EVENT,
-// servlet, request, response);
wrapper.getLogger().error(sm.getString("applicationDispatcher.serviceException",
- wrapper.getName()), e);
+ wrapper.getServletName()), e);
runtimeException = e;
}
+ request.removeAttribute(JSP_FILE_ATTR);
// Release the filter chain (if any) for this request
try {
@@ -735,33 +593,16 @@
filterChain.release();
} catch (Throwable e) {
log.error(sm.getString("standardWrapper.releaseFilters",
- wrapper.getName()), e);
- //FIXME Exception handling needs to be simpiler to what is in the
StandardWrapperValue
+ wrapper.getServletName()), e);
}
- // Deallocate the allocated servlet instance
- try {
- if (servlet != null) {
- wrapper.deallocate(servlet);
- }
- } catch (ServletException e) {
-
wrapper.getLogger().error(sm.getString("applicationDispatcher.deallocateException",
- wrapper.getName()), e);
- servletException = e;
- } catch (Throwable e) {
-
wrapper.getLogger().error(sm.getString("applicationDispatcher.deallocateException",
- wrapper.getName()), e);
- servletException = new ServletException
- (sm.getString("applicationDispatcher.deallocateException",
- wrapper.getName()), e);
- }
+ servletException = servletDealocate(servletException);
// Reset the old context class loader
if (oldCCL != null)
Thread.currentThread().setContextClassLoader(oldCCL);
// Unwrap request/response if needed
- // See Bugzilla 30949
unwrapRequest();
unwrapResponse();
@@ -775,6 +616,67 @@
}
+ private ServletException servletDealocate(ServletException
servletException)
+ {
+ try {
+ if (servlet != null) {
+ wrapper.deallocate(servlet);
+ }
+ } catch (ServletException e) {
+
wrapper.getLogger().error(sm.getString("applicationDispatcher.deallocateException",
+ wrapper.getServletName()), e);
+ servletException = e;
+ } catch (Throwable e) {
+
wrapper.getLogger().error(sm.getString("applicationDispatcher.deallocateException",
+ wrapper.getServletName()), e);
+ servletException = new ServletException
+ (sm.getString("applicationDispatcher.deallocateException",
+ wrapper.getServletName()), e);
+ }
+ return servletException;
+ }
+
+ private ServletException allocateServlet(HttpServletResponse hresponse,
+ ServletException servletException)
+ throws IOException
+ {
+ boolean unavailable = false;
+
+ // Check for the servlet being marked unavailable
+ if (wrapper.isUnavailable()) {
+ wrapper.getLogger().warn(
+ sm.getString("applicationDispatcher.isUnavailable",
+ wrapper.getServletName()));
+ long available = wrapper.getAvailable();
+ if ((available > 0L) && (available < Long.MAX_VALUE))
+ hresponse.setDateHeader("Retry-After", available);
+ hresponse.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, sm
+ .getString("applicationDispatcher.isUnavailable",
+ wrapper.getServletName()));
+ unavailable = true;
+ }
+
+ // Allocate a servlet instance to process this request
+ try {
+ if (!unavailable) {
+ servlet = wrapper.allocate();
+ }
+ } catch (ServletException e) {
+
wrapper.getLogger().error(sm.getString("applicationDispatcher.allocateException",
+ wrapper.getServletName()),
ServletConfigImpl.getRootCause(e));
+ servletException = e;
+ servlet = null;
+ } catch (Throwable e) {
+
wrapper.getLogger().error(sm.getString("applicationDispatcher.allocateException",
+ wrapper.getServletName()), e);
+ servletException = new ServletException
+ (sm.getString("applicationDispatcher.allocateException",
+ wrapper.getServletName()), e);
+ servlet = null;
+ }
+ return servletException;
+ }
+
/**
* Set up to handle the specified request and response
@@ -787,27 +689,22 @@
private void setup(ServletRequest request, ServletResponse response,
boolean including) {
- this.appRequest = request;
- this.appResponse = response;
this.outerRequest = request;
this.outerResponse = response;
- this.including = including;
-
}
/**
- * Unwrap the request if we have wrapped it.
+ * Unwrap the request if we have wrapped it. Not sure how it could end
+ * up in the middle.
*/
private void unwrapRequest() {
-
if (wrapRequest == null)
return;
ServletRequest previous = null;
ServletRequest current = outerRequest;
while (current != null) {
-
// If we run into the container request we are done
if (current instanceof ServletRequestImpl)
break;
@@ -826,9 +723,7 @@
// Advance to the next request in the chain
previous = current;
current = ((ServletRequestWrapper) current).getRequest();
-
}
-
}
@@ -836,14 +731,12 @@
* Unwrap the response if we have wrapped it.
*/
private void unwrapResponse() {
-
if (wrapResponse == null)
return;
ServletResponse previous = null;
ServletResponse current = outerResponse;
while (current != null) {
-
// If we run into the container response we are done
if (current instanceof ServletResponseImpl)
break;
@@ -858,13 +751,10 @@
((ServletResponseWrapper) previous).setResponse(next);
break;
}
-
// Advance to the next response in the chain
previous = current;
current = ((ServletResponseWrapper) current).getResponse();
-
}
-
}
@@ -873,20 +763,14 @@
* appropriate spot in the request chain.
*/
private ServletRequest wrapRequest() {
-
// Locate the request we should insert in front of
ServletRequest previous = null;
ServletRequest current = outerRequest;
while (current != null) {
- if ("org.apache.catalina.servlets.InvokerHttpRequest".
- equals(current.getClass().getName()))
- break; // KLUDGE - Make nested RD.forward() using invoker work
if (!(current instanceof ServletRequestWrapper))
break;
if (current instanceof ServletRequestWrapperImpl)
break;
-// if (current instanceof ApplicationRequest)
-// break;
if (current instanceof ServletRequestImpl)
break;
previous = current;
@@ -895,37 +779,38 @@
// Instantiate a new wrapper at this point and insert it in the chain
ServletRequest wrapper = null;
-// if ((current instanceof ApplicationHttpRequest) ||
-// (current instanceof Request) ||
-// (current instanceof HttpServletRequest)) {
- // Compute a crossContext flag
- HttpServletRequest hcurrent = (HttpServletRequest) current;
- boolean crossContext = false;
- if ((outerRequest instanceof ServletRequestWrapperImpl) ||
- (outerRequest instanceof ServletRequestImpl) ||
- (outerRequest instanceof HttpServletRequest)) {
- HttpServletRequest houterRequest =
- (HttpServletRequest) outerRequest;
- Object contextPath = houterRequest.getAttribute
- (INCLUDE_CONTEXT_PATH_ATTR);
- if (contextPath == null) {
- // Forward
- contextPath = houterRequest.getContextPath();
- }
- crossContext = !(context.getContextPath().equals(contextPath));
- }
- wrapper = new ServletRequestWrapperImpl
- (hcurrent, context, crossContext);
-// } else {
-// wrapper = new ApplicationRequest(current);
-// }
+
+ // Compute a crossContext flag
+ HttpServletRequest hcurrent = (HttpServletRequest) current;
+ boolean crossContext = isCrossContext();
+
+ wrapper =
+ new ServletRequestWrapperImpl(hcurrent, context, crossContext);
+
if (previous == null)
outerRequest = wrapper;
else
((ServletRequestWrapper) previous).setRequest(wrapper);
wrapRequest = wrapper;
return (wrapper);
+ }
+ private boolean isCrossContext() {
+ boolean crossContext = false;
+ if ((outerRequest instanceof ServletRequestWrapperImpl) ||
+ (outerRequest instanceof ServletRequestImpl) ||
+ (outerRequest instanceof HttpServletRequest)) {
+ HttpServletRequest houterRequest =
+ (HttpServletRequest) outerRequest;
+ Object contextPath =
+ houterRequest.getAttribute(INCLUDE_CONTEXT_PATH_ATTR);
+ if (contextPath == null) {
+ // Forward
+ contextPath = houterRequest.getContextPath();
+ }
+ crossContext = !(context.getContextPath().equals(contextPath));
+ }
+ return crossContext;
}
@@ -933,8 +818,7 @@
* Create and return a response wrapper that has been inserted in the
* appropriate spot in the response chain.
*/
- private ServletResponse wrapResponse() {
-
+ private ServletResponse wrapResponse(boolean including) {
// Locate the response we should insert in front of
ServletResponse previous = null;
ServletResponse current = outerResponse;
@@ -943,8 +827,6 @@
break;
if (current instanceof ServletResponseWrapperImpl)
break;
-// if (current instanceof ApplicationResponse)
-// break;
if (current instanceof ServletResponseImpl)
break;
previous = current;
@@ -953,14 +835,9 @@
// Instantiate a new wrapper at this point and insert it in the chain
ServletResponse wrapper = null;
-// if ((current instanceof ApplicationHttpResponse) ||
-// (current instanceof Response) ||
-// (current instanceof HttpServletResponse))
wrapper =
new ServletResponseWrapperImpl((HttpServletResponse) current,
including);
-// else
-// wrapper = new ApplicationResponse(current, including);
if (previous == null)
outerResponse = wrapper;
else
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]