Spring MVC常用注解说明

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能。
02     之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使用Spring自带的spring-webmvc组件来实现同样的功能,而且比之以前更简单。另外,还省掉了整合两个框架带来的不稳定因素。
03     对于Spring MVC框架,我主要讲一下它的常用注解,再结合一些示例进行说明,方便大家能够快速理解。
04     一、Spring MVC常用注解说明
05     @Controller
06     在类上面定义,表明该类为控制器,返回字符串与redirect:xxx
07     @RequestMapping
08     在类或方法上面使用此注解,设置URL访问地址。它有两个属性,value指定访问路径,method指定指定请求方式,请求方式在RequestMethod这个类中,全部以常量形式定义,它默认使用GET请求。
09     @RequestParam
10     指定Request请求参数,在方法参数中定义,相当于传统的request.getParameter()。
11     @PathVariable
12     获取URL访问路径变量,这是Spring MVC 3.0框架才加入的特性,基于RESTful风格的URL访问路径。
13     @ModelAttribute
14 全局式的方法,在一组URL访问路径中,每次都会执行,方法返回结果保存在module会话中。
15     @Service
16     在类上面定义,指定被注解的类是业务逻辑组件,如果不指定具体的Bean ID,则采用默认命名方式,即类名的首字母小写。之前在SSH2中,大象曾对Dao组件使用@Repository,本例只有业务层,所以就只用@Service注解。
17     @Autowired
18     IoC自动注入功能,替换以前的set写法,在SSH2中就已经开始使用了。
19     @Qualifier
20     对同一接口类有不同实现指定具体的实现类。
21     @ResponseBody
22     同样定义在方法上,Ajax调用声明,指定方法返回结果为Ajax回调函数结果。这是Spring MVC3.0框架中增加的一个新特性。
23     @InitBinder
24     初始化数据绑定与类型转换,将传入的参数转换为自定义类型,或者对参数进行自定义处理。
25     二、示例
26       
27     @RequestMapping在类名上面定义,相当于指定的URL是此控制器内的所有其它访问路径的父路径。如果在某个方法上面定义@RequestMapping注解,则相对于父路径来说,是其子路径。如果不定义value值,那么按父路径访问就会被默认执行。但请注意,默认的访问方式只能有一个。
28     对于UserController的list方法REST访问URL为http://localhost:8080/ssm3/user,而且它同时接收GET和POST两种请求。另外,Spring MVC 3.0有一个很灵活的特性,可以自定义方法参数。看看list方法,我设定了两个参数,一个Model,一个User对象。Model是用来渲染数据,生成页面用的。相当于request.setAttribute,你可以这样理解,但不能就这样认为,Model以及另一个ModelMap,都是作为视图模型传递参数的,它们的作用域为request。除此之外,你还可以定义HttpServletRequest、HttpServletResponse等等各种各样的参数。
29 如果一个类还要定义其它资源访问怎么办呢?请看下面的RoleController
30       
31     在RoleController上定义了全局路径/role,这样一来,对于和角色相关的资源都会以/role开头,比如创建角色/role/new;编辑角色/role/edit/{id}等等。
32     上图edit方法中的{id}写法,就是RESTful URL风格,与@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 MVC框架支持好几种返回格式,例如:String/JSON/XML等等。不过以这种格式的字符串值形式返回是最简便的一种方式,而且利用JavaScript解析也十分方便。页面调用的时候请用jQuery的$.ajax()这种原生方式来定义,这种写法不会出问题,也很灵活,而且其它几种方式最终也是调用它来完成请求。
38       
39     对于拥有相同的一组访问规则的URL,如果都需要获得相同的数据,则使用@ModelAttribute注解。以RoleController为例,上面这个注解与方法的含义,相当于是在它里面所有的访问路径方法中都调用这个写法:module.addAttribute(“allRoles”,roleService.getRoles())。也即,不管是访问create还是edit,都会执行preperList,都会获得allRoles这个List。
40       
41     注册自定义类型编辑器,在Spring MVC中,对于时间类型,框架不会自动帮你转换绑定,需要你自己来定义属性编辑器。除此之外,还可以对某些特殊字符进行转义符处理,都可以放在@InitBinder注解的方法中进行。如果所有的Controller都需要注册相同的属性编辑器,则可以实现WebBindingInitializer接口,定义一个全局的属性编辑器。
42     三、在web容器中部署
43     想要让Spring MVC框架帮助我们完成工作,就需要在Web容器中配置好它。
44       
45     DispatcherServlet是Spring MVC的核心,是处理一切请求转发的核心控制器。大象曾在本系列的第二篇文章中就详细描述了Spring MVC的流程结构,如果没什么印象的话请再去看看。
46     Spring MVC有一个默认规则,Web容器启动之后,会自动查找/WEB-INF/<servlet-name>.xml这个Spring类型的配置文件。如果想自定义配置文件路径,就按上面的写法,指定contextConfiglocation这个属性,大象采用maven构建项目,所以servlet-context.xml这个配置文件放在resource目录下。
47     四、MVC配置
48     Spring MVC 3.0对使用和配置作了较大的改进,除了提供注解来简化控制器的开发之外,在配置文件上面也进行了简化。
49       
50     基于Spring MVC注解的配置就是上面这两行,还有一种更简化的配置写法是只写这一句:<mvc:annotation-driven />就可以了,Spring启动的时候会自动注册上面这两个bean。为什么大象要在这里显示的注册两个bean呢?因为,我们在真正使用的时候,一般来说,使用默认的方式满足不了我们的系统或业务要求。比如拦截器,比如数据验证,比如返回消息格式转换等等一些自定义设置。他们都需要配置在这两个bean里面。因为本例是用来作为入门教程,所以这些东西都没有加进来。
51     DefaultAnnotationHandlerMapping这个类是将所有标注了@RequestMapping注解的Controller类,都放到了一个HandlerMapping对象中,当有请求时,就在这个对象中进行查找是否有与之匹配的路径,AnnotationMethodHandlerAdapter是管理所有@RequestMapping注解的方法。

