SpringMVC--执行流程
一.SpringMVC执行过程
SpringMVC中新增的DispatcherServlet是前后端的大脑,不同于普通的MVC架构,前端有了自己的控制器,它兼容了前后端的控制器,实现了前后端的共同控制
第一步:用户端发送对网页的请求,会全部被DispatcherServlet拦截下来,这些请求都会交由Spring托管,并将请求地址解析出来:http://127.0.0.1:8080/SpringMVC/hello
- 解析出地址:http://127.0.0.1:8080
- 解析出项目名称:/springMVC(如果tomcat没有配置启动项目名就没有)
- 解析出实际的请求:/hello
第二步:DispatcherServlet调用HeadlerMapping查找到Headler,中央处理器会在spring容器中寻找是否有这个请求的处理程序,如果有就返回处理对象,没有就404
第三步:调用处理器执行器HeadlerExecution
第四步:返回HedlerIntercepter和Handler,这是有请求的处理情况,HedlerIntercepter负责将数据匹配为处理对象需要的,如:处理对象的参数为String类型,那么匹配时也会将其转换为String类型
第五步:DispatcherServlet拿到HandlerExecutionchain对象去找HandlerAdapter
第六步:处理器适配器会根据处理对象去调用相对应的处理程序,也就是Java中的类,一般是Controller层的类,处理的时候会根据业务需要处理静态资源和数据库数据查询
第七步:Handler返回ModelAndView,这是两个东西,Model是模型,也就是Headler处理请求后的返回数据,View即视图,这些数据需要在那个视图进行渲染
第八步:返回ModelAndView给DispatcherServlet
第九步:将View模块交给ViewResolver,视图解析器会自动拼接字符串,拼接完成以后就是一个完整的url
第十步:将拼接好的url地址返回给DisparcherServlet
第十一步:DispatcherServlet显示当前的url地址页面,并且将Model的数据渲染到此页面上
第十二步:把渲染好的页面响应给用户
二.配置DispatcherServlet
DispatcherServlet是Spring写好的一个类,配置XML的时候只需要将其绑定在一个启动XML中就可以了,并且配置拦截为全部请求
<servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
DispatcherServlet绑定的核心配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/page/"/> <!--后缀--> <property name="suffix" value=".jsp"/> </bean> <bean id="/hello" class="top.lostyou.controller.Test"/> </beans>
这里只配置了视图解析器