启动tomcat服务器后,借助springMVC框架,我们可以很方便高效控制客户端发出的各种请求。分析请求执行流程前,我们需要了解一下服务器启动时,都做了什么。
- tomcat服务器启动加载项
加载web.xml文件
这一点大家应该都熟知了,不多赘述。
加载Servlet
我们不妨回忆一下web.xml的部分内容。
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<load-on-startup>1</load-on-startup>
会让该DispatcherServlet在tomcat启动时就进行加载,并且/
会让所有请求都先经过该DispatcherServlet。
springmvc.xml加载
在web.xml配置DispatcherServlet中配置了init-param初始化参数,即springmvc配置文件的信息,所以该文件连同该servlet会一同在tomcat启动时加载。
看一下springmvc.xml配置文件的部分内容。
<context:component-scan base-package="com.wuwl.handler"></context:component-scan>
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<mvc:annotation-driven></mvc:annotation-driven>
首先,配置了自定义扫描的包,需要先进行扫描。与此同时,类如HelloController等标注了@Controller
注解的类,会创建成对象,加入ioc容器中,默认单例。紧接着bean标签配置的视图解析器,也会加载InternalResourceViewResolver对象到ioc容器中。
- springMVC控制器对请求的控制细节
借助mvc流程图来理解一下。
①客户端发出类如:<a href="hello">hello world</a>
这样的请求。
②控制器层,也就是此处的DispatcherServlet接收到请求后,负责控制和指挥,根据请求路径匹配RequestMapping映射的地址,将请求分发给HelloController对象执行其helloHandler方法。
③模型层执行调度结束后,返回字符串“success”给控制器。
④控制器将结果交由InternalResourceViewResolver视图解析器,后者拼接出形如/WEB-INF/views/success.jsp
的视图地址,返回给控制器。
⑤控制器将渲染后的最终结果返回给用户。