第3章 高级Web开发技术
3.1 Servlet
3.1.1 Servlet简介
Java Servlet是运行在Web服务器或应用服务器上的程序,作为来自Web浏览器的请求和HTTP服务器上的数据库或应用程序之间的中间层。
在图3-1中可以确定Servlet在网络架构中的位置。
图3-1 Servlet在网络架构中的位置
使用 Servlet可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
Servlet 有以下几点优势。
●性能更好。
●Servlet在Web服务器的地址空间内执行,这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
●Servlet是独立于平台的,因为它们是用Java编写的。
●由于服务器上的Java安全管理器具有一系列限制,以保护服务器计算机上的资源,因此Servlet是可信的。
●Java类库的全部功能对于Servlet来说都是可用的,Servlet可以通过套接字和RMI机制与Applet、数据库或其他软件进行交互。
3.1.2 Servlet的生命周期
讲述Servlet的生命周期(见图3-2)的主要目的是使读者能够理解Servlet代码的结构以及运行过程。
图3-2 Servlet的生命周期
通过图3-2可知,Servlet的生命周期为从创建直到毁灭的整个过程。其中主要包含以下几个过程。
●Servlet通过调用 init()方法进行初始化。
●Servlet调用service()方法来处理客户端请求。
●Servlet通过调用destroy()方法终止(结束)。
Servlet是由JVM的垃圾回收器进行回收的。
Servlet的工作过程如图3-3所示。
在图3-3中可观察到以下几点。
●第一个到达服务器的HTTP请求被委派到Servlet容器。
●Servlet容器在调用service()方法之前加载Servlet。
●Servlet容器处理由多个线程产生的多个请求,每个线程执行单个Servlet 实例的service()方法。
接下来详细讲述一下上述过程中所做的工作。
1.init()方法
init()方法只调用一次。它在第一次创建Servlet时调用,在后续的每次用户请求中不再调用,仅用于一次性初始化。
图3-3 Servlet的工作过程
Servlet创建于用户第一次调用对应该Servlet的URL时,但是也可以指定Servlet在服务器第一次启动时加载。
当用户调用一个Servlet时,就会创建一个Servlet实例。每一个用户请求都会产生一个新线程,适当的时候将其移交给doGet或doPost方法。init()方法可简单地创建或加载一些数据,这些数据将作用于Servlet的整个生命周期。
init()方法的定义如下。
public void init() throws ServletException { // 初始化代码 } |
2.service()方法
service()方法是执行实际任务的主要方法。Servlet 容器(Tomcat)调用 service()方法来处理来自客户端(浏览器)的请求,并把已格式化的响应写回客户端。
每次服务器接收到一个Servlet请求时,它都会产生一个新的线程并调用服务。service()方法检查HTTP请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用doGet、doPost、doPut和doDelete等方法。
service()方法的定义如下。
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{ } |
3.doGet()方法
service()方法会在适当的时候调用 doGet、doPost、doPut、doDelete 等方法,所以在代码中不用对service()方法执行任何操作,只需要根据客户端的请求类型重写doGet()或doPost()即可。
GET请求来自URL的正常请求,或者来自未指定METHOD的HTML表单,它由doGet()方法来处理。
doGet()方法的定义如下。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 } |
4.doPost()方法
POST请求来自一个专门指定METHOD为POST的HTML表单,它由doPost()方法来处理。
doPost()方法的定义如下。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代码 } |
5.destroy()方法
destroy()方法只会调用一次,并且是在Servlet的生命周期结束时调用。destroy()方法可以让Servlet关闭数据库连接,停止后台线程,把Cookie列表或单击计数器写入磁盘,并执行其他类似的清理活动。
在调用destroy()方法之后,Servlet对象被标记为垃圾回收。
destroy()方法的定义如下所示。
public void destroy() { // 终止代码 } |
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。