漂亮的短網址可是現代網站必備的一項功能,特別是使用MVC Framework打造的Web Application,幾乎清一色採用Controller/Action的網址格式。
http://yourhost/controller/action/id
於是以前那種長串的網址格式,像是:
http://yourhost/blog/article.php?id=1234
就可以縮短成簡潔的:
http://yourhost/blog/article/1234
雖然這不影響瀏覽者對網站的操作功能,但簡潔的網址,對使用者和搜尋引擎更友善。
在AMP(Apache+MySQL+PHP)平台, 實現這種短網址最常用的方法就是設定Apache的mod_rewrite。優秀的PHP開發框架,例如CodeIgniter,就可以簡單地設定mod_rewrite(只要設定在網站目錄的.htaccess檔案),就能讓漂亮的短網址可以運作。
雖然使用mod_rewrite讓網址格式更好看的做法,早已行之有年,但是在Ruby on Rails等MVC框架提倡CoC(convention over configuration)的概念後,讓預設的網址能夠對應到Controller設計的架構,變成採用普遍的一種網址架構方式。例如 blog/article/123 這段網址,CoC讓我們很直覺就知道網站存在 blog 這個控制器(controller,通常以class實現),並提供處理 article 這個動作的方法(method)或函式(function),以及123是id這個參數的值。
所以短網址不僅對使用者和搜尋引擎更友善,在開發階段,預設格式的短網址也讓開發更方便,少了許多設定的麻煩。
可是在傳統的JavaEE應用程式中,雖然最常用的Tomcat伺服器也是Apache出品,但它可不提供mod_rewrite的功能。
為什麼Tomcat不需要提供mod_rewrite呢?
JavaEE應用程式本身除了能寫類似PHP的JSP網頁程式,還可以實作Servlet、Filter。一般來說Servlet就可以扮演控制器的角色,而建立Filter可以幫其他Servlet進行網址格式的轉換。所以,並不需要由Tomcat提供這項功能。
在Java的開發框架,例如Struts,就是以*.do作為網址格式,只要URL以.do結尾,就會自動對映到某個Struts Action類別(它扮演的其實是controller角色)。
只是JavaEE過去一直沒有輕巧好用的框架,那些功能強大的開發框架,如果拿來開發小應用,可能設定的數量都比實際程式碼還要多!
所以,很多JavaEE專案, 並沒有套用網址格式受到良好定義的框架。有很多JavaEE網站為了方便開發,可能也捨棄用Servlet當Controller、JSP當View的邏輯介面分離架構,直接以JSP Scriptlets打造網站。
因此有大量JavaEE網站的網址格式,都是以下這種不友善網址格式。
http://yourhost/blog/article.jsp?id=1234
對於既有的專案,其實可以透過 UrlRewriteFilter 這個已經寫好的Filter,將網址進行簡化。目前最新穩定版本為3.2,可以在這邊下載。
官方提供的這份說明很簡短,但也足夠瞭解安裝與設定方式,因為UrlRewriteFilter很簡單易用。
將下載的檔案解壓縮到網站專案的WEB-INF目錄下,會建立 lib/urlrewrite-3.2.0.jar 及 urlrewrite.xml 兩個檔案。接著要自己打開 web.xml 設定檔,加入 Filter 設定。
接下來,打開 urlrewrite.xml 增加自己定義的網址規則。
上面的範例,兩個rule其實定義是一樣的,只是一個採用regex(regular expression)方式解析來源網址,可以定義比較複雜的格式;另一種則是比較簡單的wildcard,則是可以用於簡單的格式。在to的設定中,type可以是forward(在伺服器端轉址)、redirect(在瀏覽器端轉址)等。
定義rule之後,打開from定義格式的網址,就會自動轉址到to定義的目標網址。但網頁應用程是本身產生的連結,也要配合做修改才行。但是若我們將.jsp變成.g、.do或沒有副檔名的網址格式,以後又要修改成其他的格式,網頁程式是不是也要配合再改呢?其實UrlRewriteFilter早已考慮到這一點,所以除了設定rule外,還可以用outbound-rule設定網頁程式產生的連結格式。
有了上面的outbound-rule定義之後,以下在Servlet或JSP程式中,採用encodeURL方法進行編碼的網址,就會透過UrlRewriteFilter重新改寫。
UrlRewriteFilter很簡單也很管用,對於舊的JavaEE網站系統,可以透過這種方式把網址改頭換面一下,好變成現代網站應該有的樣子。
如果是正要開始規畫的新網站,其實有更好的選擇:
Grails具備類似RoR等MVC框架應有的特色,除了預設就採用簡潔的網址格式,還可以自訂彈性的網址路由,而底層採用Spring/Hibernate等穩固、廣泛採用的基礎,寫Groovy程式碼和Java並不會差太多,也讓Java程式設計師不太會有轉換期的痛苦。
而對於願意接受新程式語言的開發團隊,Lift將會是一個更棒的選擇,它採用的Scala程式語言,是個在Java世界很有潛力的新語言,而Lift本身對Comet的完善支援,更讓它有機會成為明日之星。
訂閱:
張貼留言 (Atom)
-
▼
2011
(197)
-
▼
4月
(30)
- Proposal: Web Design Index Search Engine
- 開放源碼的Cloud Foundry打造PaaS
- 台中人體工學椅試坐的門市 Ergohuman 111、Enjoy 121、Nefil;Herman ...
- NetBeans 7.0發表,支援JDK7、Oracle資料庫
- 如果買書也能做公益?
- Ubuntu 11.04: Overlay Scrollbars in Unity
- 用 Groovy + tesseract-ocr 破解很遜的驗證碼圖片
- 改變未來生活的現在進行式,Facebook臉書效應
- 解決CSS3文字陰影效果(text-shadow)在Google Chrome瀏覽器中文字型模糊問題
- 使用Gradle快速建立Jetty網站開發測試環境
- 跨瀏覽器的CSS3圓角(rounded corner)、陰影(shadow)
- Groovlets出現404 error錯誤訊息
- 為什麼要寫網誌?
- 報名2011全球華文部落格大獎
- Install Subersion(SVN) support for Eclipse Helios ...
- UrlRewriteFilter 讓JavaEE Web Application也有漂亮的短網址
- 從「老貓學出版」電子書免費下載發現新閱讀時代
- 淺談Linux普通使用者權限安裝軟體,以node.js為例
- Monaco 適合程式碼的螢幕字型
- 使用QEMU快速測試LiveCD開機光碟
- 區網升級1000Mbps與Ubuntu查詢網路卡連線速度的方法
- 新玩具實測 INTEL 320 Series SSD 40G (SSDSA2CT040G3)
- 開放源碼的雲端企業IT架構軟體openQRM簡介
- 將 Ubuntu Linux 搬移到新硬碟
- 本誌近期IE瀏覽次數比例降至49%
- 從精實軟體開發到精實創業(Lean Startup)
- 部落格放廣告真的會有人點嗎?
- Blog2Print! 讓部落客自己也能輕鬆印製專書
- [實測] 壹電視網樂通機上盒 + 訊舟EDIMAX EW-7711UTn USB無線網路卡
- Synergy 免費 KVM 軟體,讓一組鍵盤滑鼠控制多部電腦主機
-
▼
4月
(30)
沒有留言:
張貼留言