为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Java中的servlet过滤器更改传入的servlet请求url?

如何使用Java中的servlet过滤器更改传入的servlet请求url?

暮色呼如 2019-06-29 17:15:56
如何使用Java中的servlet过滤器更改传入的servlet请求url?如何使用servlet筛选器更改传入的servlet请求urlhttp://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123到http://nm-java.appspot.com/Check_License?Contact_Id=My_Obj_123?更新根据BalusC下面的步骤,我得出了以下代码:public class UrlRewriteFilter implements Filter {     @Override     public void init(FilterConfig config) throws ServletException {         //     }     @Override     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {         HttpServletRequest request = (HttpServletRequest) req;         String requestURI = request.getRequestURI();         if (requestURI.startsWith("/Check_License/Dir_My_App/")) {             String toReplace = requestURI.substring(requestURI.indexOf("/Dir_My_App"), requestURI.lastIndexOf("/") + 1);             String newURI = requestURI.replace(toReplace, "?Contact_Id=");             req.getRequestDispatcher(newURI).forward(req, res);         } else {             chain.doFilter(req, res);         }     }     @Override     public void destroy() {         //     }}的相关条目web.xml看上去是这样的:<filter>     <filter-name>urlRewriteFilter</filter-name>     <filter-class>com.example.UrlRewriteFilter</filter-class></filter><filter-mapping>     <filter-name>urlRewriteFilter</filter-name>     <url-pattern>/*</url-pattern></filter-mapping>我尝试了服务器端和客户端重定向的预期结果。成功了,谢谢BalusC!
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

  1. 实施

    javax.servlet.Filter.

  2. 在……里面

    doFilter()

    方法,将传入的

    ServletRequest

    HttpServletRequest.

  3. 使用

    HttpServletRequest#getRequestURI()

    抓住这条路。
  4. 直截了当

    java.lang.String

    方法,如

    substring()split()concat()

    等等,提取出感兴趣的部分,构成新的路径。
  5. 使用任何一种

    ServletRequest#getRequestDispatcher()

    然后

    RequestDispatcher#forward()

    若要将请求/响应转发到新URL(服务器端重定向,未反映在浏览器地址栏中),

    浇铸进料

    ServletResponse

    HttpServletResponse

    然后

    HttpServletResponse#sendRedirect()

    将响应重定向到新URL(客户端重定向,反映在浏览器地址栏中)。
  6. 注册过滤器

    web.xml

    在.上

    url-pattern

    /*

    /Check_License/*

    ,取决于上下文路径,或者如果您已经使用Servlet3.0,请使用

    @WebFilter

    取而代之的是注释。

不要忘记在代码中添加一个检查,如果URL需要将被改变,如果,然后打电话FilterChain#doFilter(),否则它将称自己为无限循环。

或者,您也可以使用现有的第三方api为您完成所有工作,如Tuckey的UrlRewriteFilter它可以按照您对Apache的配置方式进行配置。mod_rewrite.


查看完整回答
反对 回复 2019-06-29
?
SMILET

TA贡献1796条经验 获得超4个赞

你可以用准备好的URL重写过滤器像这样的规则:

<rule>
  <from>^/Check_License/Dir_My_App/Dir_ABC/My_Obj_([0-9]+)$</from>
  <to>/Check_License?Contact_Id=My_Obj_$1</to></rule>

检查实例为了更多.。例子。


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 1493 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号