iteye_14675 2011-05-31 18: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 22: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条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。