class RegexPipeline extends UrlPipeline
The pattern is bound and matched against the path info of the servlet
request, as this class assumes it is invoked by MetaServlet
.
If there are capture groups in the regular expression, the matched ranges of
the capture groups are stored as an array of modified HttpServetRequests,
into the request attribute MetaFilter.REGEX_GROUPS
. Using a capture
group that may not capture, e.g. "(/foo)?"
, will cause an error at
request handling time.
Each servlet request has been altered to have its getServletPath()
method return the original path info up to the beginning of the corresponding
capture group, and its getPathInfo()
method return the matched text.
A RegexGroupFilter
can be applied in the pipeline to switch the
current HttpServletRequest to reference a different capture group before
running additional filters, or the final servlet.
Note that for getPathInfo()
to start with a leading "/" as described
in the servlet documentation, capture groups must actually capture the
leading "/".
This class dispatches the remainder of the pipeline using the first capture
group as the current request, making RegexGroupFilter
required only
to access capture groups beyond the first.
Modifier and Type | Class and Description |
---|---|
(package private) static class |
RegexPipeline.Binder |
Modifier and Type | Field and Description |
---|---|
private java.util.regex.Pattern |
pattern |
Constructor and Description |
---|
RegexPipeline(java.util.regex.Pattern pattern,
javax.servlet.Filter[] filters,
javax.servlet.http.HttpServlet servlet) |
Modifier and Type | Method and Description |
---|---|
(package private) boolean |
match(javax.servlet.http.HttpServletRequest req)
Determine if this pipeline handles the request's URL.
|
(package private) void |
service(javax.servlet.http.HttpServletRequest req,
javax.servlet.http.HttpServletResponse rsp)
Execute the filters and the servlet on the request.
|
java.lang.String |
toString() |
destroy, init
RegexPipeline(java.util.regex.Pattern pattern, javax.servlet.Filter[] filters, javax.servlet.http.HttpServlet servlet)
boolean match(javax.servlet.http.HttpServletRequest req)
UrlPipeline
This method should match on the request's getPathInfo()
method,
as MetaServlet
passes the request along as-is to each pipeline's
match method.
match
in class UrlPipeline
req
- current HTTP request being considered by MetaServlet
.true
if this pipeline is configured to handle the
request; false
otherwise.void service(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse rsp) throws javax.servlet.ServletException, java.io.IOException
UrlPipeline
Invoked by MetaServlet
once UrlPipeline.match(HttpServletRequest)
has determined this pipeline is the correct pipeline to handle the
current request.
service
in class UrlPipeline
req
- current HTTP request.rsp
- current HTTP response.javax.servlet.ServletException
- request cannot be completed.java.io.IOException
- IO error prevents the request from being completed.public java.lang.String toString()
toString
in class java.lang.Object