Servlet的生命周期被javax.servlet.Servlet这个接口所定义。
init()方法获得了一个Servlet配置对象(ServletConfig)。这个对象在Servlet引擎中执行,并允许Servlet通过它获处相关参数。这个对象使得Servlet能够访问ServletContext对象。
Servlet处理请求
ServletRequest的对象用于向Servlet提供客户端请求信息,如内容类型,内容长度,参数名称和值,标题信息,属性等
Servlet被初始化之后,它已经可以处理来自客户端的请求,每一个来自客户端的请求都被描述成一个ServletRequest对象,Servlet的响应被描述成一个ServletResponse对象。
当客户端发出请求时,Servlet引擎传递给Servlet一个ServletRequest对象和一个ServletResponse对象,这两个对象作为参数传递到service()方法中。
Servlet 也可以执行ServletRequest接口和ServletResponse接口。ServletRequest接口使得Servlet有权使用客户端发出的请求。Servlet可以通过
ServletInputStream对象读取请求信息。
ServletResponse接口允许Servlet建立响应头和状态代码。通过执行这个接口,Servlet有权使用ServletOutputStream类来向客户端返回数据。
Servlet接口的方法
Servlet接口有5种方法。分别为:init,service和destroy是servlet的生命周期方法。这些方法由web容器调用。
方法 |
描述 |
public void init(ServletConfig config) |
初始化servlet,它是servlet的生命周期方法,由web容器调用一次。 |
public void service(ServletRequest request,ServletResponse response) |
为传入的请求提供响应。它由Web容器的每个请求调用。 |
public void destroy() |
仅被调用一次,并且表明servlet正在被销毁。 |
public ServletConfig getServletConfig() |
返回ServletConfig对象。 |
public String getServletInfo() |
返回有关servlet的信息,如作者,版权,版本等。 |
GenericServlet
类实现了Servlet
,ServletConfig
和Serializable
接口。它提供除了service
方法之外,还实现了这些接口的所有方法。
GenericServlet
类可以处理任何类型的请求,因此它与协议无关。
可以通过继承GenericServlet
类并提供服务方法的实现来创建通用的servlet
HttpServlet类扩展了GenericServlet类并实现了Serializable接口。它提供了http特定的方法,如:doGet,doPost,doHead,doTra
Web容器如何处理servlet请求?
Web容器负责处理请求。下面来看看看它如何处理请求。
- 将请求与web.xml文件中的servlet进行映射。
- 为请求创建请求和响应对象
- 调用线程上的service方法
- 公共service方法内部调用受保护的service方法
- 受保护的service方法根据请求的类型调用doGet方法。
- doGet方法生成响应,并将其传递给客户端。
- 发送响应后,Web容器将删除请求和响应对象。线程包含在线程池中或删除取决于服务器实现
在公共service方法中写什么?
公共service
方法将ServletRequest
对象转换为HttpServletRequest
类型和ServletResponse
对象转为HttpServletResponse
类型。然后调用传递这些对象的service
方法。
受保护的service方法检查请求的类型,如果请求类型为get,则调用doGet方法,如果请求类型为post,则调用doPost方法
在RequestDispatcher接口中定义了两种方法
include 包含上层的信息加本层的,forward只有上层返回的不包括本层的
ServletRequest接口的getRequestDispatcher()方法返回RequestDispatcher的对象
ServletConfig对象是由每个servlet的Web容器创建的。这个对象可用于从web.xml文件获取配置信息ServletConfig的核心优点是,如果可以修改web.xml文件中的信息,则不需要编辑servlet代码文件。
ServletContext
如果有信息要共享给多个servlet使用,最好在web.xml文件中使用<context-param>元素提供它
servletconfig对象引用单个servlet,而servletcontext对象引用整个Web应用程序