栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

框架---springmvc(尚马day67)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

框架---springmvc(尚马day67)

0608springmvc 1.复习servlet(重要)

2.springmvc作用

springmvc就是对servlet的封装,简化获取不同类型参数的代码,简化返回数据的代码,提高开发效率.

servlet一个url是映射到一个类上,一个类只能处理一个业务.

3.快速入门

springmvc是spring框架中的一个小模块.

  • 添加spring的核心包

  • 添加spring-web;spring-webmvc两个包

  • 添加jackson组件的三个包.此json组件是springmvc默认支持.不需要进行配置直接生效

  • 创建springmvc.xml配置文件

1.启用了包扫描IOC,DI
2.RequestMappingHandlerMapping对象解析@Controller对象下的RequestMapping注解进行url映射,并把解析结果保存Map
3.RequestMappingHandlerAdapter对象负责解析请求参数,执行处理器方法.
4.InternalResourceViewResolver对象,当处理器方法执行完成后返回ModelAndView对象,此时ViewResolver对象负责对ModelAndView进行解析,得到完整视图路径.

  • 在web.xml添加springmvc的核心控制器对象DispatcherServlet,加载springmvc.xml创建容器.

配置DispatcherServlet对象,称为核心控制器对象,前端控制器对象.
1.加载指定的xml文件,初始化WebApplicationContext容器对象;
2.所有用户请求都进入DispatcherServlet,负责解析url字符串,去查找请求url对应的HandlerMethod处理器方法;
3.找到处理器方法后,调用容器中的RequestMappingHandlerAdapter执行处理器方法,在执行方法之前,调用容器中的HttpMessageConverter消息转换对象来获取请求参数,并进行类型转换.

  • 创建springmvc的控制层对象

在@Controller注解的控制层对象中,可以使用springmvc的相关注解进行开发;
1.@RequestMapping 可以进行url映射,该注解使用在类或方法上
2.处理器方法中获取前端参数,参数类型是urlencoded(k=v&k=v),形参名与表单参数一致
3.处理器方法使用ModelAndView对象来封装返回给客户端的视图与数据

4.springmvc核心对象以及执行流程(重要)
  • 在启动tomcat服务器时,初始化DispatcherServlet对象,加载指定的xml配置文件初始化springmvc容器(WebApplicaitonContext),容器内有处理器映射器,适配器,视图解析器,消息转换器等对象.

  • 处理器映射器在容器初始化完成后,对Controller层的对象进行URL解析.把url字符串映射到处理器方法上.

  • 客户端向服务器发送请求,请求被SpringMVC前端控制器DispatcherServlet捕获;

  • DispatcherServlet对请求URL进行解析,得到请求资源标识符URI,然后根据URI去调用HandlerMapping获得该URI对应的HandlerMethod

  • DispatcherServlet根据获得的HandlerMethod,HandlerAdapter处理器适配器对象负责执行Handler

  • 在执行HandlerMethod之前,需要提取Request中的请求数据,填充Handler入参,开始执行Handler。在填充Handler的入参过程中,SpringMVC会调用HttpMessageConverter消息转换器对象获取request请求参数,并转型,封装对象,格式化.

  • 参数封装完成后,执行Handler,得到ModelAndView对象,返回DispatcherServlet.

  • DispatcherServlet.调用视图解析器对象,得到完整视图路径,得到视图对象.

  • 进行request转发(带数据)到对应视图,在视图层通过视图引擎技术来渲染数据.

流程图:

5.接收kv参数

实际开发中只有Get请求,才传递K=V格式的参数.

  • 在springmvc.xml中不再手工配置处理器映射器,适配器对象,使用mvc:annotation-driven


​
    
  • 简单类型参数获取,直接添加形参,形参名与表单参数名一致;不允许使用基本类型变量.

  • 日期Date类型获取,使用@DateTimeFormat指定日期格式

  • 复杂对象类型的形参,按照对象的成员变量名来获取参数

  • @RequestParam只能注解到简单类型的形参,用来给定默认值

