服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 老师问我 Spring MVC 的工作流程

老师问我 Spring MVC 的工作流程

2021-11-01 22:24程序员千羽 Java教程

Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。

老师问我 Spring MVC 的工作流程

GitHub:https://github.com/nateshao/ssm/tree/master/106-springmvc-hello

老师问我 Spring MVC 的工作流程

1. Spring MVC概述

什么是Spring MVC?

Spring MVC是Spring提供的一个实现了Web MVC设计模式的轻量级Web框架。它与Struts2框架一样,都属于MVC框架,但其使用和性能等方面比Struts2更加优异。

Spring MVC具有以下特点:

  1. 是Spring框架的一部分,可以方便的利用Spring所提供的其他功能。
  2. 灵活性强,易于与其他框架集成。
  3. 提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象。
  4. 可自动绑定用户输入,并能正确的转换数据类型。
  5. 内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。
  6. 支持国际化。可以根据用户区域显示多国语言。
  7. 支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术。
  8. 使用基于XML的配置文件,在编辑后,不需要重新编译应用程序。

2. 第一个Spring MVC应用

在IDEA中,创建一个名称为106-springmvc-hello的Web项目,具体参考:https://github.com/nateshao/ssm/tree/master/106-springmvc-hello

在web.xml中,配置Spring MVC的前端控制器DispatcherServlet。

老师问我 Spring MVC 的工作流程

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
  5.          version="4.0"
  6.     <context-param> 
  7.         <param-name>contextConfigLocation</param-name
  8.         <param-value>/WEB-INF/applicationContext.xml</param-value> 
  9.     </context-param> 
  10.     <listener> 
  11.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
  12.     </listener> 
  13.     <servlet> 
  14.         <servlet-name>dispatcher</servlet-name
  15.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  16.         <load-on-startup>1</load-on-startup> 
  17.     </servlet> 
  18.     <servlet-mapping> 
  19.         <servlet-name>dispatcher</servlet-name
  20. <!--        <url-pattern>*.form</url-pattern>--> 
  21.         <url-pattern>/</url-pattern> 
  22.     </servlet-mapping> 
  23. </web-app> 

dispatcher-servlet.xml

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.        xmlns:context="http://www.springframework.org/schema/context" 
  5.        xmlns:mvc="http://www.springframework.org/schema/mvc" 
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"
  7.  
  8.     <context:component-scan base-package="com.nateshao"/> 
  9.     <mvc:default-servlet-handler/> 
  10.     <mvc:annotation-driven/> 
  11.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
  12.           id="internalResourceViewResolver"
  13.         <property name="prefix" value="/WEB-INF/jsp/"/> 
  14.         <property name="suffix" value=".jsp"/> 
  15.     </bean> 
  16. </beans> 

 

 

hello.jsp

  1. <%-- 
  2.   Created by IntelliJ IDEA. 
  3.   User: 邵桐杰 
  4.   Date: 2021/10/16 
  5.   Time: 16:13 
  6.   To change this template use File | Settings | File Templates. 
  7. --%> 
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %> 
  9. <html> 
  10. <head> 
  11.     <title>Title</title> 
  12. </head> 
  13. <body> 
  14.  <h2>hello springmvc</h2> 
  15. </body> 
  16. </html> 
  1. <%-- 用EL表达式获取后台处理器封装的信息 --%> 
  2.   $END

控制台输出:

老师问我 Spring MVC 的工作流程

浏览器访问:http://localhost:8080/106_springmvc_hello_war_exploded/hello

老师问我 Spring MVC 的工作流程

3. Spring MVC的工作流程(重点!!!)

Spring MVC是如何工作的呢?(面试高频)

“通过入门案例的学习,相信读者对Spring MVC的使用已经有了一个初步的了解。在实际开发中,我们的实际工作主要集中在控制器和视图页面上,但Spring MVC内部完成了很多工作,这些程序在项目中具体是怎么执行的呢?接下来,将通过一张图来展示Spring MVC程序的执行情况。

老师问我 Spring MVC 的工作流程

  • 用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet所拦截
  • DispatcherServlet拦截到请求后,会调用HandlerMapping处理器映射器;
  • 处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
  • DispatcherServlet会通过返回信息选择合适的HandlerAdapter(处理器适配器);
  • HandlerAdapter会调用并执行Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端控制器;
  • Controller执行完成后,会返回一个ModelAndView对象,该对象中会包含视图名或包含模型和视图名;
  • HandlerAdapter将ModelAndView对象返回给DispatcherServlet;
  • DispatcherServlet会根据ModelAndView对象选择一个 合适的ViewReslover(视图解析器) ;
  • ViewReslover解析后,会向DispatcherServlet中返回具体的View(视图) ;
  • DispatcherServlet对View进行渲染( 即将模型数据填充至视图中) ;

总结

本章首先对Spring MVC框架进行了简单的介绍,

然后讲解了一个Spring MVC入门程序的编写,

最后通过入门案例对Spring MVC的工作流程进行了详细讲解。

通过本章的学习,我们能够了解什么是Spring MVC,以及Spring MVC的优点,掌握Spring MVC入门程序的编写,并能够熟悉Spring MVC框架的工作流程。

原文链接:https://mp.weixin.qq.com/s/QfvUrG789jr8UY28KQHFNA

延伸 · 阅读

精彩推荐
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04