JSP中的掩码URL

时间:2008-12-11 12:15:34

标签: java jsp url java-ee

与此问题相关: URL characters replacement in JSP with UrlRewrite

我想在此JSP Java EE Web项目中使用屏蔽URL。 例如,如果我有这个:

http://mysite.com/products.jsp?id=42&name=Programming_Book

我想将该网址转换为更加用户/ Google友好的网址:

http://mysite.com/product-Programming-Book

我一直在与UrlRewrite,转发和RequestDispatcher一起战斗,以实现我想要的目标,但我有点迷茫。我应该对所有http请求都有一个过滤器,重新格式化它们,然后转发页面。

任何人都可以给出一些指示吗?提示?

非常感谢。

更新: Servlets做到了。感谢Yuval的指导。 我一直在使用UrlRewrite,正如你在问题的第一句中看到的那样我也问了一个问题。但我无法按照我想要的方式让UrlRewrite工作。 Servlets完成了这项工作。

4 个答案:

答案 0 :(得分:2)

您可以使用URLRewrite filter。这就像mod_rewrite对于Apache的HTTP Web服务器一样。

http://tuckey.org/urlrewrite/

“重定向一个网址

<rule>
<from>^/some/old/page\.html$</from>
<to type="redirect">/very/new/page.html</to>
</rule>

Tiny / Freindly url

<rule>
<from>^/zebra$</from>
<to type="redirect">/big/ugly/url/1,23,56,23132.html</to>
</rule>

答案 1 :(得分:0)

自从我讨论JSP以来已经有一段时间了,但是如果内存服务可以将URL模式添加到web.xml(或其中一个XML配置文件)并让servlet引擎自动将请求路由到有效的URL与您选择的参数。如果你愿意,我可以查看详情。

在您的情况下,将http://mysite.com/product-Programming-Book映射到网址 http://mysite.com/products.jsp?id=42&name=Programming_Book,用户不再看到真实的网址。此外,您可以在应用程序中使用此用户友好的URL作为该页面的逻辑名称。

Yuval = 8 - )

答案 2 :(得分:0)

通常,您正在使用Apache面向您的应用程序。如果是这样,请研究使用Apache的mod_rewrite。 http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

答案 3 :(得分:0)

有一件事,我建议你在你的应用程序中处理这个问题,而不是依赖外部重写,比如通过Apache mod_rewrite(除非你已经确定这是最快的方法。)

但首先要做的是:

我不会转换它:

http://mysite.com/products.jsp?id=42&name=Programming_Book

进入这个:

http://mysite.com/product-Programming-Book

请参阅,如果我只按您的图书示例,我不会看到以前的网址有什么问题。之后,它适用于亚马逊。并且没有google友好URL这样的东西(只有用户友好。)你必须考虑为什么要进行这种类型的重写,以及如何。例如,在您的重写选项中,id在哪里?

也就是说,您必须定义一个定义

的逻辑规则

您要展示的唯一网页,以及 可以识别每个页面的独特参数组合。

例如,使用您的书籍案例。假设您可以使用以下规则识别任何书籍:

  1. 按ISBN
  2. 按作者姓名,职称和if 适用版本(如果版本是 失踪,假设最新)
  3. 如果作者包含ISBN 名称,标题和/或版本,忽略 所有除了ISBN。就是这样对待它 作为前者(或更确切地说, 忽略所有其他书籍识别 ISBN存在时的参数。)
  4. 使用?参数化网址方案,您将拥有以下可能性:

    http://yoursite/products?isbn=123465
    http://yoursite/products?author=johndoe&title="the cookbook" << this assumes the latest edition, or 1 if first.
    http://yoursite/products?author=johndoe&title="the cookbook"&edition=3
    http://yoursite/products?title="the cookbook"&author=johndoe
    http://yoursite/products?edition=3&title="the cookbook"&author=johndoe
    ....
    
    所有组合的

    等等。因此,在寻找技术实施之前,您必须非常仔细地考虑如何做到这一点。你必须创建一个语法和参数层次结构(比如,作者将始终在标题之前,标题将始终在编辑之前)。

    所以你最终得到以下内容(使用与作者John Doe相同的例子,他的书在第3版中):

    http://yoursite/product/isbn/12345
    http://yoursite/product/author/johndoe/the%20cookbook << see the %20 for encoding spaces (not a good idea, but something to take into account)
    http://yoursite/product/author/johndoe/the%20cookbook/3
    

    任何其他组合都应该生成错误或巧妙地弄清楚如何重写“cannon”版本并使用适当的URL目标向客户端发送HTTP 3xx。

    一旦你解决了这些细节,你可以问自己,努力是值得的还是必要的。

    因此,如果您发现自己需要,那么最简单和最便宜的DIY方式是编写一个过滤器来解析URL,打破参数,为JSP页面创建一个参数化的url字符串,获取其RequestDispatcher并转发它。

    您不希望进行URL重写,因为这些会在您的服务器和客户端之间来回传播HTTP 303/307。或者至少你想把它保持在最低限度。

豫ICP备18024241号-1