1. 程式人生 > >@Controller註解

@Controller註解

解析器 配置 attr 是否 frame com servle 視圖 bsp

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;
import
org.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註解