入门Servlet

1.实现servlet的三种方法:

(1)实现servlet的接口 

(2)继承GenericServlet (实现其中的service方法)

(3)继承HttpServlet 

2.关于GenericServlet 、HttpServlet 

1.httpServlet是GenericServlet的子类。它提供了处理http协议的基本架构。

2.GenericServlet又实现了Servlet和ServletConfig这两个接口

3.servlet的主要方法

3.1.init方法

      该方法在servlet生命周期中只执行一次,在servlet创建实例后立即调用该方法,完成初始化。在servlet引擎调用该方法时,还可能会传递一个包含servlet的配置和运行环境的servletConfig对象。

 1 public void init(ServletConfig config)throws ServletException{} 

如果抛出了异常则Servlet引擎就会卸载Servlet。

GenericServlet也提供了一个无参方法init()

有参构造源码:

1 public void init(ServletConfig config)  
2     throws ServletException  
3   {  
4     this.config = config;  
5     init();  
6   }  

注意到其中又调用了init()无参方法。这是因为如果要在GenericServlet的子类中的init(ServletConfig config)方法增加一些额外的功能,就会覆盖父类方法。父类的init有参方法将不会被调用 ,为了不破坏GenericServlet其他方法,于是就有了这无参方法。

2.service方法

该方法是servlet的核心方法,每当Servlet的访问请求到达时,Servlet的引擎就会调用该方法。GenericServlet没有实现该方法,httpServlet有对该方法的实现。

在servlet接口中,其格式为:

public abstract void service(ServletRequest paramServletRequest, ServletResponse paramServletResponse)  
    throws ServletException, IOException;

其没有对于http协议的访问请求,如果要在这方法中使用HTTP消息的特有功能,也就是要调用HttpServletRequest和HttpServletResponse类中定义的方法,还需要将这些对象类型转换成HttpServletRequest和HttpServletResponse,如:

public abstract void service(ServletRequest paramServletRequest, ServletResponse paramServletResponse)  
    throws ServletException, IOException{
       HttpServletRequest request=(HttpServletRequest )paramServletRequest;
       HttpServletResponse response=(HttpServletResponse )paramServletResponse;
       //.....

为了简化该转换过程,HttpServlet类实现的service方法内部调用了另一个重载的service方法。

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);  
  }  
}  

3.destroy方法

destroy方法在web容器卸载servlet之前被调用。显然该方法在servlet生命周期中也执行一次。可以通过覆盖该方法来完成其他功能,如关闭数据库连接、io流。GenericServlet类中的destroy方法已经能满足大部分需求,不需要覆盖。

4.doXXX方法

客户端可以用HTTP协议中规定的的各种请求方式来访问servlet。对于不同类型的请求,调用不同方法来处理。不管以哪种方式访问,都将调用service方法。在一般情况下也只需覆盖doGet或doPost方法。

 

posted on 2018-01-23 21:27  dfsgfsgsg  阅读(128)  评论(0)    收藏  举报

导航