@Controller註解
Spring從2.5版本後開始引入註解,用戶可以使用@Controller,@RequestMapping,@RequestParam,@ModelAttribute等類似這樣的註解。
@Controller用於標記一個類,使用它標記的類就是一個SpringMVC Controller 對象,即一個控制器類。Spring 使用掃描機制查找應用程序中所有基於註解的控制器類。分發處理器會掃描使用該註解的類的方法,並檢測該方法是否使用了@RequestMapping註解,而使用了@RequestMapping註解的方法才是真正處理請求的處理器。為保證Spring能找到控制器,需要完成兩件事:
>>在Spring MVC的配置文件的頭文件中引入spring-context
>>使用<context:component-scan>元素,該元素的功能為:啟動包掃描功能,以便註冊帶有@Controller,@Service,@repository,@Component等註解的的類成為Spring的Bean
>>base-pavckage 屬性指定了需要掃描的類包,類包及其遞歸子包中所有的類都會被處理
·配置文件如下:
<!-- spring可以自動去掃描base-pack下面的包或者子包下面的java文件, 如果掃描到有Spring的相關註解的類,則把這些類註冊為Spring的bean --><context:component-scan base-package="org.fkit.controller"/>
應該把所有控制器類都放在基本包中,並且指定掃描該包,即org.fkit.controller,而不是指定掃描org.fkit包,以免Spring MVC掃描了無關的包
現在我們演示如何使用@Controller註解
package org.fkit.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; importorg.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloWorldController{ @RequestMapping("/helloWorld") public String helloWorld(Model model) { model.addAttribute("message", "Hello World!"); return "helloWorld"; } }
HelloWorldController是一個基於@Controller註解的控制器,@RequestMapping註解用於映射一個請求,value = "/helloWorld"表示請求由helloWorld方法來進行處理。helloWorld方法接收一個 org.springframework.ui.Model類型的參數,本例在model中添加了一個名為"message"的字符串對象。該對象可以在返回視圖當中通過request對象獲取。最後,方法返回一個字符串"hello world"作為視圖名稱。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- spring可以自動去掃描base-pack下面的包或者子包下面的java文件, 如果掃描到有Spring的相關註解的類,則把這些類註冊為Spring的bean --> <context:component-scan base-package="org.fkit.controller"/> <!-- 視圖解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 前綴 --> <property name="prefix"> <value>/WEB-INF/content/</value> </property> <!-- 後綴 --> <property name="suffix"> <value>.jsp</value> </property> </bean> </beans>
由於使用了註解類型,因此不需要再在配置文件中使用XML掃描Bean,<context:component-scan base-package="org.fkit.controller"/>指定需要Spring掃描org.fkit.controller包及其子包下面的所有java文件。
配置視圖解析器InternalResourceViewResolver來解析視圖,將View呈現給用戶 。prefix表示視圖的前綴,suffix表示視圖的後綴,返回的視圖字符串是"helloWorld",經過視圖解析器之後,則視圖的完整路徑為:/WEB-INF/content/helloWorld.jsp。
此處沒有配置處理映射器和處理器適配器,當用戶沒有配置這兩項時,Spring會使用默認的處理映射器和處理器適配器處理 請求。
測試URL:http://localhost:8080/ControllerTest/helloWorld
@Controller註解