Spring MVC的常用注解(一)

概述
Spring从2.5版本开始引入注解,虽然版本不断变化,但是注解的特性一直被延续下来并不断进行扩展,这里就来记录一下Spring MVC中常用的注解,本文记录@Controller、@RequestMapping、@RequestParam和@PathVariable四个注解。
@Controller注解
该注解用来标记类,由其标记的类就是一个Spring MVC Controller的一个对象,即一个控制器类。
Spring使用扫描机制扫描应用程序中所有使用该注解进行注释的类,分发处理器扫描使用了该注解的类的方法,检测方法是否使用了@RequestMapping注解,使用了@RequestMapping注解的方法才是真正处理请求的处理器。
Spring能够扫描到控制器,需要在Spring MVC的配置文件(前文例子中的springmvc-servlet.xml文件)中完成两个配置项:
1.在头文件中引入spring-context。
2.使用元素,该元素的功能:启动包扫描功能,注册使用了@Controller、@Service、@Repository、@Component等注解的类成为Spring的bean。

  1 package="com.snow.dcl.controller"/>

base-package属性指定了需要扫描的包,该包以及其子包中的类都会被进行处理,所有的控制器类都应该放在该包路径下,以免扫描其他无关的包。
@RequestMapping
该注解用来标记类或者方法,指示Spring用该类或者方法处理请求动作。
如果使用该注解注释类,该类所有的方法,都被映射为相对于类级别的请求,表示该控制器处理的所有请求,都被映射都value属性指定的路径下。

  1 @Controller
  2 @RequestMapping(value = "/user")
  3 public class UserController {
  4 
  5     @RequestMapping(value = "register")
  6     public String register(){
  7         return "register";
  8     }
  9 
 10     @RequestMapping(value = "login")
 11     public String login(){
 12         return "login";
 13     }
 14 }
 15 


因为在该类上使用了@RequestMapping(value = "/user")注解,请求都要加上/user路径:http://localhost:8080/user/login
@RequestMapping注解支持的常用属性:

属性 类型 说明
value String[] 用于将指定请求映射到方法上
method RequestMethod[] 映射指定请求的方法类型,包括GET、POST、PUT......
consumes String[] 指定处理请求的提交内容类型(Content-Type:application/json、text/html等)
produces String[] 指定返回的内容类型,必须是request请求头(Accept)中包含的类型
params String[] 指定request中必须包含某些参数,才让该方法处理请求
header String[] 指定request中必须包指定的header值,才让该方法处理请求


注意:由于value是@RequestMapping注解的默认属性,如果该注解使用时只有此一个属性,则可以省略改属性名,若有多个属性,则必须写上value属性名。

  1 @RequestMapping(value = "/hello")
  2 @RequestMapping("/hello")


value属性是String[]类型,所以可以设置多个值:

  1 @RequestMapping(value = {"/hello","/hello1"})


此时请求访问两个路径都可以映射到同一个方法进行处理。
@RequestParam
该注解用来将指定的请求参数赋值给方法中的形参。
@RequestParam注解支持的常用属性:

属性 类型 说明
name String 指定请求头绑定的名称
value String name属性的别名
required boolean 参数是否必须绑定
defaultValue String 没有传递参数时,参数的默认值

注解示例程序
修改springmvc-servlet.xml文件
示例程序在前文项目SpringMVCProject的基础上进行完善编写。
修改springmvc-servlet.xml文件配置:

  1 1.0" encoding="UTF-8"?>
  2 http://www.springframework.org/schema/beans"
  3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4        xmlns:context="http://www.springframework.org/schema/context"
  5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  6 
  7     
  8     package="com.snow.dcl.controller"/>
  9 
 10     
 11     viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 12         prefix">
 13             /WEB-INF/content/
 14         
 15         suffix">
 16             .jsp
 17         
 18     
 19 
 20 
 21 


1.现在使用了注解类型,所以不需要在XML文件中描述Bean。
2.指定Spring扫描com.snow.dcl.controller包及子包下所有的java文件。
3.然后配置视图解析器展示,视图解析器中配置的prefix表示视图的前缀,suffix表示视图的后缀。

  1 @RequestMapping(value = "register")
  2 public String register(){
  3     return "register";
  4 }

