Author: knopp
Date: Tue Mar  3 00:16:29 2009
New Revision: 749485

URL: http://svn.apache.org/viewvc?rev=749485&view=rev
Log: (empty)

Modified:
    
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/protocol/http/WicketFilter.java

Modified: 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/protocol/http/WicketFilter.java
URL: 
http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/protocol/http/WicketFilter.java?rev=749485&r1=749484&r2=749485&view=diff
==============================================================================
--- 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/protocol/http/WicketFilter.java
 (original)
+++ 
wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/_wicket/protocol/http/WicketFilter.java
 Tue Mar  3 00:16:29 2009
@@ -37,11 +37,31 @@
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.parser.XmlPullParser;
 import org.apache.wicket.markup.parser.XmlTag;
+import org.apache.wicket.protocol.http.WicketServlet;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * Filter for initiating handling of Wicket requests.
+ * 
+ * <p>
+ * The advantage of a filter is that, unlike a servlet, it can choose not to 
process the request and
+ * let whatever is next in chain try. So when using a Wicket filter and a 
request comes in for
+ * foo.gif the filter can choose not to process it because it knows it is not 
a wicket-related
+ * request. Since the filter didn't process it, it falls on to the application 
server to try, and
+ * then it works."
+ * 
+ * @see WicketServlet for documentation
+ * 
+ * @author Jonathan Locke
+ * @author Timur Mehrvarz
+ * @author Juergen Donnerstag
+ * @author Igor Vaynberg (ivaynberg)
+ * @author Al Maw
+ * @author jcompagner
+ */
 public class WicketFilter implements Filter
 {
 
@@ -54,17 +74,32 @@
                }
        }
 
-       private boolean checkForTrailingSlash(HttpServletRequest request, 
HttpServletResponse response, String filterPath)
-       {
+       /**
+        * Checks if the request is for home page and lacks trailing slash. If 
necessary redirects to
+        * URL with trailing slash.
+        * 
+        * @param request
+        * @param response
+        * @param filterPath
+        * @return <code>true</code> if there is a trailing slash, 
<code>false</code> if redirect was
+        *         necessary.
+        */
+       private boolean checkForTrailingSlash(HttpServletRequest request, 
HttpServletResponse response,
+               String filterPath)
+       {       
+               // current URI
                String uri = Strings.stripJSessionId(request.getRequestURI());
-               String s = request.getContextPath() + "/" + filterPath;
-               if (s.endsWith("/"))
+               
+               // home page without trailing slash URI
+               String homePageUri = request.getContextPath() + "/" + 
filterPath;               
+               if (homePageUri.endsWith("/"))
                {
-                       s = s.substring(0, s.length() - 1);
+                       homePageUri = homePageUri.substring(0, 
homePageUri.length() - 1);
                }
                
-               if (uri.equals(s) && !uri.endsWith("/"))
+               if (uri.equals(homePageUri))
                {
+                       // construct redirect URL
                        String redirect = uri + "/";
                        if (!Strings.isEmpty(request.getQueryString()))
                        {
@@ -72,6 +107,8 @@
                        }
                        try
                        {
+                               // send redirect - this will discard POST 
parameters if the request is POST
+                               // - still better than getting an error because 
of lacking trailing slash
                                
response.sendRedirect(response.encodeRedirectURL(redirect));
                        }
                        catch (IOException e)
@@ -80,36 +117,34 @@
                        }
                        return false;
                }
-               
+
                return true;
        }
-       
+
        public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain)
                throws IOException, ServletException
        {
-               HttpServletRequest httpServletRequest = (HttpServletRequest) 
request;
-               HttpServletResponse httpServletResponse = (HttpServletResponse) 
response;
-               
+               HttpServletRequest httpServletRequest = 
(HttpServletRequest)request;
+               HttpServletResponse httpServletResponse = 
(HttpServletResponse)response;
+
                String filterPath = getFilterPath(httpServletRequest);
-                       
+
                if (checkForTrailingSlash(httpServletRequest, 
httpServletResponse, filterPath))
-               {               
+               {
                        ServletWebRequest req = new 
ServletWebRequest(httpServletRequest, filterPath);
                        ServletWebResponse resp = new 
ServletWebResponse(httpServletResponse);
-                       
-                       System.out.println(">>>" + req.getUrl() + "<<<");
-                                       
+
                        RequestCycle requestCycle = 
webApplication.newRequestCycle(req, resp);
-                                       
+
                        
System.out.println(requestCycle.getUrlRenderer().renderUrl(Url.parse("xxx/yyy")));
-                       
+
                        if (requestCycle.processRequest())
                        {
-                               requestCycle.detach();  
+                               requestCycle.detach();
                        }
                        else
                        {
-                               chain.doFilter(request, response);              
        
+                               chain.doFilter(request, response);
                        }
                }
        }
@@ -296,8 +331,8 @@
        {
                return result.substring(1, result.length() - 1);
        }
-       
+
        private static final Logger log = 
LoggerFactory.getLogger(WicketFilter.class);
-       
+
        public static final String FILTER_MAPPING_PARAM = 
"filterMappingUrlPattern";
 }


Reply via email to