【问题标题】:How to do dynamic URL Rewriting in J2EE如何在 J2EE 中进行动态 URL 重写
【发布时间】:2010-12-14 19:54:15
【问题描述】:

在我的 ASP.NET 时代,我使用 URLRewriter.NET 进行动态 URL 重写。基本上,它是一个 HTTPModule,它拦截页面请求并根据您定义的规则重写 URL,与 MOD_REWRITE 非常相似。但是,它还允许您定义“自定义转换”,这是一个具有单个方法的类,可以即时为您进行 URL 转换。你可以让这个方法访问数据库,访问 Application[] 集合,几乎可以做任何你想做的事情。

在 J2EE 世界中是否有与此等价的东西?我希望能够动态地重写 URL 并将这种重写委托给一些 Java 代码。我不想只设置静态重写列表。同样,它需要进行实际的 URL 屏蔽,而不是 3XX 重定向。

如果没有任何东西可以做到这一点,我将如何自己构建这个功能?

【问题讨论】:

  • 感谢大家为我指明正确的方向!看起来这毕竟很容易做到。据我所知, RequestDispatcher.Forward() 几乎完全符合我的要求。有人知道与这种方法相关的任何缺点或“陷阱”吗?
  • 不知道您的确切问题域,但这听起来很可行。

标签: java url jakarta-ee url-rewriting


【解决方案1】:

你调查过Servlet Filters吗?我没有尝试直接修改 URL,我相信参数会被预先解析到请求对象中,但我们广泛使用过滤器来解析 URL 并将路径信息放入数据库中以供其他 Servlet 和 JSP 使用。

您可以非常轻松地包装请求对象,因为它链接到目标 Servlet。

【讨论】:

  • +1:过滤器是要走的路。使用HttpServletRequest#getRequestURI()解析路径信息。
  • 事实上,已经有一些开源的 URL 重写过滤器可用,例如 OCPsoft Rewrite 和 PrettyFaces。 ocpsoft.com/rewriteocpsoft.com/prettyfaces
【解决方案2】:

这些怎么样:

http://ocpsoft.com/prettyfaces/

PrettyFaces 是一个基于开源过滤器的 Servlets 扩展,具有 对 JavaServer Faces 的增强支持 – JSF 1.1、1.2 和 2.0 – 支持创建可书签的漂亮 URL。 PrettyFaces 解决了 优雅地解决“RESTful URL”问题,包括以下功能: 页面加载动作,与人脸导航无缝集成,动态 view-id分配,托管参数解析,免配置 与其他 Web 框架的兼容性。

http://ocpsoft.com/rewrite/

Rewrite 是一个基于 OpenSource Filter 的 Java Servlets 扩展—— 支持创建可书签的漂亮 URL。重写解决了 优雅的“RESTful URL”问题,包括以下功能:页面加载 操作,托管参数解析,与 CDI 无缝集成, Spring,与其他web免配置兼容 框架。

http://tuckey.org/urlrewrite/

基于流行且非常有用 用于 apache 的 mod_rewrite, UrlRewriteFilter 是一个 Java Web 过滤器 适用于任何符合 J2EE 的 Web 应用程序 服务器(例如 Resin、Orion 或 Tomcat),它允许你重写 在访问您的代码之前的 URL。它 是一个非常强大的工具,就像 Apache 的 mod_rewrite。

【讨论】:

  • 这是一个强大的工具,我们在很多项目中都使用它,但它依赖于 XML 文档中的硬编码规则列表。如果您不需要即时弥补,这绝对是您的最佳选择。
  • 我们也使用它,因为历史原因,但使用起来越来越令人沮丧,特别是因为规则没有链接。只有一个匹配。
  • OCPsoft Rewrite 不受 Tuckey 的限制。
【解决方案3】:

另一个选项是编写你赢得的 Servlet 。现在使用请求对象和找到的 URL 编写一些 URL 操作代码,并再次调用预期的页面操作或 Servlet。

例如。

你应该使用 URL 调用 Servlet

域/urlServlet/param1/param2/...

你的 Servlet 会把它翻译成

域/requestedPage?p1=param1&p2=param2...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多