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>
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/15173401.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步