springMVC简单程序流程分析

springMVC简单程序流程分析

第一部分

1.启动服务器,加载web.xml

当启动服务器的时候,就会加载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:applicationContext.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

2.创建dispatcherServlet对象

当有load-on-startup标签的时候,1表示servlet会在服务器启动的时候加载,

<load-on-startup>1</load-on-startup>

tomcat中就会有一个dispatcherServlet对象,然后调用init方法,根据name参数名获取value参数值,根据spring的配置路径就会去加载spring的配置文件,同时创建spring核心容器

3.创建spring核心容器,生成对象

在配置文件applicationContext.xml中,载入下面这段代码

	<!--1.包扫描-->
    <context:component-scan base-package="com.**"/>
    <!--2.加载注解驱动-->
    <mvc:annotation-driven/>
    <!--3.导入application-mybatis.xml-->
    <import resource="application-mybatis.xml"/>

根据component-scan标签,去扫描base-package路径下的所有的类和其中的类上的注解,比如Controller类中的@Controller或@RestController,Service类中的@Service注解,并进行IOC控制反转和DI依赖注入,生成对应的对象,存储在spring核心容器中.
而导入application-mybatis.xml则是为了整合mybatis

如果需要使用视图解析器时,也会在spring核心容器中生成视图解析器对象

	<!--4.创建视图解析器对象-->
    <bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

此时第一部分结束了,而在我们的spring核心容器中生成了3个对象.分别是controller对象,scervice对象,viewResolver对象

第二部分

1.客户端发送请求

http://localhost:8080/aaa/bbb.do

还记得web.xml文件中的servlet-mapping标签吗,当url-pattern为*.do时,映射路径则以.do后缀,
当url-pattern为 / 时,则表示没有后缀

<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
</servlet-mapping>

回到客户端发送请求上面,这段请求会被dispatcherServlet对象接收并分发.它会截取.do之前的/aaa/bbb部分,并去Controller类中匹配对应@RequestMapping注解的值.找到对应的方法.

2.执行Controller类中对应的方法

执行方法,如果需要请求转发跳转页面,则会在spring核心容器中找到视图解析器对象,配置前后缀,并找到对应的页面进行跳转.显示最终的网页数据.

小结

本案例为简单程序的springMVC流程分析,具体的springmvc请求响应执行流程中,除了前端控制器DispatcherServlet,视图解析器ViewResolver外,还有处理器映射器HandlerMapping,处理器适配器HandlerAdapter分别执行程序,显示出最终的视图.

最后,感谢您的阅读,若文中有谬误的地方,敬请指出.大家一起交流学习,共同进步!

你可能感兴趣的:(spring,java)