HttpServlet是javax.servlet.jar包下的一个抽象类,它继承了另一个抽象类GenericServlet,所以,我们需要继承HttpServlet这个类并重写里面的方法
根据http的请求方式,HttpServlet对应的方法主要有:
DELETE,GET,OPTIONS,POST,PUT和TRACE
POST |
protected void
doPost(HttpServletRequest req, HttpServletResponse resp)
|
GET
|
protected void
doGet(HttpServletRequest req, HttpServletResponse resp)
|
PUT
|
protected void
doPut(HttpServletRequest req, HttpServletResponse resp)
|
DELETE
|
protected void
doDelete(HttpServletRequest req, HttpServletResponse resp)
|
OPTIONS
|
protected void
doOptions(HttpServletRequest req, HttpServletResponse resp)
|
TRACE
|
protected void
doTrace(HttpServletRequest req, HttpServletResponse resp)
|
下面我们看下它们之间的关系:
HttpServlet | |
GenericServlet | |
Servlet
|
|
ServletConfig
|
|
Servlet:所有的servlet都必须实现的接口,以下可以看到我们较熟悉的几个方法:
init,service,destroy,getServletInfo和getServletConfig
ServletConfig:在初始化的时候,给servlet传递参数信息( A servlet configuration object used by a servlet container used to pass information to a servlet during initialization.),它包括4个方法:
上面还包含一个ServletContext接口( Defines a set of methods that a servlet uses to communicate with its servlet container, for example, to get the MIME type of a file, dispatch requests, or write to a log file. ),这个接口定义了大概51个方法,用于servlet 和servlet容器进行通信或交流,比如记录日志或转发请求等,like this:
GenericServlet:这个类是HttpServlet的父类,HttpServlet重写了它父亲的service方法。
HttpServlet:提供了一个抽象类给子类去创建一个http servlet ,子类的HttpServlet必须重写HttpServlet接口的至少一个方法,比如我们常用的doGet和doPost,下面截取一下HttpServlet的service方法:
HttpServlet容器响应Web客户请求流程如下:
1)Web客户向Servlet容器发出Http请求;
2)Servlet容器解析Web客户的Http请求;
3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
4)Servlet容器创建一个HttpResponse对象;
5)Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
8)Servlet容器把HttpServlet的响应结果传给Web客户。
创建HttpServlet的步骤——“四部曲”
1)扩展HttpServlet抽象类;
2)覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法;
3)获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;
4)生成HTTP响应结果。通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象。
(参考资料:http://www.cnblogs.com/panjun-Donet/archive/2010/02/22/1671290.html)