billbarker    2002/06/22 20:32:31

  Modified:    src/share/org/apache/tomcat/modules/generators
                        StaticInterceptor.java
  Log:
  Experimental support for 2.3 style mapped-welcome files.
  
  This of off be default, and probably uses too many recorces if you have more than a 
few welcome-files.  What it enables is JspC compilations and declarations like:
  
  <servlet-mapping>
    <servlet-name>WelcomeServlet</servlet-name>
    <url-pattern>/foobar/</url-pattern>
  </servlet-mapping>
  
  For now, should be considered experimental only.  However, I'd be interested to hear 
how much overhead it adds if anyone wants to test.
  
  Revision  Changes    Path
  1.25      +50 -6     
jakarta-tomcat/src/share/org/apache/tomcat/modules/generators/StaticInterceptor.java
  
  Index: StaticInterceptor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/generators/StaticInterceptor.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- StaticInterceptor.java    8 May 2002 02:27:04 -0000       1.24
  +++ StaticInterceptor.java    23 Jun 2002 03:32:31 -0000      1.25
  @@ -80,6 +80,7 @@
       String charset=null;
       private boolean extraSafety=false;
       private boolean useInternal=false;
  +    private boolean strict23Welcome=false;
   
       public StaticInterceptor() {
       }
  @@ -106,6 +107,14 @@
        useInternal = internal;
       }
   
  +    /** Support the 2.3 behavior of allowing mapped servlets as welcome files.
  +     * @param support <code>true</code> Allow mapped servlets.
  +     *                <code>false</code> Allow only files.
  +     */
  +    public void setStrict23Welcome(boolean support) {
  +     strict23Welcome = support;
  +    }
  +
       public void setUseAcceptLanguage(boolean use) {
           useAcceptLanguage=use;
       }
  @@ -206,7 +215,13 @@
            return 0;
        }
        // Directory, check if we have a welcome file
  -     String welcomeFile = getWelcomeFile(ctx, file);
  +     
  +     String welcomeFile = null;
  +     if( strict23Welcome ) {
  +         welcomeFile = getStrictWelcomeFile(ctx, file, pathInfo);
  +     } else {
  +         welcomeFile = getWelcomeFile(ctx, file);
  +     }
        if( debug > 0 )
            log( "DefaultServlet: welcome file: "  + welcomeFile);
        
  @@ -234,6 +249,7 @@
           BaseInterceptor ri[];
        String requestURI=req.requestURI().toString();
        String redirectURI=concatPath(requestURI,welcomeFile);
  +     Context ctx = req.getContext();
        req.requestURI().setString(redirectURI);
        req.unparsedURI().recycle();
        req.servletPath().recycle();
  @@ -247,7 +263,11 @@
           we need to contextMap again to catch extention-mapped servlets.
        */
        int status = 0;
  -     ri=cm.getContainer().getInterceptors(Container.H_contextMap);
  +     if(ctx == null) {
  +         ri=cm.getContainer().getInterceptors(Container.H_contextMap);
  +     } else {
  +         ri = ctx.getContainer().getInterceptors(Container.H_contextMap);
  +     }
        
        for( int i=0; i< ri.length; i++ ) {
            status=ri[i].contextMap( req );
  @@ -319,19 +339,43 @@
        }
       }
   
  +    private String getStrictWelcomeFile(Context context, File dir, String pathInfo) 
{
  +        String wf[]= context.getWelcomeFiles();
  +        BaseInterceptor ri[] = context.getContainer().
  +                               getInterceptors(Container.H_contextMap);
  +     for(int i=0; i < wf.length; i++) {
  +         if(getOneWelcomeFile(dir, wf[i])) {
  +             return wf[i];
  +         }
  +         String wfURI = concatPath(pathInfo, wf[i]);
  +         Request req = cm.createRequest(context, wfURI);
  +         int status = 0;
  +     
  +         for( int j=0; j< ri.length; j++ ) {
  +             status=ri[j].contextMap( req );
  +             if( status!=0 ) break;
  +         }
  +         if(status == 0 && req.servletPath() != null && 
!req.servletPath().equals("")) {
  +             return req.servletPath().toString().substring(pathInfo.length());
  +         }
  +     }
  +         
  +     return null;
  +    }
       private String getWelcomeFile(Context context, File dir) {
           String wf[]= context.getWelcomeFiles();
   
        for( int i=0; i<wf.length; i++ ) {
  -         File f = new File(dir, wf[i]);
  -         if (f.exists()) {
  +         if (getOneWelcomeFile(dir, wf[i])) {
                return wf[i];
            }
        }
        return null;
       }
  -
  -
  +    private boolean getOneWelcomeFile(File dir, String wf) {
  +     File f = new File(dir, wf);
  +     return f.exists();
  +    }
   }
   
   // -------------------- Handlers --------------------
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to