SpringMVC的运行流程(一)

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: SpringMVC的运行流程(一)

一. MVC 模式(传统 JSP+Servlet)


MVC 是Web 开发中常用的一种设计模式, MVC 指的是 Model(模型), View(视图) Controller( 控制器)。


在使用框架之前,也就是之前的 JSP+Servlet 时代时,

MVC 的常常使用是:

20190725184013763.png

执行流程可以简单理解为:


  1. 用户发送请求,如 user/list     查询员工的所有列表
  2. 控制器进行接收, 控制器是Servlet 提供的, 通过在web.xml 中进行配置 servlet 器


<servlet>
    <servlet-name>userServlet</servlet-name>
    <servlet-class>com.yjl.servlet.UserServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>userServlet</servlet-name>
      <url-pattern>/user</url-pattern>
  </servlet-mapping>


来达到 根据 /user 可以 来找到对应的UserServlet 这个模型类。 可以通过传参如 method=list 来确定找的是list() 这个方法。


3 . 在模型 Model 层中, 通过持久化 查询数据库 dao 来找到集合,如List<User> 将数据结果封装到 JavaBean 里面。


4 . 在Model 中,通过request, 或者是response 进行相应的转发和重定向 来到达视图 list.jsp


    request.setAttribute("userList",userList);
    request.getRequestDispatcher("/user/list.jsp").forward(request,reponse);


5 . 在视图中, 将userList 进行遍历解析,展示在jsp 页面上。


6 . jsp 页面进行响应,返回给浏览器。 浏览器经过解析,展示在用户。


二. Struts2的 MVC模式


20190729163644249.png


1 . 用户发送请求,如 user/list, 查询员工的所有列表


2 . 控制器进行接收 , 其中控制器是Struts2 提供的,需要在web.xml 中进行相应的配置


 <!-- 配置struts2的过滤器 -->
  <filter>
      <filter-name>struts</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>struts</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>


并且在struts.xml 配置文件中进行相应的配置,来确定到达的Model 是 UserAction 类,执行的是 list() 的方法。


3 . 在Model 中,查询数据库 dao,封装到JavaBean 里面。 存储到值栈里面。 返回的是 “list” 字符串。


4 . 控制器接收到list, 通过result 进行判断,来准确的知道 返回的是 user/list.jsp 的页面。


5 . 到list.jsp 页面,从值栈中,如通过OGNL 或者是EL 来取出结果,展示在jsp页面上。


6 . 在jsp页面进行响应,返回给浏览器,浏览器经过解析,展示给用户。


这就是Struts2 的基本过程。 具体可以看以前写的Struts2 系列。


三. SpringMVC 的MVC 模式


20190729163653738.png


SpringMVC 是非常有趣的,也是本系列要讲的。


在图片中,有前端控制器, 控制器映射器,控制器适配器, 视图解析器等名词,会慢慢解释这些。


1 . 用户发送请求, 前端控制器 DispatcherServlet 进行接收。 如user/list.action


2 . 前端控制器DispatcherServlet 请求 处理器映射器 HandlerMapping, 根据请求的路径,查找对应的 Handler .


可以根据 xml 查找,也可以根据注解配置查找。


3 . 处理器映射器 查找出来以后,将结果 Handler (是一个处理链) 返回给 DispatcherServlet


4 . 前端控制器 调用 处理器适配器 HandlerAdapter 去执行相应的 Handler, 即第3步的返回结果。


5 . 处理器适配器执行相应的Handler, 如 UserAction , Action 中有相应的业务逻辑,持久化dao等。


6 . Handler 处理完成后,将结果 ModelAndView 返回给处理器适配器


7 . 处理器适配器 将结果ModelAndView 返回给前端控制器, 是第六步的接收结果。 包括Model 数据结果 和View 视图。


8 . 前端控制器 请求视图解析器进行视图解析, 根据逻辑视图名解析成真正的视图(.jsp的形式)


9 . 视图解析器 向前端控制器返回处理后的结果 view 视图。


10 . 前端控制器进行视图渲染,渲染第九步的.jsp页面, 将ModelAndView 中的Model 模型填充到request 域中。


11 . 前端控制器向用户响应结果 。


很多的操作都是由前端控制器来完成的。 幸运的是,SpringMVC 已经提供了这个前端控制器。


其中, 不仅仅是前端控制器, 处理器映射器(HandlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver) 均不需要程序员自己开发, 我们只需要写 Handler 和对应的View 视图即可。


谢谢!!!


相关文章
|
1月前
|
JSON 前端开发 Java
SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
20 2
|
7月前
|
JSON 数据格式 容器
SpringMVC运行流程分析之核心流程
SpringMVC运行流程分析之核心流程
21 0
|
6月前
|
内存技术
SpringMVC运行流程分析之前置流程
SpringMVC运行流程分析之前置流程
30 0
|
10月前
|
Java Spring
【SpringBoot】统一异常管理配置
【SpringBoot】统一异常管理配置
96 0
【SpringBoot】统一异常管理配置
|
11月前
|
设计模式 XML JSON
SpringMVC启动流程&运行流程&解决乱码问题
SpringMVC启动流程&运行流程&解决乱码问题
103 3
|
设计模式 XML JSON
springMVC 工作原理和流程
springMVC 工作原理和流程
77 0
springMVC 工作原理和流程
|
安全 Java 程序员
SpringBoot中如何实现业务校验,这种方式才叫优雅!
SpringBoot中如何实现业务校验,这种方式才叫优雅!
144 0
|
Java 应用服务中间件
关于SpringMVC运行项目时出现404错误
404错误一般是没找到对应的资源,这时候你就应该去找资源有没有缺失,或者资源放错位置了,再或者读取资源出现错误。500错误是服务器错误, 一般是你的逻辑代码可能出现了问题。401错误一般为没有相应的权限。400错误是请求错误,检查一下请求的格式有没有问题。405错误一般就是前后端get和post方法不一致造成的。
181 0
SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(七)
SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(七)
112 1
SPRIN06_源码之核心组件接口BeanDefinition、Debug创建流程、流程图总结(七)
|
Java API 前端开发
SpringBoot前后分离项目实现自定义登录拦截
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82696896 ...
2124 0