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";
}