Spring MVC学习总结(2)——Spring MVC常用注解说明
|
02 |
之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使用Spring自带的spring-webmvc组件来实现同样的功能,而且比之以前更简单。另外,还省掉了整合两个框架带来的不稳定因素。 |
03 |
对于Spring |
04 |
一、Spring |
05 |
@Controller |
06 |
在类上面定义,表明该类为控制器,返回字符串与redirect:xxx |
07 |
@RequestMapping |
08 |
在类或方法上面使用此注解,设置URL访问地址。它有两个属性,value指定访问路径,method指定指定请求方式,请求方式在RequestMethod这个类中,全部以常量形式定义,它默认使用GET请求。 |
09 |
@RequestParam |
10 |
指定Request请求参数,在方法参数中定义,相当于传统的request.getParameter()。 |
11 |
@PathVariable |
12 |
获取URL访问路径变量,这是Spring3.0框架才加入的特性,基于RESTful风格的URL访问路径。 |
13 |
@ModelAttribute |
14 |
全局式的方法,在一组URL访问路径中,每次都会执行,方法返回结果保存在module会话中。 |
15 |
@Service |
16 |
在类上面定义,指定被注解的类是业务逻辑组件,如果不指定具体的Bean@Repository,本例只有业务层,所以就只用@Service注解。 |
17 |
@Autowired |
18 |
IoC自动注入功能,替换以前的set写法,在SSH2中就已经开始使用了。 |
19 |
@Qualifier |
20 |
对同一接口类有不同实现指定具体的实现类。 |
21 |
@ResponseBody |
22 |
同样定义在方法上,Ajax调用声明,指定方法返回结果为Ajax回调函数结果。这是Spring3.0框架中增加的一个新特性。 |
23 |
@InitBinder |
24 |
初始化数据绑定与类型转换,将传入的参数转换为自定义类型,或者对参数进行自定义处理。 |
25 |
二、示例 |
26 |
|
27 |
@RequestMapping在类名上面定义,相当于指定的URL是此控制器内的所有其它访问路径的父路径。如果在某个方法上面定义@RequestMapping注解,则相对于父路径来说,是其子路径。如果不定义value值,那么按父路径访问就会被默认执行。但请注意,默认的访问方式只能有一个。 |
28 |
对于UserController的list方法REST访问URL为http://localhost:8080/ssm3/user,而且它同时接收GET和POST两种请求。另外,Spring |
29 |
如果一个类还要定义其它资源访问怎么办呢?请看下面的RoleController |
30 |
|
31 |
在RoleController上定义了全局路径/role,这样一来,对于和角色相关的资源都会以/role开头,比如创建角色/role/new;编辑角色/role/edit/{id}等等。 |
32 |
上图edit方法中的{id}写法,就是RESTful@PathVariable搭配来一起实现该功能。它表示所请求的URL中,可以将变量值作为参数进行动态的传递。例如:http://localhost:8080/ssm3/role/edit/1,另外,除了可以用数字,还可以用字符串,还可以多定义几个变量:/role/edit/{id}/{type}等等。 |
33 |
每个方法的返回值,其实都对应着一个结果页面,这一点和struts2-convention这个插件很相像。本例使用FreeMarker模板引擎作为展示层,页面的后缀为.html,页面中除了标准的HTML之外,其余的数据填充,条件判断之类,都要用到FreeMarker指令。 |
34 |
对于save方法返回值写法表示的是重定向,相当于执行http://localhost:8080/ssm3/role,而这个URL对应的其实就是RoleController这个类里面list方法。如果要带上参数之类的,一定要符合所定义的REST资源路径才可以。 |
35 |
|
36 |
|
37 |
@ResponseBody用来标识Ajax方法调用,在上面这个方法中,用到了@RequestParam注解,它的作用就和request.getParameter("name")一样。Spring |
38 |
|
39 |
对于拥有相同的一组访问规则的URL,如果都需要获得相同的数据,则使用@ModelAttribute注解。以RoleController为例,上面这个注解与方法的含义,相当于是在它里面所有的访问路径方法中都调用这个写法:module.addAttribute(“allRoles”,roleService.getRoles())。也即,不管是访问create还是edit,都会执行preperList,都会获得allRoles这个List。 |
40 |
|
41 |
注册自定义类型编辑器,在Spring@InitBinder注解的方法中进行。如果所有的Controller都需要注册相同的属性编辑器,则可以实现WebBindingInitializer接口,定义一个全局的属性编辑器。 |
42 |
三、在web容器中部署 |
43 |
想要让Spring |
44 |
|
45 |
DispatcherServlet是Spring |
46 |
Spring |
47 |
四、MVC配置 |
48 |
Spring3.0对使用和配置作了较大的改进,除了提供注解来简化控制器的开发之外,在配置文件上面也进行了简化。 |
49 |
|
50 |
基于Spring |
51 |
DefaultAnnotationHandlerMapping这个类是将所有标注了@RequestMapping注解的Controller类,都放到了一个HandlerMapping对象中,当有请求时,就在这个对象中进行查找是否有与之匹配的路径,AnnotationMethodHandlerAdapter是管理所有@RequestMapping注解的方法。
详解:
@RestController :首先我们使用的是Spring 4的新注解 @RestController注解. 此注解避免了每个方法都要加上@ResponseBody注解。也就是说@RestController 自己戴上了 @ResponseBody注解,看以看作是 @Controller 和 @ResponseBody的结合体。 @RequestBody : 如果方法参数被 @RequestBody注解,Spring将绑定HTTP请求体到那个参数上。如果那样做,Spring将根据请求中的ACCEPT或者 Content-Type @ResponseBody : 如果方法加上了@ResponseBody注解,Spring返回值到响应体。如果这样做的话,Spring将根据请求中的 Content-Type ResponseEntity 是一个真实数据.它代表了整个 HTTP 响应(response). 你可以指定状态码、头信息和响应体。它包含你想要构建HTTP Response 的信息。 @PathVariable 此注解意味着一个方法参数应该绑定到一个url模板变量[在'{}'里的一个]中 一般来说你,要实现REST API in Spring 4 需要了解@RestController , @RequestBody, ResponseEntity 和 @PathVariable 这些注解 .另外, spring 也提供了一些支持类帮助你实现一些可定制化的东西。 MediaType : 带着 @RequestMapping 注解,通过特殊的控制器方法你可以额外指定,MediaType来生产或者消耗。 |
Spring MVC学习总结(2)——Spring MVC常用注解说明的更多相关文章
- Spring Boot 学习1-创建Spring Boot应用
如果使用Maven, 确保先安装好Maven再继续. 创建POM文件 在这里有两种方式: 继承Spring Boot parent的pom. 不继承. 继承Spring Boot pom 1 2 3 ...
- spring揭密学习笔记(1) --spring的由来
1.spring起源于在EJB暴露出各种严重问题的情况应运而生. Spring是于2003年兴起的一个轻量级的Java开发框架, Spring倡导一切从实际出发,以实用的态度来选择适合当前开发场景的解 ...
- 【Spring Boot学习之一】Spring Boot简介
环境 Java1.8 Spring Boot 1.3.2 一.Spring Boot特点1.使用java运行项目,内置tomcat,无需外部容器:2.减少XML配置,使用properties文件和注解 ...
- [ SSH框架 ] Spring框架学习之三(AOP开发和注解的使用)
一.Spring 使用 AspectJ 进行 AOP 的开发:注解的方式 1.1 引入相关的jar包 1.2 引入spring的配置文件 <?xml version="1.0" ...
- 【Spring Boot学习之四】Spring Boot事务管理
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.springboot整合事务事务分类:编程事务.声明事务(XML.注解),推荐使用注解方式,springboot默 ...
- 【Spring Boot学习之三】Spring Boot整合数据源
环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.Spring Boot整合Spring JDBC 1.pom.xml <project xmlns=&quo ...
- spring boot学习(3) SpringBoot 之MVC 支持
第一节:@RequestMapping 配置url 映射 第二节:@Controller 处理http 请求 转发到一个页面,以前是转发到jsp页面,现在使用freemarker: 在pom.xm ...
- Spring基础学习(一)—初识Spring
一.Spring的使用 1.导入jar包 2.编写实体类 Person.java public class Person{ private String name; public void say() ...
- Spring框架学习之--搭建spring框架
此文介绍搭建一个最最简单的spring框架的步骤 一.创建一个maven项目 二.在pom.xml文件中添加依赖导入spring框架运行需要的相关jar包 注意:在引入jar包之后会出现org.jun ...
- Spring Data Jpa (五)@Entity实例里面常用注解详解
详细介绍javax.persistence下面的Entity中常用的注解. 虽然Spring Data JPA已经帮我们对数据的操作封装得很好了,约定大于配置思想,帮我们默认了很多东西.JPA(Jav ...
随机推荐
- iOS 基础类解析 - NSString、NSMutableString
iOS 基础类解析 - NSString 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 ...
- MyBatis -- 对表进行增删改查(基于注解的实现)
1.MyBatis对数据库表进行增/删/改/查 前一篇使用基于XML的方式实现对数据库的增/删/改/查 以下我们来看怎么使用注解的方式实现对数据库表的增/删/改/查 1.1 首先须要定义映射sql的 ...
- 2498 IncDec Sequence
2498 IncDec Sequence 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 给 ...
- list.subList
import java.util.ArrayList;import java.util.List; public class Test2 { public static void main(St ...
- Ubuntu Linux 安装 .7z 解压和压缩文件
安装方法: sudo apt-get install p7zip 解压文件: 7z x manager.7z -r -o /home/xx解释如下:x 代表解压缩文件,并且是按原始目录解压(还有个参数 ...
- Rockchip平台TP驱动详解【转】
本文转载自:http://blog.csdn.net/encourage2011/article/details/51679332 本文描述在RK3126平台上添加一个新的TP驱动(gslx680驱动 ...
- Java获取路径中的文件名(正则表达式)
Java获取路径中的文件名(正则表达式) 目标 在这个路径中我想得到model2 /E:/2017-02-21--SoftWare/github/test/Java/poiDemo_word2exce ...
- C#可定制的数据库备份和恢复程序 (讲解流程)
可定制的数据库备份和恢复程序 tashanzhishi [原作] 关键字 数据库 备份 恢复 出处 在我们做数据库系统的程序时,经常需要为客户做一个数据库的备份和恢复程序,特别是对于一些非专业的数据库 ...
- SpringMVC使用POST方法传递数据,却出现Request method 'GET' not supported?
转自:https://segmentfault.com/q/1010000011245770 问题:没有使用get获取当前页面解决方案: @RequestMapping(value = " ...
- PCB Genesis增加点阵字 实现原理
我们采用Genesis增加点阵字时,用Genesis增加Canned Text即可,但奥宝中文不支持,且字符种类是有限的呀 不过没关系,没有自己造呀.在这里我分享一种增加点阵字的实现方法 一.通过代码 ...