iteye_14675 2011-05-31 10:18
浏览 332
已采纳

关于修改请求URL的问题?

问题如下:
1)假如我请求的URL为:http://localhost:8080/test/aaaaaa.htm;
2)经HttpServletRequestWrapper包装request后,修改url为http://localhost:8080/test/bbbbbb.jsp;

结果如下:IE正常,firefox、google还是认为是以htm方式访问服务端,所以导致“<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>”等没有被解析

  • 写回答

2条回答 默认 最新

  • greatrobert 2011-06-01 14:27
    关注

    你应该是想实现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,主要配置正则表达式实现的

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部