在绝大多数的网络应用中,都是客户端(浏览器)通过HTTP协议去访问服务器端的资源,而我们所编写的Servlet也主要是应用于HTTP协议的请求和响应。为了快速开发应用于HTTP协议的Servlet类,Sun公司在javax.servlet.http包中给我们提供了一个抽象的类HttpServlet,它继承自GenericServlet类,用于创建适合Web站点的HTTP Servlet。
[table]
|
[/table]
在HttpServlet类中提供了两种重载的service()方法:
A.public void service(ServletRequest req,ServletResponse resp) throws ServletException,IOException
B.protected void service(HttpServletRequest req,HttpServletResponse) throws ServletException,IOException
第一种service方法是GenericServlet类中service()方法的实现。在这种方法中,首先将req和resp对象转换成HttpServletRequest(继承自ServletRequest接口)和HttpServletResponse(继承自ServletResponse接口)类型,然后调用第二种service方法,对客户的请求进行处理。
当容器接收到一个针对HttpServlet对象的请求时,调用该对象的方法顺序如下:
(1)调用公共的(public)service()方法;
(2)在公共的service方法中,首先将参数类型转换成HttpServletRequest和HttpServletResponse,然后调用保护的(protected)service方法,将转换后的HttpServletRequest对象和HttpServletResponse对象作为参数传递进去。
(3)在保护的service方法中,首先调用HttpServletRequest对象的getMethod方法,获取HTTP请求方法的名字,然后根据请求方法的类型,调用相应的doXXX方法。
因此,我们在编写HttpServlet的派生类时,通常不需要去覆盖service方法,而只需要重写相应的doXXX方法。
[table]
|
public abstract class HttpServlet extends GenericServlet implements java.io.Serializable
|
[/table]
在HttpServlet类中提供了两种重载的service()方法:
A.public void service(ServletRequest req,ServletResponse resp) throws ServletException,IOException
B.protected void service(HttpServletRequest req,HttpServletResponse) throws ServletException,IOException
第一种service方法是GenericServlet类中service()方法的实现。在这种方法中,首先将req和resp对象转换成HttpServletRequest(继承自ServletRequest接口)和HttpServletResponse(继承自ServletResponse接口)类型,然后调用第二种service方法,对客户的请求进行处理。
当容器接收到一个针对HttpServlet对象的请求时,调用该对象的方法顺序如下:
(1)调用公共的(public)service()方法;
(2)在公共的service方法中,首先将参数类型转换成HttpServletRequest和HttpServletResponse,然后调用保护的(protected)service方法,将转换后的HttpServletRequest对象和HttpServletResponse对象作为参数传递进去。
(3)在保护的service方法中,首先调用HttpServletRequest对象的getMethod方法,获取HTTP请求方法的名字,然后根据请求方法的类型,调用相应的doXXX方法。
因此,我们在编写HttpServlet的派生类时,通常不需要去覆盖service方法,而只需要重写相应的doXXX方法。