SpringMVC使用(2)

 

轉載(http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/

使用過低版本 Spring MVC 的讀者都知道:當創建一個 Controller 時,我們需要直接或間接地實現 org.springframework.web.servlet.mvc.Controller 接口。一般情況下,我們是通過繼承 SimpleFormController 或 MultiActionController 來定義自己的 Controller 的。在定義 Controller 後,一個重要的事件是在 Spring MVC 的配置文件中通過 HandlerMapping 定義請求和控制器的映射關係,以便將兩者關聯起來。

來看一下基於註解的 Controller 是如何定義做到這一點的,下面是使用註解的 BbtForumController:

 

 

從上面代碼中,我們可以看出 BbtForumController 和一般的類並沒有區別,它沒有實現任何特殊的接口,因而是一個地道的 POJO。讓這個 POJO 與衆不同的魔棒就是 Spring MVC 的註解!

在 ① 處使用了兩個註解,分別是 @Controller 和 @RequestMapping。在“使用 Spring 2.5 基於註解驅動的 IoC”這篇文章裏,筆者曾經指出過 @Controller、@Service 以及 @Repository 和 @Component 註解的作用是等價的:將一個類成爲 Spring 容器的 Bean。由於 Spring MVC 的 Controller 必須事先是一個 Bean,所以 @Controller 註解是不可缺少的。

真正讓 BbtForumController 具備 Spring MVC Controller 功能的是 @RequestMapping 這個註解。@RequestMapping 可以標註在類定義處,將 Controller 和特定請求關聯起來;還可以標註在方法簽名處,以便進一步對請求進行分流。在 ① 處,我們讓 BbtForumController 關聯“/forum.do”的請求,而 ② 處,我們具體地指定 listAllBoard() 方法來處理請求。所以在類聲明處標註的 @RequestMapping 相當於讓 POJO 實現了 Controller 接口,而在方法定義處的 @RequestMapping 相當於讓 POJO 擴展 Spring 預定義的 Controller(如 SimpleFormController 等)。

爲了讓基於註解的 Spring MVC 真正工作起來,需要在 Spring MVC 對應的 xxx-servlet.xml 配置文件中做一些手腳。在此之前,還是先來看一下 web.xml 的配置吧:

 

 

web.xml 中定義了一個名爲 annomvc 的 Spring MVC 模塊,按照 Spring MVC 的契約,需要在 WEB-INF/annomvc-servlet.xml 配置文件中定義 Spring MVC 模塊的具體配置。annomvc-servlet.xml 的配置內容如下所示:

 

因爲 Spring 所有功能都在 Bean 的基礎上演化而來,所以必須事先將 Controller 變成 Bean,這是通過在類中標註 @Controller 並在 annomvc-servlet.xml 中啓用組件掃描機制來完成的,如 ① 所示。

在 ② 處,配置了一個 AnnotationMethodHandlerAdapter,它負責根據 Bean 中的 Spring MVC 註解對 Bean 進行加工處理,使這些 Bean 變成控制器並映射特定的 URL 請求。

而 ③ 處的工作是定義模型視圖名稱的解析規則,這裏我們使用了 Spring 2.5 的特殊命名空間,即 p 命名空間,它將原先需要通過 <property> 元素配置的內容轉化爲 <bean> 屬性配置,在一定程度上簡化了 <bean> 的配置。

啓動 Tomcat,發送 http://localhost/forum.do URL 請求,BbtForumController 的 listAllBoard() 方法將響應這個請求,並轉向 WEB-INF/jsp/listBoard.jsp 的視圖頁面。

 

在controller中,如果在某方法中需要從定向則 return "redirect:xx.html"(與類的RequestMapping的值在同一個路徑下)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章