在web.xml文件中,比如在定义filter时,设置了regular expression,例如:
<filter><filter-name>innov8tion_url_rewrite</filter-name>
<filter-class>com.innov8tion.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>include_url</param-name>
<param-value>/website/.*</param-value>
</init-param>
<init-param>
<param-name>hitCounter_url</param-name>
<param-value>/u/.*([.]do|[.]jsp).*,/website/.*([.]do|[.]jsp).*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>innov8tion_url_rewrite</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后,我们可以在UrlRewriteFilter中来处理这个regular expression:
public void init(FilterConfig arg0) throws ServletException {
filterConfig = arg0;
if (filterConfig != null) {
String includeset = filterConfig.getInitParameter("include_url"); //获取正则表达式
String hitCounterset = filterConfig.getInitParameter("hitCounter_url");
if (includeset != null) {
String[] includes = includeset.trim().split(","); //用“,”分割表达式字符串
if (includes != null) {
for (String value : includes) {
includeURL.add(StringUtil.trim(value));
}
}
}
if (hitCounterset != null) {
String[] hitCounters = hitCounterset.trim().split(",");
if (hitCounters != null) {
for (String value : hitCounters) {
hitCounterURL.add(StringUtil.trim(value));
}
}
}
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException,
IOException {
..........................................................................
String contextPath = ((HttpServletRequest) request).getContextPath(); //"/bbp"项目名
String uri = ((HttpServletRequest) request).getServletPath(); //项目名后的地址
for (String include : includeURL) {
if (include != null && include.length() > 0) {
if (uri.matches(include) && null!=website) { //匹配uri
url = contextPath+"/u/"+website.getUrl()+uri;
if(null!=queryString){
url = url +"?"+queryString;
}
logger.debug("====redirect====:"+url);
((HttpServletResponse) response).sendRedirect(url);
return ;
}
}
}