首页>>后端>>Spring->springmvc注解开发详解(spring mvc注解开发详解)

springmvc注解开发详解(spring mvc注解开发详解)

时间:2023-12-01 本站 点击:0

spring和springmvc的注解

Spring和Spring MVC的注解都非常多,这个很难几句话说清楚,

给你看下轻量级java web企业应用实战,主要就是讲SSM整合开发的这本书的部分目录。

6.6 请求映射与参数处理 510

6.6.1 HandlerMapping与处理映射 510

6.6.2 SimpleUrlHandlerMapping的功能与用法 511

6.6.3 @RequestMapping注解及其变体 512

6.6.4 处理方法允许的返回值类型 515

6.6.5 @RequestParam注解与MultiValueMap 516

6.6.6 使用@PathVariable获取路径变量的值 520

6.6.7 使用@PathVariable处理正则表达式 523

6.6.8 路径模式 524

6.6.9 使用@MatrixVariable处理Matrix变量 526

6.6.10 使用@RequestHeader获取请求头的值 529

6.6.11 异步处理 5306.6.12 使用DeferredResult支持异步处理 534

6.6.13 使用@ModelAttribute修饰方法本身 536

6.6.14 使用@ModelAttribute修饰方法参数 539

6.7 将数据传给视图页面 541

6.7.1 Model、ModelMap和RedirectAttributes 541

6.7.2 使用@SessionAttributes添加session属性 542

6.8 RESTful服务支持 544

6.8.1 RESTful简介 544

6.8.2 @RequestBody与@ResponseBody注解 546

6.8.3 HttpMessageConverter与消息转换 550

6.8.4 转换XML数据 553

6.8.5 使用@RestController修饰RESTful控制器 557

6.8.6 @CrossOrigin注解与跨域请求 557

看这目录你就知道你这个问题覆盖的内容多么丰富了。

spring mvc 常用注解详解

前言

现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。

Spring mvc 介绍

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发

image.png

spring mvc 常用注解详解

@Controller

在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 等一些注解用以定义请求URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。其标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。此外我们还需要将controller注册到spring里

@RequestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径,作用于方法上,表明该处理器的请求地址=父路径+方法上url+method,其拥有6个属性

1、 value, method;定义处理器访问的具体体质

value: 指定请求的实际地址,指定的地址可以是URI Template 模式;

method: 指定请求的method类型, GET、POST、PUT、DELETE等;

2、consumes,produces 定义处理器内容类型

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

3、params,headers 定义处理器处理类型

params: 指定request中必须包含某些参数值,才让该方法处理!

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

@PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:

@requestParam

@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

@ResponseBody

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json等)使用;

@RequestBody

该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

spring mvc 拦截器配置

preHandle:预处理回调方法,返回值:true表示继续流程,false表示流程中断(如登录检查失败),不会继续续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;

postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。

afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。

spring mvc 静态资源放问配置

image.png

spring mvc 文件上传

前端

后端

spring mvc 工作流程详解

image.png

1、 用户发送请求至前端控制器DispatcherServlet。

2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、 DispatcherServlet调用HandlerAdapter处理器适配器。

5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

6、 Controller执行完成返回ModelAndView。

7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

9、 ViewReslover解析后返回具体View。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11、 DispatcherServlet响应用户。

如果你也对Java架构比如分布式、微服务、源码分析、性能优化、高并发高可用等技术感兴趣可以在手机上面私信我,回复「架构」二字即可免费领取一套价值3880的架构资料哦。

springmvc的注解都有哪些

一、@Controller 控制层 ,通常我们所说的action层

Controller控制器是通过服务接口定义的提供访问应用程序的一种行为,它解释用户的输入,将其转换成一个模型然后将试图呈献给用户。Spring MVC 使用 @Controller 定义控制器,它还允许自动检测定义在类路径下的组件并自动注册。

二、@RequestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

RequestMapping注解有六个属性

value, method;consumes,produces;params,headers

三、@Resource和@Autowired

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

四、@ModelAttribute和 @SessionAttributes

代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。@SessionAttributes即将值放到session作用域中,写在class上面。

五、@PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。

六、@requestParam

@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue

= "0", required = false, value = "isApp";defaultValue 表示设置默认值,required

铜过boolean设置是否是必须要传入的参数,value

值表示接受的传入的参数类型。

七、@ResponseBody

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

八、@Component

相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。

九、@Repository

用于注解dao层,在daoImpl类上面注解。

【SpringMVC】MyBatis多表操作与注解开发

