springMVC普通执行流程
(在阅读前需要有spring框架的基础知识支持)
当你学习完servlet之后,再接触springMVC时就会感觉一脸懵x,因为我们在看到springMVC中,只需要有一个Controller控制器类,就可以对浏览器发送来的请求进行相应,很神奇,但其中是有很多故事的,下面是一个基于注解的控制器类:
@Controller //作为控制器的类必须使用这个注解
public class XXXController{
//下面为处理请求的控制器方法
@RequestMapping("标记1")
public String 方法名(){
//方法体,处理浏览器的请求
//返回值(需要是要跳转的页面的名称)例如
return "标记2";
}
}
就想这样的一个很普通的类就可以对浏览器的请求进行处理,这样就是与servlet进行了解耦。下面就开始介绍springMVC的普通执行流程(以普通的页面页面跳转为例):
1、我们都知道,在Tomcat启动时,会先加载web.xml文件,内容如下:
<!--配置一个Servlet-->
<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>
<!--springmvc.xml为spring的配置文件-->
</init-param>
<!--指定Service启动顺序,当引用加载时就创建-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
加载web.xml文件后,就会实例化并初始化Servlet()DispatcherServlet
2、根据标签中的内容,再去加载springmvc.xml配置文件,内容如下
<!--配置要扫描的包-->
<conext:component-scan base-package="com.khd"></conext:component-scan>
<!--配置视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--开启对注解的支持-->
<mvc:annotation-driven></mvc:annotation-driven>
加载springmvc配置文件,创建spring容器,初始化容器中的对象。
3、页面加载好后,我们点击链接,就属于客户端发送了一次请求,页面具体代码:
<a href="${pageContext.request.contextPath}/frist">点击进入</a>
4、请求到达DispatcherServlet,到达前端控制器,具体代码如下:
@Controller
public class FristController {
//处理请求的方法
@RequestMapping("/frist")
public String frist(){
System.out.println("第一个控制器。。。");
return "success";
}
}
截取点击的动作名称**/first**,与**@RequestMapping("/frist")进中找名称相同的内容,找到后执行被注释的方法,方法返回"success"**,使用视图解析器(InternalResourceViewResolver)拼接出要跳转的地址(/WEB-INF/pages/success.jsp),从而进行跳转。
springmvc执行图解: