天天看點

用 JAX-RS 和 JSR 371 規範設計一個 MVC 架構(二)HelloWorld

先說說用法,也就是 Hello World 了。

哪怕是 Hello World,也離不開前期的配置。首先把 JAX-RS JAR 引入你的 claspath。

javax.ws.rs-api-2.0.rev.A.jar

然後還要把 jar 加入 Eclipse 的 Deployment Assembly,不然 Tomcat 會告訴你找不到類。

如下,我們加入了全局的過濾器。

控制台顯示如下圖所示,告訴你掃描了哪些類。

用 JAX-RS 和 JSR 371 規範設計一個 MVC 架構(二)HelloWorld

要注意的是,掃描的不是類名,而是包名。多個包的話可用逗号分開。

包名應該是包含控制器 IController 的包,例如 test.com.ajaxjs.mvc.controller 包下面有個 SimpleController 類:

package test.com.ajaxjs.mvc.controller;

這是一個十分簡單的類是吧?好~。隻要我們實作了 IController 接口,然後定義 @Controller 和 @Path 注解,指明一下 URL 是什麼(目前是 /simple),就定義了一個控制器類——這個類能被掃描并分發為,隻要使用者通路 /simple 這個路徑,即可執行這個類身上的方法!怎麼執行呢?執行哪些方法呢?上述例子代碼給出了最簡單的一個 Get 方法,意思是 GET 請求到 /simple 這個路徑上馬上執行 showHTML() 這個方法——這個方法幹什麼呢?就是輸出一段 HTML,請注意字元串裡面的 html::XXXX 字首是約定好的,表示 response 要輸出的 HTML 字元串。如下圖所示。

用 JAX-RS 和 JSR 371 規範設計一個 MVC 架構(二)HelloWorld

沒錯,符合了我們的預期。實際 html:: 的作用是将必須的 HTML 标簽“環繞”了你想輸出的任意字元串,好比說上面的 HTML 是:

到目前為止,還是不錯的是吧?實際上我們的 MVC 還有個小問題。大家注意到沒有, web.xml 的過濾器是全局路徑的,即 “/*” 表示所有請求都會來到我 MVC 分發器這裡。那麼問題來了,如果碰到 js/css/html 等靜态檔案其實無須走我 MVC 這裡,怎麼處理?可以在 filter 裡面“旁路”的,但“旁路”十分不友善。這裡為大家介紹一個小技巧,就是為全局路徑加上一個字尾的約定,即:

當然,如果你的 MVC 隻是 RESTful 這樣的接口的話,是不需要考慮這問題。