其中配置都成功了,就是动态参数不好处理。
比如jsp中的
问题:如何在jsp中设置标签,使得伪装后的路径为
http://localhost:8080/xxx/search/supply/5
条件:
查询
当点击链接后,想要处理后的url为
http://localhost:8080/xxx/search/supply/5
在urlrewrite.xml中是这样配置的
^/xxx/search/([a-z]+)/([0-9]+)$
/xxx/search.xz?method=$1&keyword=$2
如果参数名称和值不定,参数个数也不定的话,你的href中不光要有值,参数名也应该包含在里面:
搜索
然后基于上面的href,你可以自己写一个Filter,然后在Filter的doFilter方法里面对url进行重写,然后forward到你重写后的url。算法很简单:
[code="java"]public void doFilter(ServletRequest request,ServletResponse response,
FilterChain chain) throws IOException, ServletException{
String reqURI = request.getRequestURI();
if(reqURI.startsWith("/xxx/search/")){
String reqQueryStr = request.getQueryString();
StringTokenizer st = new StringTokenizer(reqQueryStr ,"/");
StringBuffer strbuf = new StringBuffer();
strbuf.append("/search.xz?");
String paramName = null;
String paramValue = null;
while (st.hasMoreTokens()) {
paramName = st.nextToken();
paramValue = st.nextToken();
strbuf.append(paramName + "=" + paramValue + "&");
}
if(strbuf.endsWith("?") || strbuf.endsWith("&"){
strbuf.deleteCharAt(strbuf.length()-1);
}
request.getRequestDispatcher(strbuf).forward(request,response);
}else{
chain.doFilter();
}
}[/code]
然后把自定义的Filter配置到web.xml文件中即可。
上面的代码没有编译,你自己再调试一下看看,应该问题不大,呵呵。
urlrewrite.xml
[code="xml"]
/xxx/([a-z]+).xz?method=([a-z]+)&keyword=([0-9]+)
/xxx/$1/$2/$3
[/code]
web.xml
[code="xml"]
UrlRewriteFilter
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
UrlRewriteFilter
/*
REQUEST
FORWARD
[/code]