SpringMVC的核心類和注解


1.1 DispatcherServlet

DispatcherServlet的全名是org.springframework.web.servlet.DispatcherServlet,它在程序中充當着前端控制器的角色。

在使用時,只需將其配置在項目的web.xml文件中,其配置代碼如下。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
         id="WebApp_ID" version="2.5">
 <servlet>
   <!-- 配置前端過濾器 -->
   <servlet-name>springmvc</servlet-name>
   <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
   </servlet-class>
   <!-- 初始化時加載配置文件 -->
   <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:springmvc-config.xml</param-value>
   </init-param>
   <!-- 表示容器在啟動時立即加載Servlet -->
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
     <servlet-name>springmvc</servlet-name>
     <url-pattern>/</url-pattern>
 </servlet-mapping>
</web-app>

 

在上述代碼中,<load-on-startup>元素和<init-param>元素都是可選的。

如果<load-on-startup>元素的值為1,則在應用程序啟動時會立即加載該Servlet;

如果<load-on-startup>元素不存在,則應用程序會在第一個Servlet請求時加載該Servlet。

如果<init-param>元素存在並且通過其子元素配置了Spring MVC配置文件的路徑,

則應用程序在啟動時會加載配置路徑下的配置文件;如果沒有通過<init-param>元素配置,

則應用程序會默認到WEB-INF目錄下尋找如下方式命名的配置文件。

servletName-servlet.xml

其中,servletName指的是部署在web.xml中的DispatcherServlet的名稱,

在上面web.xml中的配置代碼中即為springmvc,而-servlet.xml是配置文件名的固定寫法,

所以應用程序會在WEB-INF下尋找springmvc-servlet.xml。

 

1.2 Controller注解類型

org.springframework.stereotype.Controller注解類型用於指示Spring類的實例是一個控制器,

其注解形式為@Controller。該注解在使用時不需要再實現Controller接口,只需要將@Controller注解加入到控制器類上,

然后通過Spring的掃描機制找到標注了該注解的控制器即可。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
@Controller
public class FirstController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        //創建ModelAndView對象
        ModelAndView mav=new ModelAndView();
        //向模型對象中添加數據
        mav.addObject("msg","這是我的第一個SpringMVC程序");
        //設置邏輯視圖名
        mav.setViewName("/jsp/first.jsp");
        //返回ModelAndView對象
        return mav;
    }

}

 

為了保證Spring能夠找到控制器類,還需要在Spring MVC的配置文件中添加相應的掃描配置信息,

具體如下。

(1)在配置文件的聲明中引入spring-context。

(2)使用<context:component-scan>元素指定需要掃描的類包。

一個完整的配置文件示例如文件所示。

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd">
      <!-- 指定需要掃描的包 -->
      <context:component-scan base-package="com.itheima.controller"/>
</beans>

 

<context:component-scan>元素的屬性base-package指定了需要掃描的類包為com.itheima.controller。

在運行時,該類包及其子包下所有標注了注解的類都會被Spring所處理。

 

與實現了Controller接口的方式相比,使用注解的方式顯然更加簡單。

同時,Controller接口的實現類只能處理一個單一的請求動作,而基於注解的控制器可以同時處理多個請求動作,

在使用上更加的靈活。因此,在實際開發中通常都會使用基於注解的形式。

 

1.3 RequestMapping注解類型

1.3.1 @RequestMapping注解的使用

Spring通過@Controller注解找到相應的控制器類后,還需要知道控制器內部對每一個請求是如何處理的。

這就需要使用org.springframework.web.bind.annotation.RequestMapping注解類型。

RequestMapping注解類型用於映射一個請求或一個方法,其注解形式為@RequestMapping,可以使用該注解標注在一個方法或一個類上。

 

標注在方法上

當標注在一個方法上時,該方法將成為一個請求處理方法,

它會在程序接收到對應的URL請求時被調用。使用@RequestMapping注解標注在方法上的示例如下。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class FirstController {
    @RequestMapping(value="/firstController")
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        //創建ModelAndView對象
        ModelAndView mav=new ModelAndView();
        //向模型對象中添加數據
        mav.addObject("msg","這是我的第一個SpringMVC程序");
        //設置邏輯視圖名
        mav.setViewName("/jsp/first.jsp");
        //返回ModelAndView對象
        return mav;
    }
}

 

標注在類上

當標注在一個類上時,該類中的所有方法都將映射為相對於類級別的請求,

表示該控制器所處理的所有請求都被映射到value屬性值所指定的路徑下。

使用@RequestMapping注解標注在類上的示例如下

 

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value="/hello")
public class FirstController {
    @RequestMapping(value="/firstController")
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        //創建ModelAndView對象
        ModelAndView mav=new ModelAndView();
        //向模型對象中添加數據
        mav.addObject("msg","這是我的第一個SpringMVC程序");
        //設置邏輯視圖名
        mav.setViewName("/jsp/first.jsp");
        //返回ModelAndView對象
        return mav;
    }
}

 

 

 

1.3.2@RequestMapping注解的屬性

@RequestMapping注解除了可以指定value屬性外,還可以指定其他一些屬性,這些屬性如表12-1所示。

12.3.3 組合注解

前面兩個小節已經對@RequestMapping注解及其屬性進行了詳細講解,而在Spring框架的4.3版本中,

引入了組合注解,來幫助簡化常用的HTTP方法的映射,並更好地表達被注解方法的語義。

其組合注解如下所示。

· @GetMapping:匹配GET方式的請求。

· @PostMapping:匹配POST方式的請求。

· @PutMapping:匹配PUT方式的請求。

· @DeleteMapping:匹配DELETE方式的請求。

· @PatchMapping:匹配PATCH方式的請求。

以@GetMapping為例,該組合注解是@RequestMapping(method = RequestMethod.GET)的縮寫,

它會將HTTP GET映射到特定的處理方法上。在實際開發中,傳統的@RequestMapping注解使用方式如下

 

1.4 ViewResolver(視圖解析器)

Spring MVC中的視圖解析器負責解析視圖,可以通過在配置文件中定義一個ViewResolver來配置視圖解析器,其配置示例如下。

 

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd">
      <!-- 指定需要掃描的包 -->
      <context:component-scan base-package="com.itheima.controller"/>
   
     <!-- 視圖解析器 -->
     <bean id="viewResolver"
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <!-- 設置前綴 -->
         <property name="prefix" value="/jsp/"></property>
         <!-- 設置后綴 -->
         <property name="suffix" value=".jsp"></property>
     </bean>
</beans>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM