1. 程式人生 > >Spring 4.x官方參考文件中文版——第21章 Web MVC框架(4)

Spring 4.x官方參考文件中文版——第21章 Web MVC框架(4)

21.3實現Controller控制器

Controller控制器可以為你在一個服務介面中定義好的應用行為提供訪問權。controller控制器可以理解使用者的輸入行為,並且把其轉化為一個可以通過檢視呈現給使用者的model模型。Spring是以一種十分抽象的方式來實現的controller控制器,這樣,你就能建立多樣化的controller控制器。

        在Spring 2.5中,介紹了在MVC controller控制器中,基於註解程式設計的model模型,這些模型運用了諸如@RequestMapping,  @RequestParam,@ModelAttribute等的註解。這些註解同時支援Servlet MVC和Portlet MVC。這些Controller在實現時,不需要去繼承特定的基類或者實現特定的介面,除此以外,一般情況下,這些controller也不直接依賴於Servlet和Portlet的API,所以,你可以輕鬆地配置它,來訪問Servlet和Portlet的裝置。

小提示:

       在spring-projects Org on Github上可以獲取大量使用了註解的Web應用示例,包括 MVCShowcase, MvcAjax, MvcBasic,PetClinic, PetCare等等。


        如上所示,@Controller和@RequestMapping註解允許使用靈活的方法名,在這個例子中,這個方法接受了一個Model,並且返回了一個String型別的檢視名。在下文中,還將會解釋多種方法引數和返回值。@Controller和@RequestMapping等等許多註解組成了Spring MVC的基本實現。這部分文章將介紹這些註解,並且介紹在Servlet環境中這些註解的一般使用方法。

以@Controller註解來定義一個controller控制器

        @Controller註解代表某個特定類會被當作controller控制器。Spring不要求你去繼承任何controller基類或者去引用Servlet API,當然,如果需要,你也可以引用特定的Servlet特性。

        @Controller作為被註解的類的構造型,代表著這個類所扮演的角色。Dispatcher(分派器)將會為這些註解了的類掃描對應對映的方法,並且檢測@RequestMapping註解(詳見下一節)。

        你能夠利用在dispatcher(分派器)的 context中,使用標準的Springbean定義,顯式地定義這些帶註解的controller控制器bean。然而,@Controller的構造型,也可以利用在Spring中提供的一種普遍支援的特性(檢測在classpath路徑下的類並且自動註冊它們)來自動檢測這些controller bean。

為了啟用對這些註解controller控制器的自動檢測功能,你需要再你的配置文件中新增元件掃描,見下方XML的spring-context的schema。

 

運用@RequestMapping註解對映Request請求

        你可以在整個類上,或者特定的handler處理器方法上使用@RequestMapping註解,來對映例如”/appointments”這樣的的URL連結。一般來說,類級別的註解用來對映特定的request請求路徑(或者路徑型別)到一個整體controller控制器上,通過在類中的方法上新增額外的@RequestMapping註解,來縮窄主要對映的URL,用來處理不同條件的request請求,這些request請求包含如HTTP方法,request的GET,POST方法,或者HTTP的請求引數。

下方的例子(取自於Petcare的樣例)展示了在Spring MVC應用中使用這個註解的controller控制器:


        在上面的例子中,@RequestMapping在很多地方都用到了,第一個註解是在類上,這表示在這個controller裡的所有處理方法都與“/appointments”這個路徑有關。get()方法上的@RequestMapping,表示僅接受GET型別的request請求,意味著在”/appointments”下面的HTTP GET請求將實現這個方法。同樣的,add()方法也與get()方法解釋一致。getNewForm()方法把定義的HTTP方法和路徑結合到了一起,所以在”/appointments/new”下的GET請求就能被這個方法處理。

GetForDay()這個方法展示了@RequestMapping方法的另一種用法:URL模板(詳見下一節)。

        在類上的@RequestMapping註解並不是必須的,如果沒有它,所有路徑將是獨立的,而不是相關的。以下取自於PetClinic的樣例展示了使用了@RequestMapping註解的多行為的controller處理器:


    以上的例子中,沒有定義GET,PUT,POST等等,因為@RequesstMapping預設會對映所有的HTTP方法,使用@RequestMapping(method=GET)可以縮窄這個對映接受的request請求方法。