转载于:https://my.oschina.net/zhanghaiyang/blog/594509

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu12.10中安装ati显卡驱动amd driver 13.1

1. 先安装依赖库 [plain] view plaincopyprint?sudo apt-get install build-essential cdbs dh-make dkms execstack dh-modaliases fakeroot libqtgui4 debhelper debconf libstdc6 dkms libqtgui4 libelfg0 linux-headers-generic 2. 如果是64位系统&#xff0c;需要安装3…

李洋疯狂C语言之用递归解决李白喝酒问题(二)

之前用递归求出了多少种情况&#xff0c;如果要打印出所有的结果&#xff0c;就需要一个数组来存放可能的情况&#xff1a; /****************************************************** 题目&#xff1a;“李白街上走&#xff0c;提壶去买酒&#xff0c;遇店加一倍&#xff0c;…

vue.js 三种方式安装 ( vue-cli ) 、安装详解、创建项目

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09;是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单…

C学习笔记:基础

C 语言是一种面向过程的高级语言。 运行速度与汇编语言编写的代码运行速度几乎一样。C 语言的源码文件扩展名为 .c 例如 hello.c 。 概述 C 语言有三套标准分别是 C89 C99 C11&#xff0c;目前最常用的是 C99 标准。 C 编译器&#xff0c;写在源文件中的源代码需要编译&#xf…

spring-boot

1,创建springboot 工程 2.导入你所需要的包, (这篇只是简单介绍一下,没导入太过复杂的包)Developer tools Sprig Boot DevTools LombokWed Spring Wed Starter 转载于:https://www.cnblogs.com/lxx-1843693653/p/11104622.html

李洋疯狂C语言之合法帧

题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来. 提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧 #include <stdio.h> #include <string.h> #include <stdlib.h>ch…

vuex 最简单、最详细的入门文档

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如果你在使用 vue.js , 那么我想你可能会对 vue 组件之间的通信感到崩溃 。 我在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时…

科目三路考操作要点

一踏&#xff08;离合器&#xff09;二挂&#xff08;挡&#xff09;三拨&#xff08;左转向灯&#xff09;四看&#xff08;左右镜及侧头观察周边情况&#xff09;五按&#xff08;喇叭&#xff09;六松&#xff08;闸&#xff0c;即手制动&#xff09; 在科目三考试途中的注…

10种顶级javascript框架比较-The Top 10 Javascript MVC Frameworks

