代码之家  ›  专栏  ›  技术社区  ›  dav

我可以在JavaServlet过滤器中拦截并更改HTTPServletRequest的请求url吗?

  •  1
  • dav  · 技术社区  · 17 年前

    我有一个javaweb应用程序,它管理许多俱乐部的数据。我想应用程序显示俱乐部的信息取决于网址是键入。

    例如,如果您输入“localhost:8080/MyApp/Club1” …然后应用程序应该去掉请求url(Club1)的结尾,在数据库中查找俱乐部,并将其添加到会话中。然后,所有数据库请求都可以根据会话中的俱乐部查找数据。

    我认为可以这样做的方法是使用一个servlet过滤器来调用HTTPServletRequest().getRequestURL(),并从请求url中去掉俱乐部名称,以便从数据库中查找俱乐部。

    但是我不想把请求URL改成 http://localhost:8080/MyApp 使应用程序正常工作。然而,我不认为我能做到这一点?

    4 回复  |  直到 17 年前
        1
  •  2
  •   duffymo    17 年前

    我认为用过滤器是不合适的。您所描述的基于俱乐部成员资格更改行为的逻辑属于您的服务层内部,可以在其中重用。

    更好的方法是忘记过滤器,只编写servlet。将俱乐部名称作为参数传递,使用它在该俱乐部的URL映射中进行查找,并让servlet使用RequestDispatcher重定向到该俱乐部的URL。我不认为用过滤器截取心跳有什么好处。

    这是其中的一种情况,如果做你想做的事情太困难和复杂,你可能在尝试错误的事情。有更简单的方法可以做到这一点,过滤器甚至不关闭。

        2
  •  1
  •   Adrian Pronk    17 年前

    看一看 urlrewritefilter

    如果你在google上搜索它,你会看到它出现在一些非常引人注目的java应用程序的堆栈跟踪中:)

        3
  •  0
  •   KV Prajapati    17 年前

    Core J2EE Patterns - Intercepting Filter

    摘要:创建可插入过滤器 在标准中处理公共服务 核心请求处理代码。这个 筛选器拦截传入请求 和外向的反应,允许 能够添加和删除这些 过滤不引人注目,没有 需要改变我们现有的

        4
  •  0
  •   Vinay Sajip    17 年前

    在servlet的 do_GET do_POST ,您可以将URI的第一部分解释为一个club,将它添加到会话(使用应用程序作用域)中(如果它还不存在),然后委托给其他代码,这些代码只查看URI的其余部分,并在适当的情况下使用会话中的club。