《深入剖析Tomcat》一2.1 javax.servlet.Servlet接口

2.1 javax.servlet.Servlet接口

Servlet编程需要使用到javax.servlet和javax.servlet.http两个包下的接口和类。在所有的类和接口中,javax.servlet.servlet接口是最为重要。所有的servlet程序都必须实现实现该接口或继承自实现了该接口的类。
在Servlet接口中声明了5个方法,方法签名如下:

在Servlet接口中声明的5个方法里,init()、service()和destroy()方法是与servlet的生命周期相关的方法。当实例化某个servlet类后,servlet容器会调用其init()方法进行初始化。servlet容器只会调用该方法一次,调用后则可以执行服务方法了。在servlet接收任何请求之前,必须是经过正确初始化的。servlet程序员可以覆盖此方法,在其中编写仅需要执行一次的初始化代码,例如载入数据库驱动程序、初始化默认值等。一般情况下,init()方法可以留空。

当servlet的一个客户端请求到达后,servlet容器就调用相应的servlet的service()方法,并将javax.servlet.servletRequest对象和javax.servlet.servletResponse对象作为参数传入。ServletRequest对象包含客户端的HTTP请求的信息,ServletResponse对象则封装servlet的响应信息。在servlet对象的整个生命周期内,service()方法会被多次调用。

在将servlet实例从服务中移除前,servlet容器会调用servlet实例的destroy()方法。一般当servlet容器关闭或servlet容器要释放内存时,才会将servlet实例移除,而且只有当servlet实例的service()方法中的所有线程都退出或执行超时后,才会调用destroy()方法。当servlet容器调用了某个servlet实例的destroy()方法后,它就不会再调用该servlet实例的service()方法了。调用destroy()方法让servlet对象有机会去清理自身持有的资源,如内存、文件句柄和线程等,确保所有的持久化状态与内存中该servlet对象的当前状态同步。

代码清单2-1展示了名为PrimitiveServlet的servlet的代码,该servlet非常简单,可以用来测试本章中的servlet容器应用程序。PrimitiveServlet类实现了javax.servlet.Servlet接口(所有的servlet都要实现该接口),提供了Servlet接口中声明的5个方法的实现。PrimitiveServlet类所做的事情非常简单。每次调用init()、service()和destroy()方法时,Servlet都会将方法名写入标准控制台中。此外,service()方法会从servletResponse对象中获取java.io.PrintWriter对象,并将字符串发送到客户端浏览器。

时间: 2024-11-01 01:52:44

《深入剖析Tomcat》一2.1 javax.servlet.Servlet接口的相关文章

深入剖析tomcat之一个简单的servlet容器

上一篇,我们讲解了如果开发一个简单的Http服务器,这一篇,我们扩展一下,让我们的服务器具备servlet的解析功能. 简单介绍下Servlet接口 如果我们想要自定义一个Servlet,那么我们必须继承Servlet,并且实现下面几个重要的方法 public void init(ServletConfig config) throws ServletException public void service(ServletRequest request,ServletResponse resp

《深入剖析Tomcat》一导读

前 言 欢迎阅读本书.本书剖析了Tomcat 4.1.12版本和Tomcat 5.0.18版本的基本结构,并解释了其servlet容器Catalina的内部工作原理.Catalina是开源.免费的,也是最受欢迎的servlet容器之一.Tomcat本身是一个复杂的系统,包含了许多不同的组件.若你想学习Tomcat的工作方式,应该从了解这些组件开始.本书描述Tomcat的总体结构,并针对每个组件建立一个简单的版本,使你更好地理解组件的工作机制,之后对真实组件进行描述."本书结构"一节会对

《深入剖析Tomcat》一第 3 章 连 接 器

第 3 章 连 接 器 正如前言所述,Catalina中有两个主要的模块,连接器(connector)和容器(container).在本章中,将会建立一个连接器来增强第2章中的应用程序的功能,用一种更好的方法来创建request对和response对象.兼容Servlet 2.3和2.4规范的连接器必须要负责创建javax.servlet.http.HttpServletRequest对象和javax.servlet.http.HttpServletResponse的实例,并将它们作为servl

《深入剖析Tomcat》一2.2 应用程序 1

2.2 应用程序 1 下面从servlet容器的角度审视servlet程序的开发.简单来说,对一个Servlet的每个HTTP请求,一个功能齐全的servlet容器有以下几件事要做: 当第一次调用某个servlet时,要载入该servlet类,并调用其init()方法(仅此一次): 针对每个request请求,创建一个javax.servlet.ServletRequest实例和一个javax.servlet.ServletResponse实例: 调用该servlet的service()方法,将

浅析javax.servlet.Servlet,ServletContext接口

1.ServletConfig接口用于描述Servlet本身的相关配置信息.ServletContext接口用于描述应用程序(server.xml中的一个Context配置,即一个虚拟目录)的相关信息. 2.Servlet配置初始化参数,例如: 复制代码 代码如下: <servlet>  <servlet-name>XXX</servlet-name>  <servlet-class>Xxx</servlet-class>  <init-p

javaweb-怎么找javax中的接口在tomcat中的实现类是哪个?

问题描述 怎么找javax中的接口在tomcat中的实现类是哪个? 就是如何快速找到在tomcat中是哪个类实现了javax中的某个接口. 比如StandardSession类实现了HttpSession接口. 每次我都要百度. 解决方案 下载个sublime,然后用打开文件夹功能打开tomcat的源码文件夹,然后有个'find in folder'功能.如果查找接口a的实现类,可以直接搜索implements interfaceA,就能找到了.

jsp-java.lang.NoClassDefFoundError: javax/servlet/Servlet

问题描述 java.lang.NoClassDefFoundError: javax/servlet/Servlet tomcat6.0和MyEclipse发布网站服务端,总是报这个错误,百度了很多方法都没有解决掉问题,求帮助 type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. ex

浅析javax.servlet.Servlet,ServletContext接口_java

1.ServletConfig接口用于描述Servlet本身的相关配置信息.ServletContext接口用于描述应用程序(server.xml中的一个Context配置,即一个虚拟目录)的相关信息.2.Servlet配置初始化参数,例如: 复制代码 代码如下: <servlet> <servlet-name>XXX</servlet-name> <servlet-class>Xxx</servlet-class> <init-param

《深入剖析Tomcat》一2.4 小结

2.4 小结 本章总讨论了两个servlet容器,它们既可以处理静态资源请求,也可以处理像PrimitiveServlet 一样简单的servlet资源请求,并给出了与javax.servlet.Servlet接口及其相关类型的一些背景信息.