SpringMVC随笔——理解注解
来源:互联网 发布:2016中超联赛助攻数据 编辑:程序博客网 时间:2024/05/17 22:10
SpringMVC注解笔记
一、处理URL的方式
1.每个Controller请求处理对应多个URL
import com.baobaotao.service.BbtForumService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller //将一个类成为 Spring 容器的 Beanpublic class MyController { @Autowired private MyController myController; /*1.一个Controller处理多个URL,即将类MyController MultiActionController,而不需要像以前一样继承继承SimpleFormController 或 MultiActionController 来定义自己的 Controller 的 *2.第一个URL:/first.do的URL处理由方法first(无参数)处理 *3.第二个URL:/second.do?num=1的URL处理由方法second(有参数要入参,格式为:?parm=XXX)处理 */ @RequestMapping("/first.do") public String first() { System.out.println("call first method."); return "first"; } @RequestMapping("/second.do") public String second(int num){ System.out.println(num); System.out.println("call second method."); return "second"; }}
2.每个Controller处理请求请求一个URL
import com.baobaotao.service.BbtForumService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller //将一个类成为 Spring 容器的 Bean@RequestMapping("/myController.do")public class MyController { @Autowired private MyController myController; /*1.@RequestMapping("/myController.do")指定Controller对应的URL请求 *2.如果url中包括:method=first参数,则由方法first负责, 即:/myController.do?method=first *3.如果url中包括:method=second?num=xxx参数,则由方法second负责,即:/myController.do?method=second&num=1 */ @RequestMapping(params = "method=first") public String first() { System.out.println("call first method."); return "first"; } @RequestMapping(params = "method=second") public String second(int num){ System.out.println(num); System.out.println("call second method."); return "second"; }}
3.请求处理方法可以处理特定的HTTP请求方法
@Controller //将一个类成为 Spring 容器的 Bean@RequestMapping("/myController.do")public class MyController { @Autowired private MyController myController; /* *1.当请求以http POST方式请求时,方法first负责处理 *2.当请求以http GET方式请求时,方法second负责处理 */ @RequestMapping(params = "method=first",method = RequestMethod.POST) public String first() { System.out.println("call first method."); return "first"; @RequestMapping(params = "method=second",method="RequestMethod.GET") public String second(int num){ System.out.println(num); System.out.println("call second method."); return "second"; } }
二、通过URL如何将处理方法中的参数绑定
1.按参数名匹配进行绑定
@RequestMapping(params = "method=second") public String second(int num) { System.out.println(num); System.out.println("call second method."); return "second"; }
当URL为http:localhot:8080//myController.do?method=second?num=1的请求时,需要关注发生以下的几点:
- 方法second会处理url中method=second的请求
- 同时num =1的请求参数在类型转换后绑定到 second() 方法的num 入参上
- 最后方法second返回的是String类型的“second”,它是被解析为逻辑视图的名称,即ModelAndView类型
- 另外如果是基本数据类型,URL请求都会有对应的参数绑定在方法中的参数上
2.可以将JavaBean作为URL的绑定入参
JavaBean的属性与方法:
/** * @author Lijian * */public class Person{ // 这里的属性必须跟数据库中字段要一致,必须对应 private int id; private String name; private int age; /* * 这里getter/setter方法以及toString都可以自动生成 */ public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; }}
将JavaBean作为参数传入方法second中:
@RequestMapping(params = "method=second") public String second(int num,Person person) { System.out.println("num "+num); System.out.println("Person "+person); System.out.println("call second method."); return "second"; }
这时候的URL应该为:
http:localhot:8080//myController.do?method=second?num=1&id=1&name=Lijian&age=22
其中id、name、age为person的属性与方法second中person属性绑定。如果此时url中没有id,Spring也不会报错,会默认person.id值为0
3.注解@RequestParam指定绑定的参数
比如我们需要将second(int num,Person person)中参数num绑定在URL中的id参数上,就可以使用@RequestParam来实现
@RequestMapping(params = "method=second") public String second(@RequestParam("id") int num,Person person) { System.out.println("num "+num); System.out.println("Person "+person); System.out.println("call second method."); return "second"; }
这里,对 second() 请求处理方法的入参标注了 @RequestParam(“id”) 注解,所以它将和 id 的 URL 参数绑定。
4.使用ModelMap访问请示对应的隐含模型对象
我们每次请求模型对象时,其所有属性都会在request的属性列表中,就比如下面的例子所示,ModelMap的属性currPerson通过addAttribute()方法放到request的属性列表中。最后可以JSP视图中request.getAttribute(“currPerson”)(或者EL语言:${currPerson})访问到person对象。
@RequestMapping(params = "method=second") public String second(@RequestParam("id") int num,Person person,ModelMap model) { System.out.println("num "+num); System.out.println("Person "+person); //将person对象以currPerson为键值放入model中 model.addAttribute("currPerson",Person) System.out.println("call second method."); return "second"; }
但是ModelMap的属性currPerson等在默认的情况下都是request作用域,每次请求结束后,相应的属性将销毁不复存在,但是如果需要共享ModelMap中的属性,就需要将属性放到session缓存,就可以做到多请求访问。
5.使ModelMap中的属性具有Session作用域
@Controller@RequestMapping("/myController.do")@SessionAttributes("currPerson") //将ModelMap中属性名为currPerson的属性,并放到Session属性列表中,这样可以多请求共享。public class myController {@RequestMapping(params = "method=second") public String second(@RequestParam("id") int num,Person person,ModelMap model) { System.out.println("num "+num); System.out.println("Person "+person); //将person对象以currPerson为键值放入model中 model.addAttribute("currPerson",Person) System.out.println("call second method."); return "second"; }
最后,总结SpringMVC注解的几点好处
- Controller不需要继承其他任何的接口,它只是个POJO(Plain Old Java Objects,简单的Java对象,实际就是普通JavaBeans,POJO不担当任何特殊的角色,也不实现任何特殊的Java框架的接口)
- 对URL的请求很方便进行分发与处理;
- 很好地通过URL绑定请求处理方法的参数,进行入参;
- 请求与Controller之间的映射更为明确,方便开发;
- SpringMVC随笔——理解注解
- SpringMVC—注解方式
- SpringMVC简单入门(注解)<学习随笔>
- springMVC注解——@Autowired
- springMVC注解——@Transactional
- SpringMVC注解——@Scheduled
- SpringMVC随笔——扫描包使用
- SpringMVC随笔——认识ModelAndView
- SpringMVC随笔——认识拦截器
- springMVC—注解开发实例
- SpringMVC—相关注解介绍
- SpringMVC 自己写注解,理解注解
- 对SpringMVC的@ResponseBody注解的理解
- SpringMVC——注解类型(一)
- SpringMVC——非注解版
- springMVC笔记系列——RequestParam注解
- springmvc注解开发——Springmvc总结(二)
- 学习SpringMVC——通过注解使用SpringMVC
- asp 数据合并 排序 提取 批量查询 超级实用小工具
- S32K144 EVB之Bootloader
- Quartz时间配置
- java 别名现象
- 项目开发中,结构设计的常用工具类
- SpringMVC随笔——理解注解
- spark启动过程sparkconf实例化
- sort
- SQL注入
- 线性回归、局部加权线性回归、岭回归、lasso及逐步线性回归
- Linux ubuntu tar分包压缩方法
- 字母图形
- Word打开文档
- 文章标题