码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet编程总结 1

时间:2016-01-05 22:27:36      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

  • Servlet对象的生命周期是由Servlet容器控制的。
  • Servlet的生命周期中的各方法的调用代码表示:  
技术分享
 1 package cn.servlet.life;
 2 import java.io.IOException;
 3 
 4 import javax.servlet.ServletConfig;
 5 import javax.servlet.ServletException;
 6 import javax.servlet.ServletRequest;
 7 import javax.servlet.ServletResponse;
 8 import javax.servlet.http.HttpServlet;
 9 
10 public class LifeDemo extends HttpServlet {
11 
12     /**
13      * 1.构造方法
14      */
15     public LifeDemo(){
16         System.out.println("1.servlet对象被创建了。");
17     }
18 
19     /**
20      * 2.init方法
21      */
22     @Override
23     public void init(ServletConfig config) throws ServletException {
24         System.out.println("2.init方法被调用");
25     }
26     
27     /**
28      * 3.service方法
29      */
30     @Override            
31     public void service(ServletRequest req, ServletResponse res)
32             throws ServletException, IOException {
33         System.out.println("3.service方法被调用");
34     }
35     
36     /**
37      * 4.destroy方法
38      */
39     @Override
40     public void destroy() {
41         System.out.println("4.servlet对象销毁了");
42     }
43     
44     
45 }
View Code
  1. 在以上的代码中,整个Servlet生命周期中有4个方法被调用:1、无参构造方法;2、init(ServletConfig confit)有参的init方法;3、处理请求的service()方法;4、销毁Servlet对象的destroy()方法。
  2. 运行以上的代码,当第一次访问该Servlet时的输出结果如下,证明1、2、3方法都被执行了:

    1.servlet对象被创建了。
    2.init方法被调用
    3.service方法被调用

    当再次访问这个Servlet时,输出结果如下,只有service()方法被调用。:

    3.service方法被调用

  注意:Tomcat是通过反射机制调用Servlet的无参构造器去初始化Servlet对象的。

  ----------------------------------------------------------------------------------------------------------------------------------------------

Servlet的继续体系:

 

 技术分享

在这个体系中,根接口是Servlet,直接的实现类是:GenericServlet, HttpServlet,这二个是都是抽象类,并且HttpServlet继承了GenericServlet类。

-------------------------------------------------------------------------

Servlet完成初始化后,Tomcat会传入的对象有:

  •  HttpServletRequest  请求对象:获取请求信息
  •  HttpServletResponse 响应对象: 设置响应对象
  •  ServletConfig对象    servlet配置对象
  • ServletContext对象; servlet的上下文对象

重点是ServletConfig和ServletContext对象,

  ServletConfig对象是在Servlet容器调用带参数的init()方法时传入的,是通过GenericServlet的源码得知的:

    private transient ServletConfig config;

  public void init(ServletConfig config) throws ServletException {
  this.config = config;
  this.init();
  }

  public void init() throws ServletException {

  }  

也就是说,Servlet容器调用init的带参数的方法,并且把ServletConfig对象传入了,这个带参数的init方法只是为了初始化ServletConfig对象的,在这个方法内部还调用了不带参数的init方法,这个方法是提供给使用者可以去覆盖的,带参数的方法一般不建议覆盖,否则GenericServlet中的init方法将不再被执行,也就得不到ServletConfig对象了。

注意,查看源码得知,HttpServlet中没有提供覆盖的init方法,HttpServlet继承了GenericServlet类,而我们自定义的Servlet类又继承了HttpServlet类,所以当我们自定义的Servlet不去覆盖GenericServlet中的带参数的init方法时,Tomcat将直接执行GenericServlet中的Init方法,并将ServletConfig对象传入了。

-----------------------------------------------------------------------------------------------

ServletConfig对象的作用:

  主要是用于加载servlet的初始化参数。在一个web应用可以存在多个ServletConfig对象(一个Servlet对应一个ServletConfig对象

 

Servlet编程总结 1

标签:

原文地址:http://www.cnblogs.com/one-cool/p/5103846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!