当前位置:   article > 正文

Spring MVC框架原理_springmvc框架工作原理

springmvc框架工作原理

什么是Spring MVC

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架;Spring使用得非常广泛,现在基于所有的Web的应用都离不开Spring,而Spring MVC与Spring框架又是无缝结合的,所有Spring MVC也占有很大的市场份额。


Spring MVC 的总体设计

要使用Spring MVC ,只需要在web.xml中配置一个DispatcherServlet,如下所示:

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/*</url-pattern>
<servlet-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在定义一个dispatcherServlet.xml配置文件,

<beans>
    <--定义Mapping-->
    <bean id="urlMapping"
        class="org.springframework.web.servlet.handler.SimplerUrlHandler-Mapping">
        <property name="mapping">
            <props>
                <prop key="demo.htm">demo</prop>
            </props>
        </property>
    <property name="interceptors">
        <list>
            <ref bean="interceptors"/>
        </list>
    </property>
    </bean>
    <bean id="interceptor" class="org.springframework.web.serevlet.theme.ThemeChangeInterceptor"/>
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        <property name="viewClass">
            <value>org.springframework.web.serevlet.view.InternalResourceView</view>
        </property>
    </bean>
    <!--定义control-->
    <bean id="demo" class="com.ifox.springmvc.Demo">
        <property name="viewPage">
            <value>/demo.htm</value>
        </property>
    </baen>
</beans>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

实际上Spring MVC的使用非常简单,如上面我们只要扩展一个路径映射关系;定义视图解析器;在定义一个业务逻辑的处理规则,SpringMVC就能够帮助你完成所有的MVC功能。
DispatcherServlet类继承了HttpServlet,在Servlet的init()方法调用的时候时DispatcherServlet执行Spring MVC的初始化工作。DispatcherServlet初始化什么,可以在其ininStrategets方法中知道,如下:

protected void initStrategies(ApplicationContext context){
    initMultipartyResolver(context);
    initLocaleResolver(context);
    initThemeResolver(context);
    initHandlerMappings(context);
    initHandlerAdapters(context);
    initHandlerExceptionResolvers(context);
    initRequestToViewNameTranslator(context);
    initViewResolver(context);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

从上面的初始化策略上看,在一个请求中可能需要我们来扩展的地方都定义了扩展点,只要实现相应的接口类,并创建一个Spring Bean就能扩展SpringMVC框架,
如下图是SpringMVC 的组件图:
这里写图片描述
在Spring MVC框架中,有3个组件是用户必须要定义和扩展的,定义URL映射规则,实现业务逻辑的Handler实列对象,渲染模板资源。

HttpServlet初始化调用了HttpServletBean的init方法,该方法的作用是获取Servlet中的init参数,并创建一个BeanWrapper对象,然后由真正的子类执行BeanWrapper的初始化工作。

Spring容器的创建是在FrameworkServlet的initServletBean()方法中完成的,这个方法会创建WebApplicationContext对象,并调用其refresh()方法来完成配置文件的加载,配置文件的加载同样是先查找Servlt的init-param参数中设置的路径,如果没有,会根据namespace+servlet的名称来查找XML文件.Spring 容器在加载时会调用DispatcherServlet的initStrategies方法来完成在DispatcherServlet中定义的初始化的工作,在initStrategies方法中会初始化Spring MVC框架需要的8个组件,这8个组件都保留在DispatcherServlet类中。
这时DispatcherServlet已经完成初始化完成,Spring MVC也已经初始化完成,可以接受Http请求。

Spring MVC原理

这里写图片描述
1.Http发送请到前端控制器DispatcherServlet。
2.前端控制器请求HandlerMapping查找Handler。
3.根据DispatcherServlet将请求提交到Controller。
4.5.Controller调用业务逻辑处理。
6.7. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
8.前端控制器向用户响应结果 。

Control设计

Spring MVC的Controller主要由HandlerMapping和HandlerAdapters两个组件提供。HandlerMapping负责映射用户的URL和对应的处理类,HandlerMapping并没有规定这个URL与应用的处理类如何映射,在HandlerMapping接口中定义了一个URL必须返回一个由HandlerExceptionChain代表的处理链,我们可以在这个处理链中添加任意的HandlerAdapters实例来处理这个URL对应的请求,这种设计思想和在Servlet。

Control的逻辑调用

整个Spring MVC的调用都是从DispatcherServlet的doService方法开始的,在doService方法中将会将ApplicationContext、localeResolve、themeResolver等对象添加到request中以便在后面使用,接着就是调用doDispatch方法,这个方法主要是处理用户的请求的地方

Control的处理逻辑就是在DispatcherServlet的handlerMappings集合中根据请求的URL匹配每个HandlerMapping对象中的某个Handler,匹配成功后将会返回这个Handler的处理链HandlerExceptionChain对象,而这个HandlerExceptionChain对象中将会包含用户自定义的多个HandlerInterceptor对象,在HandlerInterceptor接口中定义的3个方法,preHandle和postHandle分别在Handle执行前和执行后执行,afterCompletion在View渲染完成DispatcherServlet返回之间执行。

Model设计

如果Handler对象返回了ModelAndView对象,那么说明Handler需要传入一个Model实列给View去渲染模板。
ModelAndView对象是连接业务逻辑层与View展现层的桥梁,对SpringMVC来说它是连接Handler与View的桥梁。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/67782?site
推荐阅读
相关标签
  

闽ICP备14008679号