• 发文
  • 评论
  • 微博
  • 空间
  • 微信

一篇文章彻底搞懂springMVC原理及执行流程

动力节点 2021-06-15 18:21 发文

SpringMVC 简介

SpringMVC 也叫 Spring web mvc。是 Spring 框架的一部分,是在Spring3.0 后发布的。

SpringMVC 优点

1. 基于MVC 架构

基于 MVC 架构,功能分工明确。解耦合,

2. 容易理解,上手快;使用简单。

就可以开发一个注解的 SpringMVC 项目,SpringMVC 也是轻量级的,jar 很小。不依赖的特定的接口和类。

3. 作为Spring 框架一部分,能够使用Spring 的IoC 和Aop。方便整合Strtus,MyBatis,Hiberate,JPA 等其他框架。

4. SpringMVC 强化注解的使用,在控制器,Service,Dao 都可以使用注解。方便灵活。使用@Controller 创建处理器对象,@Service 创建业务对象,@Autowired 或者@Resource 在控制器类中注入 Service, Service 类中注入Dao。

第一个注解的 SpringMVC 程序

所谓 SpringMVC 的注解式开发是指,在代码中通过对类与方法的注解, 便可完成处理器在springmvc 容器的注册。注解式开发是重点。

项目:primary-annotation

完成功能:用户提交一个请求,服务端处理器在接收到这个请求后,给出一条欢迎信息,在响应页面中显示该信息。

新建maven web 项目

pom.xml

在创建好web 项目后,加入 Servlet 依赖,SpringMVC 依赖

依赖:

插件:

注册中央调度器

(1) 全限定性类名

该中央调度器为一个 Servlet,名称为 DispatcherServlet。中央调度器的全限定性类名在导入的Jar 文件
spring-webmvc-5.2.5.RELEASE.jar 的第一个包org.springframework.web.servlet 下可找到。

(2) <load-on-startup/>

在<servlet/>中添加<load-on-startup/>的作用是,标记是否在Web 服务器(这里是 Tomcat)启动时会创建这个 Servlet 实例,即是否在Web 服务器启动时调用执行该 Servlet 的 init()方法,而不是在真正访问时才创建。

它的值必须是一个整数。

当值大于等于 0 时,表示容器在启动时就加载并初始化这个 servlet,数值越小,该Servlet 的优先级就越高,其被创建的也就越早;

当值小于 0 或者没有指定时,则表示该 Servlet 在真正被使用时才会去创建。

当值相同时,容器会自己选择创建顺序。

(3) <url-pattern/>

对于<url-pattern/>,可以写为 / ,建议写为*.do 的形式。

(4) 配置文件位置与名称

注册完毕后,可直接在服务器上发布运行。此时,访问浏览器页面,控制台均会抛出FileNotFoundException 异常。即默认要从项目根下的WEB-INF 目录下找名称为 Servlet 名称-servlet.xml 的配置文件。这里的“Servlet 名 称”指的是注册中央调度器<servlet-name/>标签中指定的 Servlet 的name 值。本例配置文件名为springmvc-servlet.xml。

而一般情况下,配置文件是放在类路径下,即resources 目录下。所以, 在注册中央调度器时,还需要为中央调度器设置查找 SpringMVC 配置文件路径,及文件名。

打开DispatcherServlet 的源码,其继承自FrameworkServlet,而该类中有一个属性 contextConfigLocation,用于设置 SpringMVC 配置文件的路径及文件名。该初始化参数的属性就来自于这里。

创建SpringMVC 配置文件

在工程的类路径即src 目录下创建 SpringMVC 的配置文件springmvc.xml。该文件名可以任意命名。

创建处理器

在类上与方法上添加相应注解即可。@Controller:表示当前类为处理器

@RequestMapping:表示当前方法为处理器方法。该方法要对 value 属性所指定的URI 进行处理与响应。被注解的方法的方法名可以随意。

若有多个请求路径均可匹配该处理器方法的执行,则@RequestMapping 的value 属性中可以写上一个数组。

ModelAndView 类中的addObject()方法用于向其 Model 中添加数据。Model 的底层为一个HashMap。

Model 中的数据存储在 request 作用域中,SringMVC 默认采用转发的方式跳转到视图,本次请求结束,模型中的数据被销毁。

声明组件扫描器

在springmvc.xml 中注册组件扫描器

定义目标页面

在webapp 目录下新建一个子目录jsp,在其中新建一个jsp 页面show.jsp。

修改视图解析器的注册

SpringMVC 框架为了避免对于请求资源路径与扩展名上的冗余,在视图解析器
InternalResouceViewResolver 中引入了请求的前辍与后辍。而ModelAndView 中只需给出要跳转页面的文件名即可,对于具体的文件路径与文件扩展名,视图解析器会自动完成拼接。

把show.jsp 文件放到 /WEB-INF/jsp/路径中

修改处理器

使用逻辑视图名称,show 是逻辑视图名称。

使用SpringMVC 框架 web 请求处理顺序

SpringMVC 的 MVC 组件

SpringMVC 执行流程

流程图

执行流程简单分析

(1) 浏览器提交请求到中央调度器

(2) 中央调度器直接将请求转给处理器映射器。

(3) 处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后返回给中央调度器。

(4) 中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。

(5) 处理器适配器调用执行处理器。

(6) 处理器将处理结果及要跳转的视图封装到一个对象 ModelAndView 中,并将其返回给处理器适配器。

(7) 处理器适配器直接将结果返回给中央调度器。

(8) 中央调度器调用视图解析器,将 ModelAndView 中的视图名称封装为视图对象。

(9) 视图解析器将封装了的视图对象返回给中央调度器

(10) 中央调度器调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。

(11) 中央调度器响应浏览器。

以上SpringMVC全套视频、资料可私信/评论免费获取哦~~~

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    动力节点

    始于2009年“口口相传的Jav...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码