想象一下你在淘宝,在购买东西后会有个订单支付的页面,下单后用户和订单就关联起来了,同时订单有一个唯一的编号叫订单号。用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

即 order对user是一对一的,反过来,user对order是一对多的

select * ,o.id oid from orders o,user u where o.uid=u.id

这个查询结果看起来很怪,有很多个id,不着急,后面我们在进行配置文件的配置的时候可以将id忽略。

User和以前一样

测试

或者通过

association 标签配置user

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单

select *,o.id oid from user u,orders o where u.id = o.id

打印结果

再来假设一个场景,小明是一个学生,他同时是班干部和学生会的干部,而学生会干部可以有多个学生,这样学生和学生会干部表就构成了多对多的关系

用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用

多对多查询的需求:查询用户同时查询出该用户的所有角色

要实现这种多对多的关系,我们不仅需要role角色表,也需要一个中间表,用户和角色表之间的桥梁——用户id和角色id对应的表。

select u.*,r.*,r.id rid,u.id uid from user u left join user_role ur on u.id=ur.uid inner join role r on ur.rid=r.id

select * from user u,user_role ur,role r where u.id = ur.uid and ur.rid =r.id

User类添加

UserMapper接口添加

配置sqlMapperConfig.xml,给Role增加别名

这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。

我们先围绕一些基本的CRUD来学习,再学习复杂映射多表操作。

修改MyBatisTest.java,将公共操作抽取出来

删除了之后,我们没有了配置文件了呀,那怎么做呢。

我们之前在sqlMapperConfig.xml里面配置了

删除了之后我们就得加载映射关系,指定接口所在的包

没有问题!说明可以运行。

实现复杂关系映射之前我们可以在映射文件中通过配置resultMap来实现,使用注解开发后,我们可以使用

@Results注解,@Result注解,@One注解,@Many注解

组合完成复杂关系的配置

前面我们用配置文件的方式实现了order和user的一对多查询,同样的我们也可以使用注解实现。

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

对应的sql语句:

测试

两个都可以正常运行。

我们上面的查询方式是一次查两张表,但是我们也可以通过查order表获取uid,再通过uid去查user表,这种方法怎么实现呢?

不知道你还记不记得,前面我们使用了association进行order和user表的一对一查询的封装,前面图中提到了@One属性,就是它的一种替代

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单

可能这种方式用的比较多

对应的sql语句:

给OrderMapper.java增加一个查询方法

修改UserMapper.java

但是这种方法,其实是查到了所有的user,其中有些有orderList,原因在于这其实是一种按顺序的查询方式,先查了user表再查了order表

select *,o.id oid from user u,orders o where u.id = o.id 是不一样的

再来回顾一下多对多的查询

用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用

多对多查询的需求:查询用户同时查询出该用户的所有角色

对应的sql语句:

这样子,就有个很怪的问题,注解查询每次都返回了全部的user,我不需要这么多的user啊,我只想要和role关联的那几个user,这会是一个好的方法吗。

SpringMVC 部分注解

@RequsetMapping()注解 属性含义:

1.value=" "

2.method="RequestMethod.post/get"

3.params={"username=123"}

4.headers:规定请求头:和params能写简单的表达式

5.路径下的占位符

写法:在路径的地方写一个{变量名}

6. @RequestMapping("/a/{id}")

获取时通过 @pathVariable("id")String id 进行获取

7. @RequestParam() 参数 == request.getParams(" ")

8. @RequestHeader() 信息头参数 == request.getHeader(" ")

public String getHeader(@RequestParam("username")String username , @RequestHeader("User-Agent")String headInfo){}

9. @CookieValue :获取cookie的值:

10.提交数据中文乱码:

1). 请求乱码:

get请求:改Tomcat server.xml 在8080端口设置 URIEncoding="UTF-8"

Connector URIEncoding="UTF-8" connectionTimeout="20000" port="9989" protocol="HTTP/1.1" redirectPort="8443"/

post请求:修改web.xml

注意:配置的CharacterEncodingFilter 需要在其他Filter之前

2). 响应乱码:

response.setContentType("text/hxml,charset=utf-8)

spring mvc注解有哪些

@Controller

该注解用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象

@RequestMapping

该注解是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

@Resource和@Autowired

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

@ResponseBody 

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

@PathVariable

该注解用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。

@CookieValue

该注解用来获取Cookie中的值;

@RequestParam

该注解用于将请求参数区数据映射到功能处理方法的参数上


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