SpringMVC的运行流程(一)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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 视图即可。


谢谢!!!


相关文章
|
6月前
|
Java 持续交付 Maven
Spring Boot程序的打包与运行:构建高效部署流程
构建高效的Spring Boot部署流程对于保障应用的快速、稳定上线至关重要。通过采用上述策略,您可以确保部署过程的自动化、可靠性和高效性,从而将专注点放在开发上面。无论是通过Maven的生命周期命令进行打包,还是通过容器技术对部署过程进行优化,选择正确的工具与实践是成功实现这一目标的关键。
231 2
|
7月前
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
60 3
|
8月前
|
JSON 前端开发 Java
SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
53 2
|
JSON 数据格式 容器
SpringMVC运行流程分析之核心流程
SpringMVC运行流程分析之核心流程
37 0
|
内存技术
SpringMVC运行流程分析之前置流程
SpringMVC运行流程分析之前置流程
56 0
|
设计模式 XML JSON
SpringMVC启动流程&运行流程&解决乱码问题
SpringMVC启动流程&运行流程&解决乱码问题
149 3
|
设计模式 XML JSON
springMVC 工作原理和流程
springMVC 工作原理和流程
107 0
springMVC 工作原理和流程
|
Java 应用服务中间件
关于SpringMVC运行项目时出现404错误
404错误一般是没找到对应的资源,这时候你就应该去找资源有没有缺失,或者资源放错位置了,再或者读取资源出现错误。500错误是服务器错误, 一般是你的逻辑代码可能出现了问题。401错误一般为没有相应的权限。400错误是请求错误,检查一下请求的格式有没有问题。405错误一般就是前后端get和post方法不一致造成的。
243 0
|
JSON Java 数据格式
SpringBoot统一异常处理流程
SpringBoot统一异常处理流程
146 0
SpringBoot统一异常处理流程
|
XML 缓存 Java
项目中工作流部署详细解析!Spring中部署Activiti流程定义的三种姿势
本文对工作流Activiti框架中流程定义的部署进行了详细说明介绍。介绍了工作流Activiti框架中业务流程部署的两种方式,包括编程式部署以及通过Activiti Explorer控制台部署。介绍了流程部署时需要使用到的外部资源,流程定义部署不同的版本生成不同的流程定义的图片。通过这篇文章,基本上对工作流Activiti框架中流程定义的部署就可以很熟练了。
473 0
项目中工作流部署详细解析!Spring中部署Activiti流程定义的三种姿势