Java Web笔记 – Servlet技术介绍 生命周期 核心API 类方法调用顺序
本文由发表于6年前 | J2EE | 评论数 1 |  被围观 7,296 views+
1、Servlet技术:2、Servlet的功能:3、Servlet框架涉及到的两个JAR包:4、Servlet的相关类和Servlet的生命周期:4.1、其中的三个方法代表了Servlet的生命周期:4.1.1、Servlet容器创建Servlet的时机:
① Servlet容器启动时自动装载某些Servlet
② Servlet容器启动后,客户首次向Servlet发送请求
③ Servlet类文件被更新后,重新装载Servlet
4.1.2、Servlet的响应请求阶段:4.1.3、Servlet的终止阶段:5、ServletRequest和ServletResponse接口5.1、ServletRequest接口:5.2、ServletResponse接口:6、Servlet核心API及其的继承关系图:6.1、Servlet类:
Servlet的相关方法:
6.2、通用的Servlet GenericServlet类:6.3、HttpServlet类:6.4、HttpServlet类中各个方法的调用顺序:
1、Servlet技术:

Servlet是和平台无关的服务器端组件,它运行再Servlet容器中。Servlet容器负责Servlet和客户端通信和调用Servlet方式。Servlet和客户端通过“请求/响应”模式。

2、Servlet的功能:
创建并返回基于客户请求的HTML页面
创建可嵌入现有HTML页面中的部分HTML代码片段
与其他服务器资源通信
3、Servlet框架涉及到的两个JAR包:
javax.servlet包:定义了所有的Servlet类都必须实现或扩展的通用接口和类。
javax.servlet.http包:定义了采用HTTP协议通信的HttpServlet类。
4、Servlet的相关类和Servlet的生命周期:

Servlet框架的核心是Javax.servlet.Servlet接口,所有的Servlet都必须实现这一个接口中定义的五个方法。

4.1、其中的三个方法代表了Servlet的生命周期:
init方法:初始化Servlet
service方法:响应客户请求
destroy方法:Servlet对象退出生命周期时,释放占用的资源
4.1.1、Servlet容器创建Servlet的时机:
① Servlet容器启动时自动装载某些Servlet

默认情况下,当Web客户第一次请求访问某个Servlet时,才创建这个Servlet的实例。如果设置了<servlet>元素的<load-on-startup>子元素,Servlet容器在启动Web应用时,将按照指定的顺序创建并初始化这个Servlet:

<servlet>
      <servlet-name>LoginServlet</servlet-name>
      <servlet-class>com.itzhai.login.LoginServlet</servlet-class>
      <load-on-startup>2</load-on-startup>
  </servlet>

可以在这种servlet中编写全局的初始化信息。

② Servlet容器启动后,客户首次向Servlet发送请求
③ Servlet类文件被更新后,重新装载Servlet

Servlet被装载后,Servlet容器创建一个Servlet实例并调用Servlet的init()方法进行初始化。在Servlet整个生命周期中,init方法只被调用一次。

4.1.2、Servlet的响应请求阶段:

对于到达Servlet容器的客户请求,Servlet容器创建特定于这个请求的ServletRequest和ServletResponse对象,然后调用service方法进行处理。service方法从ServletRequest对象中获取客户请求信息,处理请求,并通过ServletResponse对象返回根客户端响应结果。

4.1.3、Servlet的终止阶段:

当Web应用被终止或者Servlet容器结束运行时,或Servlet容器重新装载Servlet的新实例时,Servlet容器会先调用Servlet的destroy方法释放Servlet所占用的资源。

5、ServletRequest和ServletResponse接口
5.1、ServletRequest接口:

ServletRequest接口中封装了客户端请求信息,客户端正在使用的协议,还提供了直接以二进制读取客户端数据流的ServletInputStream。

ServletRequest子类提供了更多的和特点协议相关的数据,如HttpServletRequest。

ServletRequest接口的主要方法:

getAttribute
getContentType
getInputStream
getParameter
getRemoteAddr
getRemoteHost
getRemotePort
5.2、ServletResponse接口:

ServletResponse接口为Servlet提供了返回相应结果的方法。允许Servlet设置返回数据的长度和MIME类型,并提供输出流ServletOutputStream。

ServletResponse子类提供了更多的和特点协议相关的数据,如HttpServletResponse。

ServletResponse接口的主要方法:

getOutputStream
getWriter
getCharacterEncoding
getContentType
setContentType
6、Servlet核心API及其的继承关系图:

6.1、Servlet类:
public interface Servlet
Defines methods that all servlets must implement. 
A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol.
To implement this interface, you can write a generic servlet that extends javax.servlet.GenericServlet or an HTTP servlet that extends javax.servlet.http.HttpServlet.
This interface defines methods to initialize a servlet, to service requests, and to remove a servlet from the server. These are known as life-cycle methods and are called in the following sequence:
1. The servlet is constructed, then initialized with the init method.
2. Any calls from clients to the service method are handled.
3. The servlet is taken out of service, then destroyed with the destroy method, then garbage collected and finalized.
Servlet的相关方法:
service
void service(ServletRequest req,
             ServletResponse res)
             throws ServletException,
                    IOException
Called by the servlet container to allow the servlet to respond to a request. 
This method is only called after the servlet's init() method has completed successfully.
6.2、通用的Servlet GenericServlet类:
public abstract class GenericServlet
extends Object
implements Servlet, ServletConfig, Serializable
Defines a generic, protocol-independent servlet. To write an HTTP servlet for use on the Web, extend HttpServlet instead. 
GenericServlet implements the Servlet and ServletConfig interfaces. GenericServlet may be directly extended by a servlet, although it's more common to extend a protocol-specific subclass such as HttpServlet.
6.3、HttpServlet类:
public abstract class HttpServlet
extends GenericServlet
implements Serializable
Provides an abstract class to be subclassed to create an HTTP servlet suitable for a Web site. A subclass of HttpServlet must override at least one method, usually one of these:
• doGet, if the servlet supports HTTP GET requests
• doPost, for HTTP POST requests
• doPut, for HTTP PUT requests
• doDelete, for HTTP DELETE requests
• init and destroy, to manage resources that are held for the life of the servlet
• getServletInfo, which the servlet uses to provide information about itself
There's almost no reason to override the service method. service handles standard HTTP requests by dispatching them to the handler methods for each HTTP request type (the doXXX methods listed above).
Likewise, there's almost no reason to override the doOptions and doTrace methods.
6.4、HttpServlet类中各个方法的调用顺序:

首先调用Service方法,再根据请求信息,调用具体的getGet或doPost等方法。

由于Servlet是运行在多线程的服务器,所有需要特别处理并发共享的资源。

每个Servlet都需要实现Servlet接口。GenericServlet是一个通用的,不特定于协议的Servlet,其实现了Servlet接口,而HttpServlet继承与GenericServlet,实现了域HTTP协议相关的操作,所以我们定义的Servlet只需要直接继承HttpServlet即可。

除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/java-web-notes-servlet-life-cycle-of-the-core-api-technology-introduced-class-method-call-sequence.html
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 11/10
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    一条评论
给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 jQuery使用load函数访问Struts2中的Action实现局部刷新和注册事件 2011/5/28
2 Intent的基本作用和在程序中的用法 2011/7/12
3 Callable 和 Future实现线程等待 2012/7/30
4 Android中使用SAX解析XML文件 2011/7/12
5 jQuery插件实现的方法和原理简单说明 2012/8/8
6 学习计算机的一些方法,避免误入歧途 2011/5/4
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.