Author: husted
Date: Mon Mar 12 20:13:07 2007
New Revision: 517506

URL: http://svn.apache.org/viewvc?view=rev&rev=517506
Log:
WW-1526 "Error with handling static resources under WebSphere 6". Flush output 
after copy to appease WebLogic and possibly other containers. Submitted by Adam 
Czysciak.

Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java?view=diff&rev=517506&r1=517505&r2=517506
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/FilterDispatcher.java
 Mon Mar 12 20:13:07 2007
@@ -110,9 +110,9 @@
  * database access credentials.
  *
  * <p/>
- * 
+ *
  * <p>
- * 
+ *
  * This filter supports the following init-params:
  * <!-- START SNIPPET: params -->
  *
@@ -122,15 +122,15 @@
  *
  * <li><b>actionPackages</b> - a comma-delimited list of Java packages to scan 
for Actions.</li>
  *
- * <li><b>configProviders</b> - a comma-delimited list of Java classes that 
implement the 
+ * <li><b>configProviders</b> - a comma-delimited list of Java classes that 
implement the
  * [EMAIL PROTECTED] ConfigurationProvider} interface that should be used for 
building the [EMAIL PROTECTED] Configuration}.</li>
- * 
+ *
  * <li><b>*</b> - any other parameters are treated as framework constants.</li>
- * 
+ *
  * </ul>
  *
  * <!-- END SNIPPET: params -->
- * 
+ *
  * </p>
  *
  * To use a custom [EMAIL PROTECTED] Dispatcher}, the 
<code>createDispatcher()</code> method could be overriden by
@@ -195,11 +195,11 @@
      * @param filterConfig The filter configuration
      */
     public void init(FilterConfig filterConfig) throws ServletException {
-        this.filterConfig = filterConfig;
-        
+       this.filterConfig = filterConfig;
+
         dispatcher = createDispatcher(filterConfig);
         dispatcher.init();
-       
+
         String param = filterConfig.getInitParameter("packages");
         String packages = "org.apache.struts2.static template 
org.apache.struts2.interceptor.debugging";
         if (param != null) {
@@ -221,13 +221,13 @@
             dispatcher.cleanup();
         }
     }
-    
+
     /**
      * Create a default [EMAIL PROTECTED] Dispatcher} that subclasses can 
override
      * with a custom Dispatcher, if needed.
      *
      * @param filterConfig Our FilterConfig
-     * @return Initialized Dispatcher 
+     * @return Initialized Dispatcher
      */
     protected Dispatcher createDispatcher(FilterConfig filterConfig) {
         Map<String,String> params = new HashMap<String,String>();
@@ -247,7 +247,7 @@
     public static void setServeStaticContent(String val) {
         serveStatic = "true".equals(val);
     }
-    
+
     /**
      * Modify state of StrutsConstants.STRUTS_SERVE_STATIC_BROWSER_CACHE 
setting.
      * @param val New setting
@@ -256,7 +256,7 @@
     public static void setServeStaticBrowserCache(String val) {
         serveStaticBrowserCache = "true".equals(val);
     }
-    
+
     /**
      * Modify state of StrutsConstants.STRUTS_I18N_ENCODING setting.
      * @param val New setting
@@ -265,7 +265,7 @@
     public static void setEncoding(String val) {
         encoding = val;
     }
-    
+
     /**
      * Modify ActionMapper instance.
      * @param mapper New instance
@@ -274,7 +274,7 @@
     public static void setActionMapper(ActionMapper mapper) {
         actionMapper = mapper;
     }
-    
+
     /**
      * Provide a workaround for some versions of WebLogic.
      * <p/>
@@ -323,7 +323,7 @@
         } else {
             dispatcher = du;
         }
-        
+
         try {
             // Wrap request first, just in case it is multipart/form-data
             // parameters might not be accessible through before encoding 
(ww-1278)
@@ -372,14 +372,14 @@
      * Otherwise, if the request is for a static resource,
      * the resource is copied directly to the response, with the appropriate 
caching headers set.
      * <p/>
-     * If the request does not match an action mapping, or a static resource 
page, 
+     * If the request does not match an action mapping, or a static resource 
page,
      * then it passes through.
      *
      * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, 
javax.servlet.ServletResponse, javax.servlet.FilterChain)
      */
     public void doFilter(ServletRequest req, ServletResponse res, FilterChain 
chain) throws IOException, ServletException {
 
-       
+
         HttpServletRequest request = (HttpServletRequest) req;
         HttpServletResponse response = (HttpServletResponse) res;
         ServletContext servletContext = getServletContext();
@@ -430,7 +430,7 @@
 
     /**
      * Locate a static resource and copy directly to the response,
-     * setting the appropriate caching headers. 
+     * setting the appropriate caching headers.
      *
      * @param name The resource name
      * @param request The request
@@ -443,35 +443,35 @@
                 InputStream is = findInputStream(name, pathPrefix);
                 if (is != null) {
                     Calendar cal = Calendar.getInstance();
-                    
+
                     // check for if-modified-since, prior to any other headers
                     long ifModifiedSince = 0;
                     try {
-                       ifModifiedSince = 
request.getDateHeader("If-Modified-Since");
+                      ifModifiedSince = 
request.getDateHeader("If-Modified-Since");
                     } catch (Exception e) {
-                       LOG.warn("Invalid If-Modified-Since header value: '" + 
request.getHeader("If-Modified-Since") + "', ignoring");
+                      LOG.warn("Invalid If-Modified-Since header value: '" + 
request.getHeader("If-Modified-Since") + "', ignoring");
                     }
-                               long lastModifiedMillis = 
lastModifiedCal.getTimeInMillis();
-                               long now = cal.getTimeInMillis();
+            long lastModifiedMillis = lastModifiedCal.getTimeInMillis();
+            long now = cal.getTimeInMillis();
                     cal.add(Calendar.DAY_OF_MONTH, 1);
                     long expires = cal.getTimeInMillis();
-                    
-                               if (ifModifiedSince > 0 && ifModifiedSince <= 
lastModifiedMillis) {
-                                       // not modified, content is not sent - 
only basic headers and status SC_NOT_MODIFIED
+
+            if (ifModifiedSince > 0 && ifModifiedSince <= lastModifiedMillis) {
+              // not modified, content is not sent - only basic headers and 
status SC_NOT_MODIFIED
                         response.setDateHeader("Expires", expires);
-                                       
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
-                                       is.close();
-                                       return;
-                               }
-                       
-                       // set the content-type header
+              response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+              is.close();
+              return;
+            }
+
+                  // set the content-type header
                     String contentType = getContentType(name);
                     if (contentType != null) {
                         response.setContentType(contentType);
                     }
 
                     if (serveStaticBrowserCache) {
-                       // set heading information for caching static content
+                      // set heading information for caching static content
                         response.setDateHeader("Date", now);
                         response.setDateHeader("Expires", expires);
                         response.setDateHeader("Retry-After", expires);
@@ -537,6 +537,7 @@
         while (-1 != (n = input.read(buffer))) {
             output.write(buffer, 0, n);
         }
+        output.flush();
     }
 
     /**


Reply via email to