图2-2
根据Spring MVC的架构图可以知道Spring MVC的基本处理流程如下:
1、请求httpServletRequest发送到DispatcherServlet 。DispatcherServlet实际上就是获取了请求的Controller的路径
这个对应程序是怎么实现的呢?
是通过在Web.xml中配置该servelt,注意这里是servlet,而Struts是filter
代码如下:
- <servlet>
- <servlet-name>chapter2</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>chapter2</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
2、DispatcherServlet 到 HanderMapping
DispatcherServlet获取到请求controller的路径后,交给HanderMapping 去找到该Controller,HanderMapping找到后将该Controller名返回给DispatcherServlet.
HandlerMapping 对应代码是怎样实现的呢?
- <!-- HandlerMapping -->
- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
3、DispatcherServlet 到HandlerAdapter
DispatcherServlet获取到HandlerMapping返回的Controller类后,交给HandlerAdapter来管理调用的过程。
HandlerAdapter又是怎样实现的呢?通过在springmvc.xml中配置一下代码:
- <!-- HandlerAdapter -->
- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
注意spring2.5引入注释以后。Handlermapping 和HandlerAdapter 的配置,通过一下配置实现。
<context:component-scan base-package="cn.itcast" use-default-filters="false">
<!-- 扫描cn.itcast下的所有类中 注解是Controller的类 -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 自动装配 -->
<context:annotation-config/>
并结合@Controller 和@RequestMapping注释实现。
4、HandlerAdapter 就管理Controller的处理过程,并获取到Controller的返回结果ModelAndView
该过程就是Controller调用处理的过程。
5、HandlerAdapter将处理后的结果ModelAndView,返回给DispatcherServlet。
6、DispatcherServlet将调用视图解析器ViewResolver .
代码实现如下:
<!-- Jsp视图解析器 -->
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/back_page/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
7、通过ViewResolver拼装了要返回的视图。
8、Dispatcher将拼装的视图,返回。
基本流程就结束了。