【个人技术经验及开发技巧分享】 【个人技术经验及开发技巧分享】
首页
  • 操作系统初识
  • JAVA基础
  • JVM
  • 开发框架
  • Redis
  • Zookeeper
  • 消息中间件
  • 持久化
  • 算法
  • 网络
  • 系统架构
  • 并发编程
  • 框架
  • 开发杂货
  • 线上排查
  • 技巧备忘
  • 部署指南
  • 版本管理
  • 工作流程
  • 发版流程
  • 友情链接
  • 网站备忘
  • 在线工具
  • 学习
  • 各种云
  • 应用下载

Louis

首页
  • 操作系统初识
  • JAVA基础
  • JVM
  • 开发框架
  • Redis
  • Zookeeper
  • 消息中间件
  • 持久化
  • 算法
  • 网络
  • 系统架构
  • 并发编程
  • 框架
  • 开发杂货
  • 线上排查
  • 技巧备忘
  • 部署指南
  • 版本管理
  • 工作流程
  • 发版流程
  • 友情链接
  • 网站备忘
  • 在线工具
  • 学习
  • 各种云
  • 应用下载
  • 操作系统初识

  • JAVA基础

  • JVM

  • 开发框架

    • SpringMVC
      • 1 什么是SpringMVC?
      • 2 SpringMVC的执行流程
      • 3 过滤器和拦截器
        • 3.1 过滤器和拦截器对比
      • 3.2 执行流程
      • 4 SpringMVC常见问题
        • 4.1 SpringMVC怎么样设定重定向和转发的?
        • 4.2 SpringMVC常用的注解
        • 4.3 SpingMVC中控制器的注解
        • 4.3 POST及GET请求中文乱码问题
        • 4.4 SpringMVC控制器是不是单例?有什么问题?
        • 4.5 拦截请求中,怎么拦截get方式提交的方法?
        • 4.6 怎样在方法里面得到Request,或者Session?
    • Spring
    • Mybatis
    • Sentinel
    • Spring Security Oauth2
    • SpringBoot
    • Spring Cloud Gateway
  • Redis

  • Zookeeper

  • 消息中间件

  • 持久化

  • 算法

  • 网络

  • 系统架构

  • 学习笔记
  • 开发框架
luoxiaofeng
2022-05-07
目录

SpringMVC

# 1 什么是SpringMVC?

SpringMVC是一个轻量级的web框架。

SpringMVC把web应用分成几个清晰的模块,分别是model、view、controller。

SpringMVC可以使用各种视图技术,不仅仅局限于jsp。

# 2 SpringMVC的执行流程

1.客户端发送请求到前端控制器DispatcheServlet。

2.DispatcheServlet通过处理器映射器HandlerMapping获取处理器Handler。(处理器映射器返回处理器执行链,包含处理器Handler和拦截器HandlerInterceptor)。

3.DispatcheServlet通过处理器适配器HandlerAdapter执行Handler。(Handler也就是controller)

4.Handler执行完后返回ModelAndView给到DispatcheServlet。

5.DispatcheServlet将ModelAndView传给ViewResolver(视图解析器)做解析。

6.ViewResolver(视图解析器)解析完返回View视图对象给到DispatcherServlet。

7.DispatcherServlet把Model数据填充到View试图对象中。

8.响应用户。

# 3 过滤器和拦截器

# 3.1 过滤器和拦截器对比

两者都是AOP编程思想的实现,都能够实现权限控制和日志记录等问题的处理,但是两者粒度不同拦截对象不一样。

  1. 适用范围不同:Filter是servlet的规范,只能用于web程序,但是拦截器可以用于application等程序。

  2. 规范不同:Filter是servlet的规范。但是Interceptor是spring容器支撑,有spring框架支持。

  3. 使用资源不一样:spring的拦截器由于依赖spring,也是spring的一个组件,因此能够在拦截器中使用spring的任何资源和对象。例如service对象,数据源,事务管理等,通过ioc注入拦截器即可,而filter不能。

  4. 粒度不同:Filter只能在servlet的前后起作用,而拦截器能在方法前后异常前后执行,更加灵活,粒度更小,spring框架程序优先使用拦截器。

# 3.2 执行流程

image-20221021183058185

image-20221021183124873

# 4 SpringMVC常见问题

# 4.1 SpringMVC怎么样设定重定向和转发的?

(1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"

(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"

# 4.2 SpringMVC常用的注解

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

@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。

# 4.3 SpingMVC中控制器的注解

一般用@Controller注解,也可以使用@RestController。

@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。

# 4.3 POST及GET请求中文乱码问题

(1)解决post请求乱码问题:

在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8。

(2)get请求中文参数出现乱码解决方法有两个:

① 修改tomcat配置文件添加编码与工程编码一致,如下:

② 另外一种方法对参数进行重新编码:

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

# 4.4 SpringMVC控制器是不是单例?有什么问题?

1.是单例模式。

2.在多线程访问的时候有线程安全问题。

3.解决方案是在控制器里面不能写可变状态量,如果需要这些可变状态,可以使用ThreadLocal机制解决,为每个线程单独生成一份变量副本,独立操作,互不影响。

# 4.5 拦截请求中,怎么拦截get方式提交的方法?

可以在@RequestMapping注解里面加上method=RequestMethod.GET。

# 4.6 怎样在方法里面得到Request,或者Session?

直接在方法的形参中声明request,SpringMvc就自动把request对象传入。

#SpringMVC
生产配置示例
Spring

← 生产配置示例 Spring→

最近更新
01
SpringBoot
10-21
02
Spring
10-20
03
Sentinel
10-14
更多文章>
Copyright © 2022-2023 Louis | 粤ICP备2022060093号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式