一. SpringMVC的常用注解
SpringMVC 可以利用XML 的方式进行开发,但为了开发的方便,一般都会采用注解的形式进行开发。 所以,SpringMVC中提供了很多的注解,下面讲解一下注解。
二. @Controller 注解
@Target({java.lang.annotation.ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller { String value() default ""; }
以前为了实现handler 控制器,需要继承相应的父类或者是实现相应的接口,如Controller 接口, 而用@Controller 标记的类不需要再继承父类和实现接口,非常方便。 而且,如果是实现Controller 接口的话,则只能处理单一的请求, 而@Controller 类则可以处理多个请求,即写多个方法。 不要忘记进行包扫描。
二.一 @Controller 标记
@Controller public class UserAction { }
二.二 包扫描
在springmvc.xml 中:
<context:component-scan base-package="com.yjl.action"></context:component-scan>
三. @RequestMapping 注解
@RequestMapping 用哪一个类和方法来处理请求动作。 可以标记在方法上,也可以标记在类上。 如果标记在类上,那么均以该路径作为父级路径。
@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default ""; @AliasFor("path") String[] value() default {}; @AliasFor("value") String[] path() default {}; RequestMethod[] method() default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {}; }
@RequestMapping 注解中的 属性有:
1 . value 指定请求的实际地址
2 . method 指定请求的method 类型, 有Get,Post
3 . name 指定请求的别名。
4 . consumes 指定处理请求的提交内容类型,即 Content_type, 常见的有 application/json (json数据), text/html (普通字符串)
5 . produces 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
6 . params: 指定request中必须包含某些参数值是,才让该方法处理。
7 . headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
其中,还有一个 path 属性,不常用。
三.一 value 属性。
用value 来指定实际地址。
1 . 配置在方法上
@RequestMapping(value="/register") public String register(){ return "user/login"; }
那么访问时,就可以 用 http://localhost:8090/SpringMVC02/register.action 进行访问了。
如果@RequestMapping 中只有一个属性值,那么可以省略 value属性。
@RequestMapping("/register") public String register(){ return "user/login"; }
一个类中有多个方法, 如list, add, 等方法,而且这些方法基本上都是会重复的, 如UserAction 中是 list(), add(),delete(),update() 方法, DeptAction 中也是 list(), add(), delete(), update() 方法,当然,可以在方法上进行区分
UserAction 中:
@RequestMapping(value="/user/list") public String list(){ return "user/list"; }
DeptAction 中:
@RequestMapping(value="/dept/list") public String list(){ return "dept/list"; }
2 . 配置在类上
每一个可能会重复的方法,前面都要加个自己类的标记,这样不太好。 故可以将@RequestMapping 注解放置在 类上。
UserAction 中:
@Controller @RequestMapping(value="/user") public class UserAction { }
DeptAction 中:
@Controller @RequestMapping(value="/dept") public class DeptAction { }
这样 list() 方法配置时,就不需要再添加前面的自己类的标记了。
UserAction:
@RequestMapping(value="/list") public String list(){ return "user/list"; }
访问时路径为: http://localhost:8090/SpringMVC02/user/list.action
DeptAction 中:
@RequestMapping(value="/list") public String list(){ return "dept/list"; }
访问时路径为: http://localhost:8090/SpringMVC02/dept/list.action
三.二 method 属性
1 . 配置一个方式
@RequestMapping(value="/login",method=RequestMethod.POST) public String login(){ return "user/login"; }
指定 请求的方式为 POST 提交 ,如果在前面 form 表单设置提交的方式为 get的话,是不能提交到这个方法的。 注意,此时请求路径 value 是不能省略的。
2 . 也可以配置多个请求方式
@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST}) public String login(){ return "user/login"; }
form 表单,get 方式和post 方式均可以的。
3 .RequestMethod 提供的方式有八种。
package org.springframework.web.bind.annotation; public enum RequestMethod { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; private RequestMethod() {} }
如果没有指定,那么可以任意的方式进行。 通常设置成 get 或者是Post.
三.三 consumes 属性
- 可以配置一个 如常见的json 方式
@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST}, consumes="application/json") public String login(){ return "user/login"; }
2 . 也可以配置多种方式,如 json 和普通字符串
@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST}, consumes={"application/json","text/html"}) public String login(){ return "user/login"; }
三.四 produces 属性
指定返回类型为json 时
@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST}, produces={"application/json"}) public String login(){ return "user/login"; }
也可以配置多个
@RequestMapping(value="/login",method={RequestMethod.GET,RequestMethod.POST}, produces={"application/json","text/html"}) public String login(){ return "user/login"; }
三.五 params 属性
@RequestMapping(value="/login",params="isEffective=true") public String login(){ return "user/login"; }
请求的参数里面,必须具有 isEffective 的参数,并且值是true.
只有账号有效时,才能登录。 用于登录前的验证。
里面常常设置一些参数来限制方法的执行。
三.六 headers 属性
@RequestMapping(value="/login",params="isEffective=true", headers="Referer=http://www.yuejl.top") public String login(){ return "user/login"; }
浏览器的头部,必须带有Referer 的参数,并且值是 http://www.yuejl.top
这个常常用于防止 盗链的情况的产生。