Spring MVC (二)注解式开发使用详解
MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册.
只需在代码中通过对类与方法的注解, 即可完成注册.
定义处理器
@Controller: 当前类为处理器
@RequestMapping: 当前方法为处理器方法, 方法名随意, 对于请求进行处理与响应.
@Controller
public class MyController { @RequestMapping(value = "/hello.do")
public ModelAndView doControl(HttpServletRequest request,
HttpServletResponse response) {
ModelAndView mv = new ModelAndView();
mv.addObject("message", "执行方法");
mv.setViewName("welcome, neil!");
return mv;
} }
可以在RequestMapping对请求进行限制, 例如
@RequestMapping(value="/hello.do", params={"name=neil", "!age"}, method=RequestMethod.POST)
method=RequestMethod.POST 限定提交类型为POST
params={"name=neil", "!age"} 限定请求中必须携带参数name, 值为neil, 不可以携带参数age
接受请求参数
如果请求中参数名与处理器方法参数名一致, 那么可以直接获取.
@RequestMapping(value="/hello.do")
public ModelAndView doControll(String name, int age) {
System.out.println("Name : " + name + ", Age: " + age);
ModelAndView mv = new ModelAndView();
return mv;
}
如果参数名不一致, 则需要通过@RequestParam进行定位.
@RequestParam有三个属性
- name / value: 指定请求参数的名称.
- required: 参数是否必须, 若为false, 则表示参数有没有均可.
- defaultValue: 请求中没有携带参数时, 指定当前参数默认值.
doControll(@RequestParam(name = "username") String name, @RequestParam(name = "userage") int age)
路径变量@PathVariable
对处理器方法中的参数, 可以来自于请求携带的参数, 也可以来自于URI中的变量, 即路径变量.
与上述正常参数一样, 如果路径变量名与接收其值的参数名不一致, 则需要通过参数指出路径变量名称.
如下所示, 注意username与name, age与age.
@RequestMapping(value="/{username}/{age}/hello.do")
public ModelAndView doControll(@PathVariable("username") String name, @RequestParam int age) {
System.out.println("Name : " + name + ", Age: " + age);
ModelAndView mv = new ModelAndView();
return mv;
}
处理器方法返回值
使用@Controller注解的处理器, 其方法返回值常用的有如下四种:
- ModelAndView
- Void
- Object, 自定义类型对象
- String
1, 返回ModelAndView
处理器方法完成后, 需要跳转到其他资源, 且需要在跳转的资源之间传递数据, 则返回ModelAndView即可.
public ModelAndView doControll(){
ModelAndView modelAndView = new ModelAndView();
// 传递的数据
modelAndView.addObject("name", "neil");
modelAndView.setViewName("/user.do");
return modelAndView;
}
2, 返回Void
请求处理后, 无需跳转, 可以放处理器返回void, 例如Ajax异步请求响应.
如果需要跳转, 也可以通过操作ServletAPI进行sendRedirect或者forward.
3, 返回Object
处理器可以返回Object对象, 此时不是作为逻辑视图出现的, 而是直接在页面展示数据用的.
返回Object对象, 需要使用@ResponseBody注解, 将转换后的JSON数据放入响应体重.
@RequestMapping(value="/hello.do")
@ResponseBody
public ModelAndView doControll() {
return new Student("neil", );
}
前端获取到数据
FR.ajax({
url: "hello.do",
complete: function(data) {
alert(data.name + " " + data.age);
}
})
同样, 也可以返回集合List, Map等等.
@RequestMapping(value="/hello.do")
@ResponseBody
public ModelAndView doControll() {
List<Student> list = new ArrayList<Student>();
list.add(new Student("a", ));
list.add(new Student("b", ));
list.add(new Student("c", ));
return list;
}
前端获取到数据
FR.ajax({
url: "hello.do",
complete: function(data) {
$(data).each(function(index)) {
alert(data[index].name + data[index].age);
}
}
})
4, 返回String
返回字符串可能有以下三种场景:
- 逻辑视图名
- Redirect重定向
- Forward转发
逻辑视图名
处理器返回的字符串可以指定逻辑视图名, 通过视图解析器解析将其转为物理视图地址.
最终真实的访问路径=“前缀”+逻辑视图名+“后缀”