转载于&#xff1a;http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/ Gordon L. Hempton是西雅图的一位黑客和设计师&#xff0c;他花费了几个月的时间研究和比较了12种流行的JavaScript MVC框架&#xff0c;并在博客中总结了每种框架的优缺点&am…

数据结构之顺序表(一)

有关顺序表&#xff0c;由于代码太长&#xff0c;我将分成2部分&#xff0c;这边是头文件SeqList.h和主函数&#xff1a; #ifndef __SEQLIST_H__ #define __SEQLIST_H__#define FALSE -1 #define TRUE 0#define INIT_SIZE 100 #define INCRESS_SIZE 20typedef int Seq…

centos7 安装 node.js 运行环境、卸载

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一.安装 1.进入官网下载最新版本 https://nodejs.org/en/ 选择下载后上传或直接使用wget下载 wget https://nodejs.org/dist/v8.11.…

白云山脚下的廉价菜-饮胜酒家

亚运将至&#xff0c;我们已经渐渐感受到那种气氛了&#xff0c;最明显就是搭公交车不用钱&#xff0c;我可以不再做那辆兜路的54路车&#xff0c;每天可以睡多10分钟&#xff0c;然后从家楼下转3趟车上班&#xff0c;重要部部都有位置坐&#xff0c;每天在路上都看到有好多好多…

科目三考试指南

正在准备科目三的您&#xff0c;对顺利通过考试有信心吗&#xff1f;今天&#xff0c;小编为大家带来科目三靠边停车技巧&#xff0c;通过讲解靠边停车考试要求&#xff0c;让学员更好地掌握相关技巧&#xff0c;希望能帮到大家。 靠边停车考试项目中规定&#xff0c;车前保险杠…

docker学习4-docker安装mysql环境

前言 docker安装mysql环境非常方便&#xff0c;简单的几步操作就可以了 拉取mysql镜像 先拉取mysql的镜像&#xff0c;可以在docker的镜像仓库找到不同TAG标签的版本https://hub.docker.com/_/mysql?tabtags 我这里选择mysql:5.7标签 [rootyoyo ~]# docker pull mysql:5.7 5.7…

数据结构之顺序表(二)

这是接着之前的剩下来的部分&#xff1a; #include <stdlib.h> #include "SeqList.h" #include <stdio.h>SeqList *Create_List() {//创建一个顺序表SeqList* s (SeqList*)malloc(sizeof(SeqList)/sizeof(char));if (NULL s){return NULL;}//初始化顺…

Dynamics CRM 2015 站点地图公告配置实体显示名称的变更

CRM更新2015后&#xff0c;在设置里找不到公告配置了 在原来的位置上你会东西一个叫活动源配置的东西&#xff0c;点开看后就是原来的公告配置。 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 转载于:https://www.cnblogs.com/VicTang/p/4799531…

解决:liunx 光标消失(显示光标)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 2个命令可以管控光标&#xff1a; 隐藏光标 &#xff1a; echo -e "\033[?25l" 显示光标 &#xff1a; echo -e "\0…

科​目​三​路​考​操​作​步​骤

科目三路考操作步骤 一、起步前五大操作顺序&#xff1a; 1.检查手制动是否拉紧 2.踩下离合器踏板&#xff0c;挂空挡 3.开汽车电源 4.轻踩油门&#xff08;电喷车不需要&#xff09;&#xff0c;接通马达 5.发动后&#xff0c;手马上离开 二、起步顺序6个步骤&…

漫谈微服务架构:什么是Spring Cloud,为何要选择Spring Cloud

Spring Cloud是基于Spring Boot的&#xff0c;因此还在使用SpringMVC的同学要先了解Spring Boot。先上一段官话&#xff0c;Spring Cloud是一个基于Spring Boot实现的云应用开发工具&#xff0c;它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、…

数据结构之头指针链表de三种插入方式(头插法,尾插法,在pos处插入)

1、头插法&#xff1a; 流程&#xff1a;1 &#xff0c;判断传入数据是否正确 2&#xff0c;如果正确则创建一个新的节点&#xff0c;并判断节点是否创建成功 3&#xff0c;然后给节点成员变量赋值 4&#xff0c;最后让新节点变为链表的第一个节点。 代码实现: // 链表的头插…