簡體   English   中英

JSP中的掩碼URL

[英]Mask urls in JSP

與此問題相關: 使用UrlRewrite在JSP中替換URL字符

我想在此JSP Java EE Web項目中使用屏蔽URL。 例如,如果我有這個:

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

我想把這個網址變成更像User / Google友好的東西:

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

我一直在與UrlRewrite,轉發和RequestDispatcher一起戰斗,以實現我想要的,但我有點迷茫。 我應該對所有http請求都有一個過濾器,重新格式化它們,然后轉發頁面。

有人可以給點指示嗎? 提示?

非常感謝。

更新: Servlets做到了。 感謝Yuval的指導。 我一直在使用UrlRewrite,正如你在問題的第一句中看到的那樣我也問了一個問題。 但我無法按照我想要的方式讓UrlRewrite工作。 Servlets完成了這項工作。

您可以使用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>

首先,我建議你在你的應用程序中處理這個問題,而不是依賴外部重寫,比如通過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. 按作者姓名,標題和適用版本(如果缺少版本,則假設最新)
  3. 如果作者姓名,標題和/或版本中包含ISBN,請忽略除ISBN之外的所有內容。 也就是說,將其視為前者(或者更准確地說,當存在ISBN時忽略所有其他書籍識別參數。)

使用?參數化網址方案,您將擁有以下可能性:

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。 或者至少你想把它保持在最低限度。

自從我使用JSP以來已經有一段時間了,但是如果內存服務可以將URL模式添加到web.xml(或其中一個XML配置文件),並讓servlet引擎自動將請求路由到您選擇的有效URL的參數。 如果你願意,我可以查看詳細信息。

在您的情況下,將http://mysite.com/product-Programming-Book映射到URL http://mysite.com/products.jsp?id=42&name=Programming_Book ,用戶不再看到真實的URL。 此外,您可以在應用程序中使用此用戶友好的URL作為該頁面的邏輯名稱。

Yuval = 8-)

通常,您使用Apache面向您的應用程序。 如果是這樣,請研究使用Apache的mod_rewrite。 http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM