前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
DispatcherServlet 作为前置控制器是web服务器的入口,是spring mvc最重要的一个类,通过它的生命周期可以加深对web服务器的理解。
servlet的生命周期
首先我们回忆一下servlet的生命周期:
Servlet生命周期分为三个阶段:【http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html】
1,初始化阶段 调用init()方法。Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
2,响应客户请求阶段 调用service()方法
3,终止阶段 调用destroy()方法
Servlet初始化阶段:
在下列时刻Servlet容器装载Servlet:
1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:
2,在Servlet容器启动后,客户首次向Servlet发送请求
3,Servlet类文件被更新后,重新装载Servlet
DispatcherServlet的结构
复习了上述知识后我们来看看DispatcherServlet的结构:
DispatcherServlet继承自抽象类:FrameworkServlet,间接继承了HttpServlet (FrameworkServlet继承自HttpServletBean,而HttpServletBean继承自HttpServlet )
Servlet的初始化
servlet如何处理请求:
servlet的service方法处理http请求。
FrameworkServlet.java 定义了servlet的service和destroy方法,如下所示:
我们知道http请求类型有七种(外加一个option选项),定义如下:
具体实现如下:
重头戏,作为请求分发器的实现:
功能:1. 把请求分发到handler(按照配置顺序获取servlet的映射关系获取handler);2. 根据servlet已安装的 HandlerAdapters 去查询第一个能处理的handler;3. handler激发处理请求
servlet销毁
小结:
本文因篇章限制,仅仅介绍了请求处理的流程,没有对代码进行深入的分析,接下来的文章将从细微处着手,分析spring的代码之美。
http://www.cnblogs.com/davidwang456/p/4090058.html