入门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方法。
浙公网安备 33010602011771号