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 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应