赞
踩
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 ,只需要在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>
在定义一个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>
实际上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);
}
从上面的初始化策略上看,在一个请求中可能需要我们来扩展的地方都定义了扩展点,只要实现相应的接口类,并创建一个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请求。
1.Http发送请到前端控制器DispatcherServlet。
2.前端控制器请求HandlerMapping查找Handler。
3.根据DispatcherServlet将请求提交到Controller。
4.5.Controller调用业务逻辑处理。
6.7. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
8.前端控制器向用户响应结果 。
Spring MVC的Controller主要由HandlerMapping和HandlerAdapters两个组件提供。HandlerMapping负责映射用户的URL和对应的处理类,HandlerMapping并没有规定这个URL与应用的处理类如何映射,在HandlerMapping接口中定义了一个URL必须返回一个由HandlerExceptionChain代表的处理链,我们可以在这个处理链中添加任意的HandlerAdapters实例来处理这个URL对应的请求,这种设计思想和在Servlet。
整个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返回之间执行。
如果Handler对象返回了ModelAndView对象,那么说明Handler需要传入一个Model实列给View去渲染模板。
ModelAndView对象是连接业务逻辑层与View展现层的桥梁,对SpringMVC来说它是连接Handler与View的桥梁。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。