3.SpringMVC请求的处理流程

3.SpringMVC请求的处理流程

1)发起http://localhost:8080/myweb/some.do请求
2)tomcat服务器接收请求(web.xml--url-pattern知道 *.do的请求给DispatcherServlet)
3)DispatcherServlet(根据springmvc.xml配置知道 some.do--->doSome()方法)
4)DispatcherServlet把some.do转发个MyController.doSome()方法
5)框架执行doSome()把得到ModelAndView进行处理, 转发到show.jsp

3.1 springmvc执行过程源代码分析

1. tomcat启动,创建容器的过程
通过load-on-start标签指定的1,创建DisaptcherServlet对象,
DisaptcherServlet它的父类是继承HttpServlet的, 它是一个serlvet, 在被创建时,会执行init()方法。
init()方法中
//创建容器,读取配置文件
WebApplicationContext ctx = new ClassPathXmlApplicationContext("springmvc.xml");
//把容器对象放入到ServletContext中
getServletContext().setAttribute(key, ctx);
上面创建容器作用:创建@controller注解所在的类的对象,创建MyController对象,这个对象放入到springmvc的容器中,容器是map,类似 map.put("myController",MyController对象)
2.请求的处理过程
执行servlet的service()
protected void service(HttpServletRequest request, HttpServletResponse response)
protected void doService(HttpServletRequest request, HttpServletResponse response)
DispatcherServlet.doDispatch(request, response){
调用MyController的.doSome()方法
}
doDispatch:springmvc中DispatcherServlet的核心方法, 所有的请求都在这个方法中完成的。

3.2 开启注解扫描

在springmvc-servlet.xml配置文件中,开启注解扫描

<!-- 自动扫描(组件)包,让指定包下的注解生效,由IOC容器统一管理 -->
<context:component-scan base-package="com.stt.controller"/>
<!-- 让Spring MVC不处理静态资源 .css .js .html .mp3 .mp4-->
<mvc:default-servlet-handler/>
<!--
支持mvc注解驱动
在spring中一般采用@RequestMapping注解来完成映射关系
要想使@RequestMapping注解生效
必须向上下文中注册DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter实例
这两个实例分别在类级别和方法级别处理。
而annotation-driven配置帮助我们自动完成上述两个实例的注入。
-->
<mvc:annotation-driven />
<!--
最后的配置如果没有<mvc:annotation-driven/>,那么所有的Controller可能就没有解析,所有当有请求时候都没有匹配的处理请求类,就都去<mvc:default-servlet-handler/>即default servlet处理了。添加上<mvc:annotation-driven/>后,相应的do请求被Controller处理,而静态资源因为没有相应的Controller就会被default servlet处理。总之没有相应的Controller就会被default servlet处理就ok了。
-->
配置
<context:component-scan>
就不需要配置
<context:annotation-config/>

3.3 ViewResolver视图解析器

视图解析器的规则是:prefix+viewName+suffix

springmvc-servlet.xml:

<!-- 配置springmvc框架中视图解析器,帮助开发人员设置视图文件路径 -->
<!-- Example: prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" -> "/WEB-INF/jsp/test.jsp" -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--前缀:视图文件的路径(目录名最后要/)-->
<property name="prefix" value="/WEB-INF/views/"></property>
<!--后缀:视图文件的扩展名-->
<property name="suffix" value=".jsp"></property>
</bean>

springmvc-servlet.xml:配置文件整体配置(固定)

<context:component-scan base-package="com.stt.controller"/>
<mvc:default-servlet-handler />
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
posted @   Lz_蚂蚱  阅读(180)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起