servlet生命周期

来源:互联网 发布:淘宝直通车用开车精灵 编辑:程序博客网 时间:2024/05/01 14:14

Servlet的生命周期分为四个阶段
1,创建Servlet对象,通过服务器反射机制创建Servlet对象,第一次请求时才会创建。(默认)
2,调用Servlet对象的init()方法,初始化Servlet的信息,init()方法只会在创建后被调用一次
3,响应请求,调用service()或者是doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的。
4,在长时间没有被调用或者是服务器关闭时,会调用destroy()方法来销毁Servlet对象。

可以通过web.xml文件可以配置Servlet对象的创建时间,
<load-on-startup>数字</load-on-startup>,表示服务器启动时创建,并依照数字大小按顺序创建,只用重要的Servlet才会是用这个设置。

可以通过<init-param>标签来配置初始化参数,可以用ServletConfig对象的
getInitParameter(String name)方法来得到参数。
 
<init-param>
<param-name>...</param-name>
<param-value>...</param-value>
</init-param>

多线程下所操作的变量,如果操作的是一个变量,且兼有读写操作,就要考虑加上同步,但同步不能乱加,否则会造成死锁问题。

init()和destroy()方法都是运行在单线程下的。

GenericServlet类中的有参和无参的init方法。
  public void init(ServletConfig config)throws ServletException
    {
        this.config = config;
        init();
    }

    public void init()throws ServletException
    {
 .....;//覆盖了的无参的init()方法,会在Servlet创建时调用有参的init方法时
  也会被调用。
    }
 
HttpServlet类中参数不同的service方法的调用关系。
public void service(HttpServletRequest req,HttpServletResponse res){
 .......;
 .......;
}
public void service(ServletRequest req, ServletResponse res)
        throws ServletException, IOException
    {
        HttpServletRequest request;
        HttpServletResponse response;
        try
        {
            request = (HttpServletRequest)req;
            response = (HttpServletResponse)res;
        }
        catch(ClassCastException e)
        {
            throw new ServletException("non-HTTP request or response");
        }
        service(request, response);
    }

原创粉丝点击