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 2001/01/04 22:24:00 UTC

cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/core ContextManager.java

marcsaeg    01/01/04 13:24:00

  Modified:    src/share/org/apache/tomcat/core Tag: tomcat_32
                        ContextManager.java
  Log:
  If no context can be found for the request URI then display
  a 404 error.  Previously this caused a tight loop in
  PrefixMapper.getLongestPrefixMatch().
  
  A portion of this fix was submitted by Shawn McMurdo [shawn@lutris.com].
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.100.2.20 +66 -0     jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java
  
  Index: ContextManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java,v
  retrieving revision 1.100.2.19
  retrieving revision 1.100.2.20
  diff -u -r1.100.2.19 -r1.100.2.20
  --- ContextManager.java	2000/11/16 18:25:21	1.100.2.19
  +++ ContextManager.java	2001/01/04 21:23:59	1.100.2.20
  @@ -1015,6 +1015,15 @@
   	Context ctx = req.getContext();
   	if(ctx==null) ctx=getContext("");
   
  +	if(ctx == null){
  +		// The request didn't map into any context so send a 404 error.
  +		try{
  +			handleContextNotFound(req, res);
  +		}catch(IOException e){
  +		}
  +		return;
  +	}
  +
   	// don't log normal cases ( redirect and need_auth ), they are not
   	// error
   	// XXX this log was intended to debug the status code generation.
  @@ -1182,6 +1191,63 @@
   	return false;
       }
   
  +	 /**
  +	  *  Called if the request does not map into any context.  This code
  +	  * was lifted from DefaultCMSetter.NotFoundHandler becuase without
  +	  * a valid context we really can't execute that servlet.
  +	  */
  +	 private void  handleContextNotFound(Request req, Response res) throws IOException
  +	 {
  +		 StringManager sm=StringManager.getManager("org.apache.tomcat.resources");
  +		 res.setContentType("text/html");	// ISO-8859-1 default
  +
  +		 String requestURI = (String)req.
  +			  getAttribute("javax.servlet.include.request_uri");
  +
  +		 if (requestURI == null || res.isIncluded()) {
  +			  requestURI = req.getRequestURI();
  +		 }
  +
  +		 StringBuffer buf = new StringBuffer();
  +		 buf.append("<head><title>")
  +			  .append(sm.getString("defaulterrorpage.notfound404"))
  +			  .append("</title></head>\r\n");
  +		 buf.append("<body><h1>")
  +			  .append(sm.getString("defaulterrorpage.notfound404"))
  +			  .append("</h1>\r\n<b>");
  +		 buf.append(sm.getString("defaulterrorpage.originalrequest"))
  +			  .append("</b> ")
  +			  .append( requestURI );
  +
  +		 if (getShowDebugInfo()) {
  +			  if (res.isIncluded()) {
  +			 requestURI = (String)req.
  +				  getAttribute("javax.servlet.include.request_uri");
  +			  }
  +			  if (requestURI != null) {
  +			 buf.append("<br><br>\r\n<b>")
  +				  .append(sm.getString("defaulterrorpage.notfoundrequest"))
  +				  .append("</b> ")
  +				  .append( requestURI );
  +			  }
  +		 }
  +
  +		 buf.append("</body>\r\n");
  +
  +		 String body = buf.toString();
  +
  +		 res.setContentLength(body.length());
  +
  +		 if( res.isUsingStream() ) {
  +			  ServletOutputStream out = res.getOutputStream();
  +			  out.print(body);
  +			  out.flush();
  +		 } else {
  +			  PrintWriter out = res.getWriter();
  +			  out.print(body);
  +			  out.flush();
  +		 }
  +	  }
   
       // -------------------- Support for notes --------------------