通俗易懂SpringMVC整体框架理解

本文详细解析了SpringMVC框架的工作流程,从用户请求到视图渲染的全过程,包括DispatcherServlet的角色、处理映射器(如RequestMappingHandlerMapping)、处理器适配器(如RequestMappingHandlerAdapter)的作用,以及视图解析器如何工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               

 

 最近又重新温习了一下前台SpringMVC框架,能够从整体上对SpringMVC有一个全局的认识。在这里也总结一下,为那些即将学习SpringMVC的亲们,做一个很好的开端吧!


 1. SpringMVC整体框架图

 学习某一种技术的话,要能够从宏观上把握一下这种技术的大致实现原理,然后才开始刨根问底的学习,这种技术的细节,这样会快也一些。首先从宏观上把控一些知识点之间的联系,学习起来更有连贯性,下面就先从SpringMVC的框架图来整体分析一下。

 



 上图就是SpringMVC整体的框架图,就这么几个部分。下面来着重的分析一下,整个过程中的流转。

 1.首先是用户发送请求,比如在浏览器中输入http://localhost:8080/SpringTest/login

 2.用户的请求就发送到了DispatcherServlet也就是前端控制器,这个东西是一个Servlet的实现,用来干什么呢?用来接收用户的请求,然后响应结果,相当于一个转发器,它的配置如下

<span style="font-family:Comic Sans MS;font-size:18px;"><!-- 自此请求已交给Spring Web MVC框架处理,因此我们需要配置Spring的配置文件,默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本示例为WEB-INF/ chapter2-servlet.xml。 --> <servlet>  <servlet-name>springMVC</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param>   <param-name>contextConfigLocation</param-name>   <param-value> classpath:springMVC-servlet.xml</param-value>  </init-param>  <load-on-startup>1</load-on-startup> </servlet> <!-- 这里一定要是/根据Servlet规范来的 --> <servlet-mapping>  <servlet-name>springMVC</servlet-name>  <url-pattern>/</url-pattern> </servlet-mapping></span>


 如果翻开DispatcherServlet源码的话,会发现会默认加载SpringMVC的一些配置,源码如下

 

<span style="font-family:Comic Sans MS;font-size:18px;">static {  // Load default strategy implementations from properties file.  // This is currently strictly internal and not meant to be customized  // by application developers.  try {   ClassPathResource resource = new ClassPathResource(DEFAULT_STRATEGIES_PATH, DispatcherServlet.class);   defaultStrategies = PropertiesLoaderUtils.loadProperties(resource);  }  catch (IOException ex) {   throw new IllegalStateException("Could not load 'DispatcherServlet.properties': " + ex.getMessage());  } }</span>



 并且该servlet也会默认加载默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本示例为WEB-INF/SpringMVC-servlet.xml.改配置文件就用来配置后面的处理映射器、处理适配器等相关信息


 3.经过DispatcherServlet过滤后URL后,比如上述的URL是http://localhost:8080/SpringTest/login,那么这时候就进入到了HandleMapping也就是映射处理器。这是用来干什么的呢?就是用来根据URL来匹配我们的处理器(或者就做控制器),比如我们请求的路径最后结尾的字母是login,那么让那个控制器来为我们服务呢?这时候就靠HandleMapping来处理了。下面列一下SpringMVC中的几种处理映射器。

 3.1 BeanNameUrlHandlerMapping:用来根据控制器的name属性来匹配要处理的映射器,配置如下

 

<span style="font-family:Comic Sans MS;font-size:18px;"> <bean id="itemsController1" name="/queryItems_test.action" class="cn.ssm.controller.ItemsController1" /> <!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url)  所有的映射器都实现 HandlerMapping接口。 --> <bean  class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /></span>
 经过这样配置的话,就可以通过/queryItems_test来查找我们的控制器了


 3.2 SimpleUrlHandlerMapping:根据URL来映射匹配

 

<span style="font-family:Comic Sans MS;font-size:18px;"> <bean id="itemsController1" name="/queryItems_test.action" class="cn.ssm.controller.ItemsController1" /> <!--简单url映射  --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  <property name="mappings">   <props>    <!-- 对itemsController1进行url映射,url是/queryItems1.action -->    <prop key="/queryItems1.action">itemsController1</prop>    <prop key="/queryItems2.action">itemsController1</prop>    <prop key="/queryItems3.action">itemsController2</prop>   </props>  </property> </bean></span>

 3.3 RequestMappingHandlerMapping:3.1后引入的新的特性,注解适配器,直接通过Controller标签即可识别

 

<span style="font-family:Comic Sans MS;font-size:18px;"><!--注解映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/></span>

4.接着向下走,通过映射处理器就找到了我们需要处理用户请求的控制器也就是Handler,那么此时还需要HandlerAdapter(处理器适配器)来,作用就是要按照特定规则(HandlerAdapter要求的规则)去执行Handler。常见的适配器如下

        4.1 SimpleControllerHandlerAdapter:要求handler实现Controller接口

         SimpleControllerHandlerAdapter将会调用处理器的handleRequest方法进行功能处理,该处理方法返回一个ModelAndView给DispatcherServlet;当然了也有对应的注解适配器

     4.2 HttpRequestHandlerAdapter:要求编写的Handler实现HttpRequestHandler接口

     4.3.注解适配器有RequestMappingHandlerAdapter,用来配合注解的开发


 5.接着向下走,经过适配器调用控制器的方法后,就会想前端控制器返回一个ModelView,包含我们需要信息的pojo对象和视图信息。

 6.前端控制器开始解析视图信息,通过视图解析器(View Resolver),进行视图解析,根据逻辑视图名解析成真正的视图(view)。如下配置

 

<span style="font-family:Comic Sans MS;font-size:18px;"><!-- 视图解析器 解析jsp解析,默认使用jstl标签,classpath下的得有jstl的包  --> <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">  <!-- 配置jsp路径的前缀 -->  <property name="prefix" value="/WEB-INF/jsp/"/>  <!-- 配置jsp路径的后缀 -->  <property name="suffix" value=".jsp"/> </bean></span>

8.最后一部操作了,解析完视图信息后,就把modelview中的model信息传递到我们的view界面上,整个流程就处理完毕。


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值