你应该是想实现url rewrite的功能,经HttpServletRequestWrapper包装request这个是在哪里做的?filter里面?理论上行的,因为对jsp的处理是web容器做的,经过filter的时候web容器已经把这个页面当成静态的html页面处理掉了,至于你说的ie下可以,我没碰到过,应该跟浏览器是没有关系的。
说下我以前的做法,主要有三种:
1)利用web容器对404的处理机制实现,使用自定义的HttpServletRequestWrapper包装request,再在web.xml中做如下配置:
[code="java"]
UrlRewrite
com.***.UrlRewriteServlet
UrlRewrite
/404
<error-page>
<error-code>404</error-code>
<location>/404</location>
</error-page>
[/code]
当404找不到静态页面后跳转到UrlRewriteServlet后再执行req.getRequestDispatcher(req.getServletPath()).forward(req, res),另外重写你说的那几个方法是必要的,但是如果要做成通过方法还要重写getParameter、getParameterMap、getParameterNames、getQueryString等方法,还有如果项目中使用了struts2之类的框架那么struts2的核心过滤器除了要过滤REQUEST外还要过滤,FORWARD、ERROR:
[code="java"]
struts2prepare
/*
REQUEST
FORWARD
ERROR
[/code]
2)利用httpclient实现,不需要Wrapper Request,在filter中使用httpclient给自己再发送一条请求,请求的method、parameters、headers都要一样传递过去,保证登录认证可以成功,该方法使用、配置简单但是就是每次多发一次请求感觉怪怪的,这种方法的实现有一个开源框架的
3)利用apache、nginx等反向代理服务器实现rewrite,主要配置正则表达式实现的