DispatcherServlet的全名是org.springframework.web.servlet.DispatcherServlet,它在程序中充当着前端控制器的角色。在使用时,只需要将其配置在项目的web.xml文件中,其代码如下

在上述代码中,<load-on-startup>元素和<init-param>元素都是可选的。如果<load-on-startup>元素的值为1,则在应用程序启动时会立刻加载该servlet;如果<load-on-startup>元素不存在,则应用程序会在第一个Servlet请求时加载该servlet.如果<init-param>元素存在并且通过其子元素配置了spring mvc配置文件的路径,则应用程序在启动时会加载配置路径下的配置文件


一.Controller注解类型

org.springframework.stereotype.Controller注解类型用于指示Spring类的实例是一个控制器,其注解形式为@Controller。该注解在使用时不需要再实现Controller接口,只需要将@Controlelr注解加入到控制器类上,然后通过spring的扫描机器找到标注了该注解的控制器即可。

使用示例

为了保证spring能够找到控制器类,还需要在spring mvc的配置文件中添加相应的扫描配置信息,具体如下

  • 在配置文件的声明中引入spring-context.
  • 使用<context:component-scan>元素指定需要扫描的类包。

<context:component-scan>元素的属性base-package指定了需要扫描的类包为com.controller.在运行时,该类包及其子包下所有标注的类都会被spring所处理


二.RequestMapping注解类型

2.1@RequestMapping注解的使用

spring通过@Controller注解找到相应的控制器类后,还需要知道控制器内部对每一个请求是如何处理的,这就需要使用org.springframework.web.bing.annotation.RequestMapping注解类型。RequestMapping注解类型用于映射一个请求或一个方法,其注解形式为@RequestMapping,可以使用该注解标注在一个方法或一个类上

2.1.1.标注在类上

当标注在一个类上时,该类中的所偶方法都将映射为相对于类级别的请求,表示该控制器所处理的所有请求都被映射到value属性值所指定的路径下。使用@RequestMapping注解标注在类上的示例如下

由于在类上添加了@RequestMapping注解,并将其value属性值为"/hello",所以上述代码方法的请求路径将变为:http://localhost:8080/hello/first。如果该类中还包含其他方法,那么在其他方法的请求路径中也需要加入"/hello"。


2.1.2.标注在方法上

当标注在一个类上时,该方法将成为一个请求处理方法,他会在程序接收到对应的URl请求时被调用。使用@RequestMapping注解标注在方法上的示例如下。

使用@RequestMapping注解后,上述代码中的方法就可以通过地址:http://localhost:8080/first进行访问


2.2@RequestMapping注解的属性

@RequestMapping注解除了可以指定value属性外,还可以指定其他一些属性,这些属性如下表所示

属性名类型描述
nameString可用属性,用于为映射地址指定别名
valueString[]可选属性,同时也是默认属性,用于映射一个请求和一种方法,可以标注在一个方法或一个类上
methodRequestMethod[]可选属性,用于指定该方法用于处理那种类型的请求方法, 其请求方式包括GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE, 例如method=RequestMethod.GET表示只支持GET请求,如果需要支持多个 请求方式择需要通过{}写成数组的形式,并且多个请求方式之间是有 英文逗号分隔
paramsString[]可选属性,用于指定Request中必须包含某些参数的值,才可以通过其 标注的方法处理
headersString[]可选属性,用于指定Request中必须包含指定的header值,才可以通过其 标注的方法处理
consumesString[]可选属性,用于指定处理请求的提交内容类型(Content-type),比如application/json 、text/html等
producesString[]可选属性,用于指定返回的内容类型,返回的内容类型必须是request请求 头(Accept)中所包含的类型

上列属性中都是可选的,当其默认属性是value.当value是其唯一属性时,可以省略属性名,例如下面两种标注的含义相同

@RequestMapping(value="/first")
@RequestMapping("/first")


三.组合注解

spring4.3版本中,引入了组合注解,来帮助简化常用的HTTP方法的映射,并更好地表达被注解方法的语义。其组合注解如下所示。

  • @GetMapping:匹配GET方式的请求
  • @PostMapping:匹配POST方式的请求
  • @PutMapping:匹配PUT方式的请求
  • @DeleteMapping:匹配DELETE方式的请求
  • @PatchMapping:匹配PATCH方式的请求

以@GetMapping为例,该组合注解是@RequestMapping(method = RequestMethod.GET)的缩写,它会将HTTP GET映射到特定的处理方法上。在实际开发中,传统的@RequestMapping注解使用方式如下

@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
public String selectUserById(String id) {
    ...
}

而使用新注解@GetMapping后,可以省略method属性,从而简化代码,其使用方式如下。

@GetMapping(value="/user/{id}")
public String selectUserById(String id) {
    ...
}

转载标明出处
注本文链接:https://imold.wang/back-end/spring/358.html
仿冒必究