与此问题相关: 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完成了这项工作。
答案 0 :(得分:2)
您可以使用URLRewrite filter
。这就像mod_rewrite对于Apache的HTTP Web服务器一样。
“重定向一个网址
<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在哪里?
也就是说,您必须定义一个定义
的逻辑规则您要展示的唯一网页,以及 可以识别每个页面的独特参数组合。
例如,使用您的书籍案例。假设您可以使用以下规则识别任何书籍:
使用?参数化网址方案,您将拥有以下可能性:
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。或者至少你想把它保持在最低限度。