SpringMVC的运行流程(一)

白发戴花君莫笑,岁月从不败美人。 愿,像你我一如既往地好看。

上一章简单介绍了MyBatis的pageHelper分页插件的使用(十五),如果没有看过,请观看上一章

这节主要是牵扯到SpingMVC的理论知识,不太理解这一块,故参考了黑马视频关于SpringMVC 的课堂笔记。

SpringMVC 是Spring FrameWork 的其中一个模块,如果不了解Spring 的话,可以观看老蝴蝶以前写的Spring系列知识。

Spring的"两个蝴蝶飞,你好"的简单开发(一)](https://blog.csdn.net/yjltx1234csdn/article/details/89284325)。

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

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

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

在这里插入图片描述

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

  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模式

有图片。

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 模式

有图片。

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 视图即可。

谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两个蝴蝶飞

你的鼓励,是老蝴蝶更努力写作的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值