SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解_第1页
SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解_第2页
SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解_第3页
SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解_第4页
SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第SpringMVC加载控制与Postmand的使用和Rest风格的引入及RestFul开发全面详解目录前言一.bean的加载控制二.容器加载1.createServletApplicationContext()方法2.createRootApplicationContext()方法3.getServletMappings()方法三.PostMan的引入1.发送GET请求2.发送POST请求3.中文乱码问题解决四.Rest风格1.REST简介2.RESTful传参3.RESTful简便形式(快速开发)4.放行静态资源

前言

从繁到简是贯彻SSM学习过程的原始真解

一.bean的加载控制

在MVC的模式中,Spring控制着业务和功能的bean,SpringMVC控制着表现层的bean,因为各自的作用不同,我们要避免Spring加载到SpringMVC控制的bean,如何实现?

方式一:

设定Spring的包扫描范围,排除表现层的bean所在的包

@ComponentScan({"com.yu7daily.service","com.yu7daily.dao"})

publicclassSpringConfig{...}

这样写的好处是可以适配所有的数据层技术通用性强,如果使用的是mybatis,他的自动代理为我们生成了对象可以不用扫描dao层对应的包

方式二:

按注解过滤掉bean,因为SpringMVC的配置类上存在@Controller注解,通过设置来过滤掉这个注解所在的类即可

