1. 程式人生 > >java實現泛域名解析,附SpringMVC原始碼示例

java實現泛域名解析,附SpringMVC原始碼示例

所謂“泛域名解析”是指:利用萬用字元 * (星號)來做次級域名以實現所有的次級域名均指向同一IP地址。


例如支付寶的域名是www.alipay.com

域名下面有幫助中心help.alipay.com 、abc.alipay.com 等等子站點。有實力的公司一般都是通過硬體的方式來實現的

但是對於一般人,這麼做投入太大,可以通過程式來實現偽的“泛解析”

比如:javaeye,目前就是通過程式碼來實現的泛解析。javaeye是ruby的,具體實現感興趣的可以找找看,原理都是類似的

同樣的java也可以實現。java實現方式。1,修改DispatcherServlet。2,通過fielter實現。

第一種方法,如果是自己來做重寫DispatcherServlet也不是什麼難事,但是這麼做入侵性太大,效能好一點。

第二種方法,通過fielter實現,入侵相對小點。

現在主要發一下fielter實現的方式。

上圖是示例程式的目錄結構,通過mvn自動生成的。

核心的處理fielter

在fielter裡面我們會做兩件事情

 http://blog.test.com  ==>  http://www.test.com/blog/
 http://blog.test.com/article/1633  ==>  http://www.test.com/blog/article.htm?id=1633

由於是程式碼層面實現的轉發,所以需要存在一點的url規則。

web.xml中只需要將請求轉發過來即可。並將url通過過濾器來轉換

本例中還有velocity的layout使用方法

這樣就velocity就可以很方便的使用了。

圖片是訪問頁面的結果,一個blog的二級域就OK了

題外話:java還是太臃腫了,適合大企業,IDE很強大,各種語法錯誤,編譯錯誤在早期能快速的被發現,當系統搭建完畢之後不必擔心會有什麼大問題,只需要招一堆程式設計師在上面搞業務就行了,處理複雜的業務是強項,不過確實是太臃腫了。

流行的三層架構,如果是web2.0用java搞會瘋掉的,一個web層小問題的修改,哪怕一行程式碼,你要重新編譯、部署。。。所以適當的把web層用指令碼語言來做肯定效率是迅速的,比如,後端很複雜的邏輯全部java實現封裝,前端的展示,資料的校驗,互動全部可以通過指令碼語言來實現,效率肯定是空前的高效。

但是也會帶來一些新的問題(程式碼太過自由化不好控制,錯誤在初期不容易發現)至少目前國內還沒有這方面結合的公司有應用的生產環境,但是如果想追求效率,這麼做肯定是沒問題的,至少我是這麼認為的。當然公司可能會覺得招聘人員的成本增加了。本來招一個java的程式設計師所有都可以搞了,現在還要招不同的人做不同的事。

附:原始碼點此下載 (鄙視下csdn,上傳個檔案半天不顯示。。。只好借javaeye的寶地一用了)

原始碼為mvn的例子,只用在根目錄,mvn jetty:run即可執行

因為是測試二級域名的解析,所以要配置host。

C:/WINDOWS/system32/drivers/etc/host檔案中增加 127.0.0.1 blog.xxx.com photo.xxx.com來測試