billbarker    02/04/26 20:45:19

  Modified:    src/facade22/org/apache/tomcat/facade
                        HttpServletRequestFacade.java
               src/share/org/apache/tomcat/core Request.java
               src/share/org/apache/tomcat/modules/generators
                        StaticInterceptor.java
  Log:
  Move the DateFormatters from the Facade to the core Request.
  
  This makes them available for non-servlet Handlers (i.e. StaticInterceptor) as well.
  
  Fix for bug #8562.
  Reported By: Pierre OBLIN [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.33      +1 -17     
jakarta-tomcat/src/facade22/org/apache/tomcat/facade/HttpServletRequestFacade.java
  
  Index: HttpServletRequestFacade.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/facade22/org/apache/tomcat/facade/HttpServletRequestFacade.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- HttpServletRequestFacade.java     22 Mar 2002 02:54:34 -0000      1.32
  +++ HttpServletRequestFacade.java     27 Apr 2002 03:45:18 -0000      1.33
  @@ -96,7 +96,6 @@
       ServletInputStreamFacade isFacade=new ServletInputStreamFacade();
       boolean isFacadeInitialized=false;
       BufferedReader reader=null;
  -    DateFormat []dateFormats;
       UEncoder uencoder;
   
       private boolean usingStream = false;
  @@ -111,13 +110,6 @@
        isFacade.setRequest( request );
        try {
            // we may create facades more often than requests
  -         if( dateFormats==null ) {
  -             dateFormats=new DateFormat[] {
  -                 new SimpleDateFormat(DateTool.RFC1123_PATTERN, Locale.US),
  -                 new SimpleDateFormat(DateTool.rfc1036Pattern, Locale.US),
  -                 new SimpleDateFormat(DateTool.asctimePattern, Locale.US)
  -             };
  -         }
            if( uencoder==null ) {
                uencoder=new UEncoder();
                uencoder.addSafeCharacter(';');
  @@ -216,15 +208,7 @@
        *  We delegate this to RequestUtil. ( adapter function )
        */
       public long getDateHeader(String name) {
  -     String value=request.getHeader( name );
  -     if( value==null) return -1;
  -
  -     long date=DateTool.parseDate(value,dateFormats);
  -     if( date==-1) {
  -         String msg = sm.getString("httpDate.pe", value);
  -         throw new IllegalArgumentException(msg);
  -     }
  -     return date;
  +     return request.getDateHeader( name );
       }
   
       public String getHeader(String name) {
  
  
  
  1.115     +26 -0     jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java
  
  Index: Request.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java,v
  retrieving revision 1.114
  retrieving revision 1.115
  diff -u -r1.114 -r1.115
  --- Request.java      21 Apr 2002 05:56:10 -0000      1.114
  +++ Request.java      27 Apr 2002 03:45:18 -0000      1.115
  @@ -75,6 +75,9 @@
   import java.io.CharConversionException;
   import java.util.Enumeration;
   import java.util.Hashtable;
  +import java.util.Locale;
  +import java.text.DateFormat;
  +import java.text.SimpleDateFormat;
   
   /**
    * This is a low-level, efficient representation of a server request. Most fields
  @@ -219,6 +222,7 @@
       protected Request parent;
       protected Request child;
   
  +    protected DateFormat []dateFormats = null;
       protected UDecoder urlDecoder;
       
       // Error handling support
  @@ -891,6 +895,28 @@
       }
   
       // -------------------- Facade for MimeHeaders
  +    /**
  +     * Utility method to parse dates.
  +     */
  +    public long getDateHeader(String name) {
  +     MessageBytes value=getMimeHeaders().getValue( name );
  +     if( value==null || value.isNull() ) return -1;
  +
  +     // By delaying until here, we don't have to create them on sub-requests
  +     if( dateFormats == null) {
  +         dateFormats=new DateFormat[] {
  +                 new SimpleDateFormat(DateTool.RFC1123_PATTERN, Locale.US),
  +                 new SimpleDateFormat(DateTool.rfc1036Pattern, Locale.US),
  +                 new SimpleDateFormat(DateTool.asctimePattern, Locale.US)
  +             };
  +     }
  +     long date=DateTool.parseDate(value.toString(),dateFormats);
  +     if( date==-1) {
  +         String msg = response.sm.getString("httpDate.pe", value);
  +         throw new IllegalArgumentException(msg);
  +     }
  +     return date;
  +    }
       /** @deprecated
        */
       public Enumeration getHeaders(String name) {
  
  
  
  1.23      +7 -14     
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.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- StaticInterceptor.java    27 Apr 2002 01:55:18 -0000      1.22
  +++ StaticInterceptor.java    27 Apr 2002 03:45:19 -0000      1.23
  @@ -335,21 +335,14 @@
        File file = new File( absPath );
        // If we are included, the If-Modified-Since isn't for us.
        if( ! res.isIncluded() ) {
  -         MessageBytes imsMB=req.getMimeHeaders().getValue("If-Modified-Since");
  -
  -         if (imsMB != null) {
  -
  -             long date = imsMB.getTime();
  -             
  -             if ((file.lastModified() <= (date + 1000)) ) {
  -                 // The entity has not been modified since the date
  -                 // specified by the client. This is not an error case.
  -                 context.getContextManager().handleStatus( req, res, 304);
  -                 return;
  -             }
  -
  -
  +         long date = req.getDateHeader("If-Modified-Since");
  +         if ((file.lastModified() <= (date + 1000)) ) {
  +             // The entity has not been modified since the date
  +             // specified by the client. This is not an error case.
  +             context.getContextManager().handleStatus( req, res, 304);
  +             return;
            }
  +
        }
        if( debug>0) log( "After paranoic checks = " + absPath);
   
  
  
  

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

Reply via email to