1.Servlet API核心是javax.servlet.Servlet接口,该接口有5个方法,其中有3个是容器自动调用的,包括init(ServletConfig config),service(ServletRequest req,ServletRsponse res),destroy()方法,另外两个是getServletConfig()和getServletInfo()。
2.Init(ServletConfig config)方法负责初始化Servlet对象,容器在创建好Servlet对象,就调用这个方法。service(ServletRequest req,ServletRsponse res)方法负责相应客户端请求,为客户端提供相应服务,当容器接受到客户端访问特定的Servlet请求时,就会调用该Servlet对象的service()方法。destroy()方法负责释放Servlet对象占用的资源。还有两个方法分别是getServletConfig()和getServletInfo()方法,前者返回ServletConfig对象,包含了Servlet初始化信息,后者返回一个字符串,包含了Servlet创建者,版本和版权的信息。
3.javax.servlet.GenericServlet抽象类实现了Servlet接口,同时也实现了javax.servlet.ServletConfig和java.io.Serializable接口,所以该抽象类将ServletConfig和Servlet联系到了一起,它还有一个子类javax.servlet.http.HttpServlet,我们实现的Servlet一般都是继承HttpServlet。
4.在GenericServlet抽象类中,有两个init()方法,一个是init(ServletConfig config),另一个是无参的init()方法,第一个方法是初始化容器为Servlet创建的ServletConfig对象,第二个方法是留给子类覆盖的。
init(ServletConfig config){
this.config= config;
this.init();
}
init(){}
5.GenericServlet抽象类中有一个抽象方法service(ServletRequest req,ServletResponse res);该方法是一个抽象方法,它的子类必须覆盖该方法。
6.GenericServlet子类HttpServlet也是一个抽象类,我们写的Servlet一般都继承这个类,这个类中的service(ServletRequest req,ServletRsponse res)方法主要是做了一个事情,就是把req和res强制转换成HttpServletRequest和HttpServletResponse类型,然后再调用service()的重载函数service(HttpServletRequest req,HttpServletResponse res),重载方法里主要做的一件事,就是获取req的请求方式,如果是get方式,就调用doGet(res,req),如果是post方式,就调用doPost(res,req),依此类推,主要就是解析请求,分配请求到相应的方法中。HttpServlet类中doGet()和doPost()都是protected类型,函数体实现是向客户端返回一个错误信息,我们写的Servlet要覆盖这两个方法,而且要声明成public。
7.在GenericServlet类中service()方法中传入了两个参数,ServletRequest和ServletResponse。
(1)ServletRequest表示客户端的请求,当Servlet容器接收到客户端要求访问的Servlet请求时,容器先解析客户端的原始请求数据,将它包装秤ServletRequest对象,当容器调用service()方法时,就可以将该ServletRequest对象做为参数传入进去。ServletRequest对象定义了一系列读取客户端请求数据的方法。HttpServletRequest接口是ServletRequest的子接口,该接口提供了用于读取HTTP请求中的相关信息的方法。
(2)ServletResponse主要产生HTTP相应结果的正文部分,而且可以设置一系列的属性,如编码,MIME类型,正文长度。HttpServletResponse是ServletResponse的子接口,该接口提供了与HTTP协议相关的一些方法,Servlet可通过这些方法来设置HTTP响应头或向客户端写Cookie。
8.ServletConfig对象包含了Servlet初始化参数信息,而且ServletConfig对象还与当前Web应用的ServletContext对象关联。
9.ServletContext是Web应用的总管家,它和Web应用的生命周期一致,Servlet对象可以通过这个总管家来访问容器中各种资源。ServletContext接口提供的方法可分为以下几类:
(1)用于在Web应用范围内存取共享数据。
(2)访问当前Web应用的资源。
(3)访问Servlet容器中的其他Web应用。
(4)访问Servlet容器的相关信息。
(5)访问服务器端的文件系统资源。
(6)输出日志。
10.Web应用生命周期
(1)启动阶段
(2)运行阶段
(3)终止阶段
11.Servlet生命周期
(1)初始化阶段:
*加载Servlet类,将.class文件读到内存。
*容器创建ServletConfig对象。
*Servlet容器创建Servlet对象。
*Servlet容器调用Servlet对象的init(ServletConfig config)方法。
<1>以下两种情况会进入初始化阶段
特定Servlet被客户端首次请求访问,多数Servlet都会在这种情况下被Servlet容器初始化
设置<load-on-startup>1</load-on-startup>,该属性代表容器启动Servlet所属的Web应用时,会初始化这个Servlet,数字1,2,3,4代表初始化顺序。
(2)运行时阶段
*Servlet容器接收来自客户端请求,解析请求,找到相应Servlet类,执行相应方法,通过ServletResponse生成响应结果,Servlet容器把结果发送给客户端,Servlet容器销毁ServletRequest和ServletResponse
(3)销毁阶段
*释放所占用的各种资源。
12.ServletContextListener监听器,能够坚挺ServletContext对象的生命周期,实际上就是坚挺Web应用的生命周期。该接口定义了处理ServletContextEvent事件的两个方法。
contextInitialized(ServletContextEvent sce)和contextDestroyed(ServletContextEvent sce),顾名思义,一个是初始化时调用,一个时销毁前调用。