如上面程序中,返回的是"register",经过视图解析器后的完整路径为:/WEB-INF/content/register.jsp。
注意:此处没有再配置处理映射器和处理适配器,当不进行配置时,Spring会使用默认的进行处理。
创建User类
首先在项目中创建com.snow.dcl.domain包,在该包下创建User类文件,编写如下程序:

  1 @Data
  2 public class User implements Serializable {
  3     private String loginname;
  4     private String password;
  5     private String username;
  6 }

这里使用lombok的@Date注解,自动生成Getter、Setter和toString方法,lombok的安装前文有讲述。
创建UserController类
在com.snow.dcl.controller包下创建UserController类文件,编写如下程序:

  1 @Controller
  2 @RequestMapping(value = "/user")
  3 public class UserController {
  4 
  5     private static final Log LOGGER = LogFactory.getLog(UserController.class);
  6     private static List userList;
  7 
  8     public UserController() {
  9         super();
 10         userList = new ArrayList();
 11     }
 12 
 13     @RequestMapping(value = "/register", method = RequestMethod.GET)
 14     public String registerForm() {
 15         LOGGER.info("调用registerForm方法");
 16         return "register";
 17     }
 18 
 19     @RequestMapping(value = "/register", method = RequestMethod.POST)
 20     public String register(@RequestParam("loginname") String loginname, @RequestParam("password") String password, @RequestParam("username") String username) {
 21         LOGGER.info("调用register方法");
 22         User user = new User();
 23         user.setLoginname(loginname);
 24         user.setPassword(password);
 25         user.setUsername(username);
 26         userList.add(user);
 27         return "login";
 28     }
 29 
 30     @RequestMapping(value = "/login")
 31     public String login(@RequestParam("loginname") String loginname, @RequestParam("password") String password, Model model) {
 32         LOGGER.info("登录名:" + loginname + "密码:" + password);
 33         for (User user:userList){
 34             if (user.getLoginname().equals(loginname)&&user.getPassword().equals(password)){
 35                 model.addAttribute("user",user);
 36                 return "information";
 37             }
 38         }
 39         return "login";
 40     }
 41 }
 42 


这里使用了本文记录的注解。
创建register.jsp文件
在项目的/WEB-INF/content目录下创建register.jsp文件,编写如下程序:

  1 <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
  2 
  3 
  4     Content-Type" content="text/html" charset="UTF-8">
  5     register
  6 
  7 
  8 

注册页面

9
10
register" method="post"> 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
text" id="loginname" name="loginname">
password" id="password" name="password">
text" id="username" name="username">
submit" id="submit" value="注册">
28
29

用来进行注册信息的输入。
创建login.jsp文件
在项目的/WEB-INF/content目录下创建login.jsp文件,编写如下程序:

  1 <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
  2 
  3 
  4     Content-Type" content="text/html" charset="UTF-8">
  5     login
  6 
  7 
  8 

登录页面

9
10
login" method="post"> 11 12 13 14 15 16 17 18 19 20 21 22 23
text" id="loginname" name="loginname">
password" id="password" name="password">
submit" id="submit" value="登录">
24
25 26

用来进行登录信息的输入。
创建information.jsp文件
在项目的/WEB-INF/content目录下创建information.jsp文件,编写如下程序:

  1 <%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
  2 
  3 
  4     Content-Type" content="text/html" charset="UTF-8">
  5     information
  6 
  7 
  8 

欢迎"${requestScope.user.loginname}"登录

9

用户名为:"${requestScope.user.username}"

10 11

用来进行展示用户名称。
配置字符编码过滤器
打开项目的web.xml文件,添加字符编码过滤器配置:

  1 
  2     SetCharacterEncoding
  3     class>org.springframework.web.filter.CharacterEncodingFilterclass>
  4     
  5         encoding
  6         UTF-8
  7     
  8     
  9         forceEncoding
 10         true
 11     
 12 
 13 
 14     SetCharacterEncoding
 15     /*
 16 


否则会出现information.jsp展示的中文信息乱码。
测试
启动TomcatServer,启动完成后,打开浏览器输入:http://localhost:8080/user/register访问成功。
因为此时是GET请求,调用registerForm方法,返回register.jsp。

Spring MVC的常用注解(一)_第1张图片
填写注册的信息之后,发送POST请求,调用的是register方法,返回login.jsp。
Spring MVC的常用注解(一)_第2张图片
填写登录名和密码,调用的是login方法,进行登录。
Spring MVC的常用注解(一)_第3张图片
登陆成功后,返回information.jsp,展示信息。

Spring MVC的常用注解(一)_第4张图片

你可能感兴趣的:(Spring MVC的常用注解(一))