@ComponentScan(value="com.yu7daily",

excludeFilters=@ComponentScan.Filter(

type=FilterType.ANNOTATION,

classes=Controller.class

//设置spring配置类加载bean时的过滤规则,当前要求排除掉表现层对应的bean

//excludeFilters属性:排除扫描路径中指定类别加载的bean

//type属性:设置排除规则,当前使用按照bean定义时的注解类型进行排除

//classes属性:设置排除的具体注解类,当前设置排除@Controller定义的bean

方式三:

将二者加载到同一个环境

二.容器加载

在web3.0中,提供了快速初始化web容器的方式继承AbstractDispatcherServletInitializer类并重写其方法

1.createServletApplicationContext()方法

创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,从而将WebApplicationContext的作用范围提升至ServletContext范围,即整个web容器范围

protectedWebApplicationContextcreateServletApplicationContext(){

AnnotationConfigWebApplicationContextctx=newAnnotationConfigWebApplicationContext();

ctx.register(SpringmvcConfig.class);

returnctx;

2.createRootApplicationContext()方法

创建servlet容器时需要加载非springMVC对应的bean

protectedWebApplicationContextcreateRootApplicationContext(){

AnnotationConfigWebApplicationContextctx=newAnnotationConfigWebApplicationContext();

ctx.register(SpringConfig.class);

returnctx;

3.getServletMappings()方法

设定SpringNc对应的请求映射路径,设置为/后表示拦截所有请求,任意请求都将转入到SpringMVC进行处理

protectedString[]getServletMappings(){returnnewString[]{"/"};}

这样每当我们启动服务器时,就会自动生成Spring和SpringMVC的容器,简化开发

上述不难发现,都是通过指定配置文件名来完成容器的加载,存在一定的硬编码问题,于是Spring为我们提供了更简单的加载方式继承AbstractAnnotationConfigDispatcherServletInitializer即可

代码量显著减少,这种方式更值得使用!

三.PostMan的引入

一般向浏览器发送get请求比较容易,但发送post请求我们得另写表单,发送ajax请求得另写JS代码,十分麻烦,PostMan的诞生很好地解决了这一问题

它主要是用来模拟各种HTTP请求的(如:get/post/delete/put等等).,而且与浏览器的区别在于有的浏览器不能输出Json格式,而Postman更直观接口返回的结果

1.发送GET请求

1.首先写好表现层

@RequestMapping("/commonParam")

@ResponseBody

publicStringcommonParam(Stringname,intage){

System.out.println("传递的参数为name=="+name);

System.out.println("普通参数传递age=="+age);

return"HelloSpringMVC";

2.在PostMan中发送请求

3.在IDEA中接收到了Postman发送过来的请求

2.发送POST请求

由于POST请求的参数处于请求体内,所以在Postman中要选择以body的形式发送

服务器端接受的数据如下:

3.中文乱码问题解决

当我将pyq改为懒羊羊后发送请求则会出现中文乱码问题

按照以往的套路,是在web服务器中添加一个过滤器即可,而在SpringMVC中将过滤器写在配置类中即可

@Override

protectedFilter[]getServletFilters(){

CharacterEncodingFilterfilter=newCharacterEncodingFilter();

filter.setEncoding("UTF-8");

returnnewFilter[]{filter};//若要配置多个过滤器,在数组中添加即可

四.Rest风格

1.REST简介

REST(RepresentationalStateTransfer),表现形式状态转换,它是一种软件架构风格,按照这种风格来访问资源则称之为RESTful

当我们想表示一个网络资源的时候,可以使用两种方式:

1.传统风格资源描述形式

http://localhost/user/getByIdid=1查询id为1的用户信息

http://localhost/user/saveUser保存用户信息

2.REST风格描述形式

http://localhost/user/1

http://localhost/user

传统方式一般是一个请求url对应一种操作,这样做不仅麻烦,也不安全,可以知道你进行的操作,使用rest风格后请求地址变的简单了,并且光看请求URL并不是很能猜出来该URL的具体功能

为了解决开发人员明白一个相同的url地址进行的是何种操作,按照REST风格访问资源时使用行为动作对资源操作进行了区分

http://localhost/users查询全部用户信息GET(查询)http://localhost/users/1查询指定用户信息GET(查询)http://localhost/users添加用户信息POST(新增/保存)http://localhost/users修改用户信息PUT(修改/更新)http://localhost/users/1删除用户信息DELETE(删除)

请求的方式比较多,但是比较常用的就4种,分别是GET,POST,PUT,DELETE。

按照不同的请求方式代表不同的操作类型。

发送GET请求是用来做查询发送POST请求是用来做新增发送PUT请求是用来做修改发送DELETE请求是用来做删除

值得注意的是:之所以称之为REST风格是因为只是一种风格而已,并不是规范,在实际开发中可以灵活变通,修改

2.RESTful传参

RESTful的传参方式稍微和上述有所不同,需要在@RequestMapping中指定请求行为和参数的名称,以post提交为例

@RequestMapping(value="/users/{age}",method=RequestMethod.POST)

@ResponseBody

publicStringsave(@PathVariableIntegerage){//@PathVariable表示此参数由路径传递

System.out.println("传参age");

return"HelloSpringMVC";

我们输入的路径相比之下就显得格外简洁,安全

同样也可以成功传送到服务器端

请求行为可以通过method灵活更改,但是设定好之后更改传递的方式就会报错,例如method=RequestMethod.POST却以GET的方式提交

@RequestParam用于接收url地址传参或表单传参(非json格式)@RequestBody用于接收json数据(传参数1)@PathVariable用于接收路径参数,使用{参数名称}描述路径参数(传参数较少)

@RequestParam、@RequestBody前面的文章有过介绍

3.RESTful简便形式(快速开发)

简化开发一般解决硬编码问题,例如:

每个方法的@RequestMapping注解中都定义了访问路径/books,@RequestMapping注解中都要使用method属性定义请求方式,响应json都需要加上@ResponseBody注解重复性太高

所以:

1.将@RequestMapping提到类上面,用来定义所有方法共同的访问路径。

2.使用@GetMapping@PostMapping@PutMapping@DeleteMapping代替,设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,例如@GetMapping对应GET请求

3.将ResponseBody提到类上面,让所有的方法都有@ResponseBody的功能

4.使用@RestController注解替换@Controller与@ResponseBody注解,简化书写

就先这样:

publicclassQQ{

@RestController//@Controller+ReponseBody

@RequestMapping("/goodss")

publicclassgoodsController{

@PostMapping

publicStringsave(@RequestBodyGoodsgoods){

System.out.println("goodssave..."+goods);

return"HelloSpringMVC";

@DeleteMapping("/{id}")

publicStringdelete(@PathVariableIntegerid){

System.out.println("goodsdelete..."+id);

return"HelloSpringMVC";

@PutMapping

publicStringupdate(@RequestBodyGoodsgoods){

System.out.println("goodsupdate..."+goods);

return"HelloSpringMVC";

@GetMapping("/{id}")

publicStringgetById(@PathVariableIntegerid){

System.out.println("goodsgetById..."+id);

return"HelloSpringMVC";

@GetMapping

publicStringgetAll(){

System.out.println("goodsgetAll...");

return"HelloSpringMVC";

硬编码问题得到了极大的改善!这就是Restful的极速开发

4.放行静态资源

protectedString[]getServletMappings(){!--{cke_protected}{C}%3C!%2D%2D%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论