本篇总结内容
前言
@RequestMapping及常用参数
参数绑定
映射cookie
使用POJO绑定参数
JSP页面的转发和重定向
总结
分享交流
前言
spring MVC框架为开发者提供了功能强大的注解机制,可以帮助我们简化代码开发,提高开发效率,同时使得程序具备更好的扩展性,这一篇我就来总结一下spring MVC框架中常用注解的具体使用。
@RequestMapping及常用参数
@RequestMapping
spring MVC通过@RequestMapping注解将URL请求与业务方法进行映射,在控制器的类定义处以及方法处都可以添加@RequestMapping注解,在类定义处添加@RequestMapping相当于多了一层访问路径。
@Controller
@RequestMapping(value = "/testController")
public class TestController {
@RequestMapping(value = "/test")
public String Test(){
System.out.println("doing Test");
return "index";
}
}
@RequestMapping常用参数
(1)value:指定URL请求的实际地址,是@RequestMapping的默认值。可以省略,但注意当参数只有value时可以省略,多个参数不能省略value。
@RequestMapping("/test")
public String Test(){
System.out.println("doing Test");
return "index";
}
等同于
@MyRequestMapping(value = "/test")
public String Test(){
System.out.println("doing Test");
return "index";
}
(2)method:指定请求的method类型,包括GET、POST、PUT、DELETE等。
@Controller
public class HelloController {
//这里使用了method参数,指定了以什么方式访问
@RequestMapping(value = "hello",method = RequestMethod.POST)
public String Test(){
System.out.println("执行了Test方法");
return "index";
}
}
其他几种请求类型同理,我们常用的是GET和POST请求,在REST架构中会用到PUT和DELETE请求。
(3)params:指定request中必须包含的参数值,否则无法调用该方法。
@Controller
public class HelloController {
//这里用到了params,限制了访问参数必须包含哪些
@RequestMapping(value = "hello",params = {"name","age=18"})
public String Test(){
System.out.println("执行了Test方法");
return "index";
}
}
通过上边三幅图我们看到,只有只用指定的参数访问才能成功,其它都失败。
参数绑定
params是对URL请求的参数进行限制,不满足条件的URL无法访问业务方法,然而这个特性在开发中不是常用的,常用到的是获取URL中的参数,实现这一操作很简单,两部完成:
(1)在业务方法中定义时声明参数列表;
(2)给参数列表添加@RequestParam注解。
@Controller
public class HelloController {
@RequestMapping(value = "hello")
public String Test(@RequestParam("name")String name,@RequestParam("age")int age){
System.out.println("执行了Test方法");
System.out.println(name+"##"+age);
return "index";
}
}
这里注意必须要有这两个参数,少一个参数都会404。
这里报缺少参数age。
将URL请求的参数name和id分别映射给形参name和id,同时进行了数据类型的转换,因为URL参数类型都是String类型的,可我们代码中写的是int类型,spring MVC可以自动根据形参的数据类型完成数据类型转换,比如age="18"转换为age=18,具体的数据类型转换工作是由HandlerAdapter来完成的。
spring MVC也支持RESTful风格的URL参数获取
@Controller
public class HelloController {
@RequestMapping(value = "hello/{name}")
public String Test(@PathVariable("name")String name){
System.out.println("执行了Test方法");
System.out.println(name);
return "index";
}
}
注意访问请求路径
http://localhost/hello/lisi
映射Cookie
spring MVC通过映射可以直接在业务方法中获取Cookie的值。
@Controller
public class HelloController {
@RequestMapping(value = "hello")
public String Test(@CookieValue(value = "JACOB") String sessionId){
System.out.println("执行了Test方法");
System.out.println(sessionId);
return "index";
}
}
使用POJO绑定参数
spring MVC会根据请求参数名和POJO属性名进行匹配,自动为该对象填充属性值,并且支持属性级联。
(1)创建实体类Car
public class User {
private int id;
private String name;
//此处省略setter方法和toString方法
}
(2)创建addUser.jsp
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="addUser" method="post">
编号:<input type="text" name="id"/><br/>
姓名:<input type="text" name="name"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
(3)业务方法
@Controller
public class HelloController {
@RequestMapping("/addUser")
public String getPOJO(User user){
System.out.println(user);
return "index";
}
}
(4)运行
JSP页面的转发和重定向
spring MVC默认以转发的形式响应JSP,我们可以手动修改为重定向。
以下为转发形式:
@Controller
public class HelloController {
@RequestMapping("/redirectTest")
public String getPOJO(User user){
System.out.println(user);
return "forward:/index.jsp"; //可以不写forward,不写默认forward
}
}
可以看到请求前后,地址栏没有改变,实现了转发跳转。
以下为重定向形式:
@Controller
public class HelloController {
@RequestMapping("/redirectTest")
public String getPOJO(User user){
System.out.println(user);
return "redirect:/index.jsp"; //redirect不能省略
}
}
通过地址栏可以看到,地址改变,实现了重定向跳转。需要注意的是业务方法中,设置重定向不能写逻辑视图,必须写目标资源的物理路径,如“redirect:/index.jsp"。
总结
本篇总结了spring MVC常用注解的使用方法,主要应用与客户端到服务端的请求映射,包括请求路径,请求类型,请求参数等。完成了MVC设计模式中V(view)——C(controller)的映射,省去了在XML文件中复杂的映射配置。
分享交流
以上便是我对这一部分的理解,如果有错误或者你有其他疑惑都可以留言给出,我都会一一进行回复,希望对你有所帮助,如果写的不好也请您多多包涵。欢迎在下方补充留言哟。
对SSM框架感兴趣的童鞋,可以移步这里,在这里你可以快速的搭建好一个SSM框架。
如果你在写项目的时候,遇到一些不寻常的问题,也可以关注我的博客园,上边会发布一些我在写项目中遇到的各种问题以及解决方式。