如果不指定前后缀, 也可以直接返回物理视图名, 如
return "/WEB-INF/admin/welcome.jsp"
Redirect重定向
return "redirect:/admin/next.action";
相当于response.sendRedirect(),转发后浏览器的地址栏变为转发后的地址.
由于新发起一个request,原来的参数在转发时就不能传递到下一个url,
如果要传参数可以在url后边拼接参数&a=1&b=2
Forward转发
return "forward:/admin/forward.action";
相当于request.getRequestDispatcher().forward(request,response), 转发后浏览器地址栏还是原来的地址。
转发并没有执行新的request和response,而是和转发前的请求共用一个request和response.
参数可以直接复用转发前的.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
文献来源于:https://www.jb51.net/article/136822.htm
您可能感兴趣的文章:
Spring MVC (二)注解式开发使用详解的更多相关文章
- 转载 Spring、Spring MVC、MyBatis整合文件配置详解
Spring.Spring MVC.MyBatis整合文件配置详解 使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. ...
- Spring MVC、MyBatis整合文件配置详解
Spring:http://spring.io/docs MyBatis:http://mybatis.github.io/mybatis-3/ Building a RESTful Web Serv ...
- Spring MVC拦截器(Interceptor )详解
处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. 常见应用场 ...
- Spring MVC 学习)——控制器与@RequestMapping详解
Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解 一.控制器定义 控制器提供访问应用程序的行为,通常通过服务接口定义或注解定义两种方法实现. 控制器解析用户的请求 ...
- spring MVC处理请求过程及配置详解
本文主要梳理下Spring MVC处理http请求的过程,以及配置servlet及业务application需要的常用标签,及其包含的意义. spring MVC处理请求过程 首先看一个整体图 简单说 ...
- spring纯java注解式开发(一)
习惯了用XML文件来配置spring,现在开始尝试使用纯java代码来配置spring. 其实,spring的纯java配置,简单来说就是将bean标签的内容通过注解转换成bean对象的过程,没什么神 ...
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
(转自:http://blog.csdn.net/walkerjong/article/details/7946109#) 引言: 接上一篇文章,对@RequestMapping进行地址映射讲解之后, ...
- Spring、Spring MVC、MyBatis整合文件配置详解
原文 http://www.cnblogs.com/wxisme/p/4924561.html 主题 MVC模式MyBatisSpring MVC 使用SSM框架做了几个小项目了,感觉还不错是时候总 ...
- 【转】Spring、Spring MVC、MyBatis整合文件配置详解
见:http://www.tuicool.com/articles/eyINveF web.xml的配置 web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经支持注解配置方式 ...
随机推荐
- laravel中遇到的坑
已经遇到的坑和未来可能遇到的坑都将在这里写出来: 在资源控制器中创建新的方法后(如果资源控制器中的7个方法无法满足你的需求时,你就会创建新的方法),接下来就是创建路由,这个时候注意了,你必须要把路由放 ...
- BZOJ 3060: [Poi2012]Tour de Byteotia 并查集
前 $k$ 个节点形成的结构必定是森林,而 $[k+1,r]$ 之间肯定是都连上,而剩下的一个在 $[1,k],$一个在 $[k+1,r]$ 的节点就能连多少连多少即可. Code: #include ...
- 未AC
Count the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- FZU 2231 平行四边形数
FZU - 2231 平行四边形数 题目大意:给你n个点,求能够组成多少个平行四边形? 首先想到的是判断两对边平行且相等,但这样的话得枚举四个顶点,或者把点转换成边然后再枚举所有边相等的麻烦,还不好 ...
- 日照学习提高班day4测试
A 思路: 一看到这个题,他不仅要求输出字典序最小的串,还要满足两两不重复,所以我们可以先输出ababab...什么的,最后缀上要求的k-2种字母 坑点: 当然这样想是不完全的!该题是拥有许多特殊情况 ...
- 灰度图像--图像增强 双边滤波 Bilateral Filtering
学习DIP第31天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不 ...
- 循环数组实现FIFO
涉及到数据通信的软件开发,不能回避的一点是,设计一个实用高效率的数据缓冲区,例如fifo.今天在做项目时候,需要缓存CAN总线上的数据,然后再需要的时候读这些数据.下边给出我自己设计的,采用循环数组实 ...
- Java集合框架系列大纲
###Java集合框架之简述 Java集合框架之Collection Java集合框架之Iterator Java集合框架之HashSet Java集合框架之TreeSet Java集合框架之Link ...
- 简单的SSRF的学习
自己眼中的SSRF 成因 服务端允许了 可以向其他服务器请求获取一些数据 通过各种协议 http https file等(外网服务器所在的内网进行端口的扫描指纹的识别等) 一SSRF配合redis未授 ...
- linux开启数据库远程连接
1.阿里云开启数据库端口 3306 2. 修改 Mysql-Server 用户配置 mysql -uroot -p(注意此用户必须要有最高级权限才行 默认root用户) mysql> USE m ...