SpringMVC的核心类和注解


1.1 DispatcherServlet

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

在使用时,只需将其配置在项目的web.xml文件中,其配置代码如下。

<?xml version="1.0" encoding="UTF-8"?>

 
   
   springmvc
   
      org.springframework.web.servlet.DispatcherServlet
   
   
   
         contextConfigLocation
         classpath:springmvc-config.xml
   
   
   1
 
 
     springmvc
     /
 

在上述代码中,元素和元素都是可选的。

如果元素的值为1,则在应用程序启动时会立即加载该Servlet;

如果元素不存在,则应用程序会在第一个Servlet请求时加载该Servlet。

如果元素存在并且通过其子元素配置了Spring MVC配置文件的路径,

则应用程序在启动时会加载配置路径下的配置文件;如果没有通过元素配置,

则应用程序会默认到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)使用元素指定需要扫描的类包。

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

<?xml version="1.0" encoding="UTF-8"?>

      
      

元素的属性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"?>

      
      
   
     
     
         
         
         
         
     
一纸高中万里风,寒窗读破华堂空。 莫道长安花看尽,由来枝叶几相同?