6.接收json参数(重要)

查询请求用get,添加,更新,删除用post

post请求都采用json格式参数

  • 使用RequestBody注解对处理器方法的复杂对象形参进行注解,表示调用MappingJackson2HttpMessageConverter负责把json转目标类型对象

  • RequestBody注解在一个方法只能有一个,不能注解到简单类型上

  • 在实体类上的Date对象属性添加@JsonFormat指定日期格式与时区.

7.返回视图
  • springmvc容器中配置ViewResolver视图解析器对象,指定视图路径的统一前缀与后缀.

  • 处理器方法返回类型:ModelAndView,设置视图名即可;

8.返回json(重要)
第一种方式:@ResponseBody  //把处理器方法的返回值通过Jackson消息转换器转json字符串放响应体.此注解使用在类或方法上.(很少使用)
第二种方式:@RestController  //此注解是@Controller与ResponseBody的复合注解(经常使用)
第三种方式:方法返回值类型改为ResponseEntity对象(在文件下载时必用,因为此对象可以设置响应头)

小注意点:

@JsonInclude(JsonInclude.Include.NON_NULL)注解到类上,指定该类非空变量参与序列化json字符串.
@JsonFormat,jackson把Sysdept对象序列化为json字符串,把Date对象转指定格式的日期字符串.
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

9.乱码处理

GET请求:只支持在url后?k=v,这种请求无乱码.因为tomcat对url字符串按照utf-8编码进行处理.

POST请求:

  • 请求体数据格式k=v:存在中文乱码.因为tomcat对请求体的kv数据,读取时按照ISO-8859-1编码读取.


        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        characterEncodingFilter
        /*
 

  • 请求体数据格式json:不存在乱码.tomcat不对application/json数据进行读取,由jackson组件进行输入流读取,jackson组件默认编码格式UTF-8

在实际开发中,Get请求无乱码,Post请求发json数据,无乱码,因此CharacterEncodingFilter过滤器可以不配置.

10.关于servlet对象(重要)

HttpServletRequest:请求对象

HttpServletResponse:响应对象

HttpSession:会话对象

ServletContext:上下文对象,是全局唯一.

第一种方法:这种方法有缺点,只能在控制层的处理器方法中添加形参获取servlet对象,如果需要在其他层的对象需要操作servelt对象,就需要一层层的传递.

- 处理器方法加形参
- ServletContext对象不能添加进处理器方法的形参,需要通过request或session来获取

第二种方法:基于ThreadLocal线程变量封装了Servlet对象,在当前线程的任何一个对象中可以直接获取servlet对象.

11.限定请求方法(重要)
  • @RequestMapping(value = "dologin",method = RequestMethod.POST)
  • @GetMapping   限定get请求
    @PostMapping   限定post请求

总结:

springmvc执行流程

springmvc.xml配置文件中,使用mvc:annotation-driven启用springmvc注解识别.

@RequestMapping做第一层url映射

@GetMapping,@PostMapping做第二层url映射,注解到方法上,限定请求方法

@RequestBody注解处理器方法复杂对象形参.表示接收前端json字符串参数.

@RequestParam注解处理器方法简单类型形参,用来执行默认值.

@DateTimeFormat对k=v格式的请求参数进行日期格式化.注解Date对象上.

@JsonFormat对json格式的请求参数进行日期格式化,注解Date对象上.

@JsonInclude注解到返回前端的类上,指定非null参与序列化json字符串.

@ResponseBody注解到处理器类或处理器方法上,表示处理器方法的返回值通过json消息转换器转json字符串返回前端

@RestController注解到处理器类上,表示处理器方法的返回值通过json消息转换器转json字符串返回前端

ResponseEntity对象,用在处理器方法的返回值类型,该对象可以设置响应头,响应体,状态,一般用在文件下载接口处.

重要:

@GetMapping,

@PostMapping,

@RequestMapping,

@RequestBody,

@RestController,

ResponseEntity

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/970442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号