一、SpringMVC常用表明
@Controller
卖力注册一个bean 到spring 高下文中。
@Service
声明Service组件,例如@Service(\"大众myMovieLister\"大众)
@Repository
声明Dao组件。
@Component
泛指组件, 当不好归类时利用此表明。
@Resource
用于注入,( j2ee供应的 ) 默认按名称装置,@Resource(name=\"大众beanName\公众) 。
@Autowired
用于注入,(srping供应的) 默认按类型装置 。
@Transactional( rollbackFor={Exception.class})
事务管理。
@Scope(\"大众prototype\"大众)
设定bean的浸染域。
@RequestMapping
表明为掌握器指定可以处理哪些 URL 要求。
@RequestBody
该表明用于读取Request要求的body部分数据,利用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的工具上 ,再把HttpMessageConverter返回的工具数据绑定到 controller中方法的参数上。
@ResponseBody
该表明用于将Controller的方法返回的工具,通过适当的HttpMessageConverter转换为指定格式后,写入到Response工具的body数据区。
@ModelAttribute
在方法定义上利用 @ModelAttribute 表明:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。
在方法的入参前利用 @ModelAttribute 表明:可以从隐含工具中获取隐含的模型数据中获取工具,再将要求参数 –绑定到工具中,再传入入参将方法入参工具添加到模型中 。
@RequestParam
在处理方法入参处利用 @RequestParam 可以把要求参 数通报给要求方法。
@PathVariable
绑定 URL 占位符到入参。
@ExceptionHandler
表明到方法上,涌现非常时会实行该方法。
@ControllerAdvice
使一个Contoller成为全局的非常处理类,类中用@ExceptionHandler方法表明的方法可以处理所有Controller发生的非常。
二、@RequestMapping详解
1、映射要求 URL
Spring MVC 利用 @RequestMapping 表明为掌握器指定可以处理哪些 URL 要求。在掌握器的类定义及方法定义处都可标注。
@RequestMapping
– 类定义处:供应初步的要求映射信息。相对付 WEB 运用的根目录。
– 方法处:供应进一步的细分映射信息。相对付类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对付WEB 运用的根目录。
DispatcherServlet 截获要求后,就通过掌握器上@RequestMapping 供应的映射信息确定要求所对应的处理方法。
@RequestMapping(\公众/springmvc\"大众)
@Controller
public class HelloWorld {
/
1. 利用 @RequestMapping 表明来映射要求的 URL
2. 返回值会通过视图解析器解析为实际的物理视图, 对付 InternalResourceViewResolver 视图解析器, 会做如下的解析:
通过 prefix + returnVal + 后缀 这样的办法得到实际的物理视图, 然会做转发操作。
/WEB-INF/views/success.jsp------->对应的要求是类的@RequestMapping+方法的@RequestMapping
也便是/springmvc/helloworld
/
@RequestMapping(\"大众/helloworld\公众)
public String hello(){
System.out.println(\公众hello world\"大众);
return \"大众success\"大众;
}
}
2、映射要求参数、要求方法或要求头
@RequestMapping 的 value、method、params 及 heads分别表示要求 URL、要求方法、要求参数及要求头的映射条件,他们之间是与的关系,联合利用多个条件可让要求映射更加精确化。
示例:
-----
@RequestMapping(value = \公众/testMethod\"大众, method = RequestMethod.POST)
指定要求办法为POST办法,如此便不再相应GET办法的要求。
-----
@RequestMapping(value = \"大众testParamsAndHeaders\"大众, params = { \"大众username\"大众,
\公众age!=10\公众 }, headers = { \公众Accept-Language=en-US,zh;q=0.8\公众 })
默认要求办法为GET办法,且须要有两个参数:username和age,还限定了age不能为10。
\"大众/testParamsAndHeaders?username=atguigu&age=10\"大众这个要求不知足哀求,SpringMVC不会处理。
3、通配符
@RequestMapping 支持 Ant 风格的 URL。
---?:匹配文件名中的一个字符
---:匹配文件名中的任意字符
---: 匹配多层路径
示例:
---/user//createUser: 可以匹配如下
/user/aaa/createUser、/user/bbb/createUser 等 URL。
---/user//createUser: 可以匹配如下
/user/createUser、/user/aaa/bbb/createUser 等 URL。
---/user/createUser??: 可以匹配如下
/user/createUseraa、/user/createUserbb 等 URL,但不匹配/user/createUseraaa。
三、@PathVariable
通过 @PathVariable 可以将 URL 中占位符参数绑定到掌握器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(\公众xxx\公众) 绑定到操作方法的入参中。
示例:
@RequestMapping(\"大众/testPathVariable/{id}\公众)
public String testPathVariable(@PathVariable(\"大众id\"大众) Integer id) {
System.out.println(\公众testPathVariable: \"大众 + id);
return SUCCESS;
}
如果要求为/testPathVariable/1,那么参数\公众1\公众会作为参数传给id作为传入参数。在方法中就可以获取这个参数值。
四、要求处理方法署名
Spring MVC 通过剖析处理方法的署名,可以将 HTTP 要求信息绑定到处理方法的相应人参中。必要时可以对方法及方法入参标注相应的表明(@PathVariable、@RequestParam、@RequestHeader 等)、SpringMVC 框架会将 HTTP 要求的信息绑定到相应的方法入参中,并根据方法的返回值类型做出相应的后续处理。
1、@RequestParam
在处理方法入参处利用 @RequestParam 可以把要求参数通报给要求方法。有三个属性:
value:指定参数名
required:解释是否必须。默认为 true, 表示要求参数中必须包含对应的参数,若不存在,将抛出非常
defaultValue:指定要求参数的默认值。
示例
@RequestMapping(value = \公众/testRequestParam\"大众)
public String testRequestParam(
@RequestParam(value = \"大众username\"大众) String un,
@RequestParam(value = \"大众age\公众, required = false, defaultValue = \公众10\"大众) int age) {
System.out.println(\"大众testRequestParam, username: \"大众 + un + \"大众, age: \公众
+ age);
return SUCCESS;
}
声明两个输入参数,个中age参数可以缺省,默认为10。如/testRequestParam?username=kang&age=11。
2、@RequestHeader
利用 @RequestHeader 可以绑定要求报头的属性值。要求头包含了多少个属性,做事器可据此获知客户真个信息,通过 @RequestHeader 即可将要求头中的属性值绑定到处理方法的入参中。
示例:
@RequestMapping(\"大众/testRequestHeader\公众)
public String testRequestHeader(
@RequestHeader(value = \"大众Accept-Language\"大众) String al) {
System.out.println(\"大众testRequestHeader, Accept-Language: \"大众 + al);
return SUCCESS;
}
3、利用 @CookieValue 绑定要求中的 Cookie 值,可让处理方法入参绑定某个 Cookie 值。
示例:
@RequestMapping(\"大众/testCookieValue\公众)
public String testCookieValue(@CookieValue(\公众JSESSIONID\"大众) String sessionId) {
System.out.println(\"大众testCookieValue: sessionId: \"大众 + sessionId);
return SUCCESS;
}
五、将 POJO 工具绑定为要求参数值
Spring MVC会按要求参数名和 POJO 属性名进行自动匹配,自动为该工具添补属性值。支持级联属性。示例:POJO类:Address.java
public class Address {
private String province;
private String city;
//省略了get/set方法
//重写了toString方法
}
User.java
public class User {
private String username;
private String password;
private String email;
private int age;
private Address address;//持有一个Address的类实例
//省略了get/set方法
//重写了toString方法
}
jsp页面要求:
<form action=\"大众/testPojo\"大众 method=\公众post\"大众>
username: <input type=\"大众text\公众 name=\公众username\"大众/>
<br>
password: <input type=\公众password\"大众 name=\"大众password\"大众/>
<br>
email: <input type=\公众text\公众 name=\"大众email\"大众/>
<br>
age: <input type=\公众text\公众 name=\"大众age\公众/>
<br>
city: <input type=\"大众text\公众 name=\公众address.city\"大众/>
<br>
province: <input type=\公众text\"大众 name=\"大众address.province\"大众/>
<br>
<input type=\"大众submit\"大众 value=\公众Submit\公众/>
</form>
<br><br>
可以看出name=\公众address.city\"大众和name=\"大众address.province\公众都采取了级联属性。
Spring MVC代码:
@RequestMapping(\公众/testPojo\"大众)
public String testPojo(User user) {
System.out.println(\"大众testPojo: \"大众 + user);
return SUCCESS;
}
这里直接将User类和index.jsp的表单参数名直接对照,从而实现映射。
六、利用 Servlet API 作为入参
MVC 的 Handler 方法可以接管的 ServletAPI 类型的参数如下:
---HttpServletRequest
---HttpServletResponse
---HttpSession
---Locale,InputStream等。
示例:
public void testServletAPI(HttpServletRequest request,
HttpServletResponse response, Writer out) throws IOException {
System.out.println(\"大众testServletAPI, \"大众 + request + \"大众, \公众 + response);
out.write(\"大众hello springmvc\"大众);
return SUCCESS;
}