简介

运行在服务器上的程序,作为来自 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层
Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容
单例,非线程安全
尽可能不创建成员变量,因为成员变量多个线程会共享
如果非要创建,那么创建功能性的,只读

功能

读取客户端发送的显式的数据、各类表单
读取客户端发送的隐式的 HTTP 请求数据。包括 cookies、媒体类型和浏览器能理解的压缩格式等等
处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应
发送显式的数据(即文档)到客户端。文档的格式多样,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等
发送隐式的 HTTP 响应到客户端。包括告诉客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务

生命周期

  • init()初始化
    • 被设计成只调用一次
    • 在第一次创建 Servlet 时被调用,用于一次性初始化;或Tomcat启动时被创建(web.xml配置)
    • Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,也可以指定 Servlet 在服务器第一次启动时被加载
    • 该方法可以创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期
  • service()处理客户端请求
    • 执行实际任务的主要方法
    • Servlet容器(即 Web 服务器)调用该方法来处理请求,并把格式化的响应写回给客户端
    • 当用户调用一个 Servlet时,就会创建一个 Servlet 实例,每个请求产生一个新的线程,适当的时候移交给 doGet或 doPost方法
  • destroy()终止
    • 只会被调用一次,轻易不会被销毁,通常会在Tomcat关闭时销毁
    • 让Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似清理活动
    • 在 Servlet 生命周期结束时被调用,在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收
    • Servlet 是由 JVM 的垃圾回收器进行垃圾回收的

servlet生命周期一.png
servlet生命周期二.png

Servlet参数对象

  • ServletRequest:封装了请求信息
  • ServletResponse:用于向客户端响应
  • ServletContext:可以在多个Servlet中共享数据
  • ServletConfig:与web.xml中的对应

    • ,初始化参数。ServletConfig的个体InitParameter(String)
    • getInitParameterNames(),该方法返回一个Enumeration对象,即返回所有初始化参数的名称
    • String getServletName(),它返回的是元素的值
    • ServletContext getServletContext(),它可以获取Servlet上下文对象

      拦截器Interceptor机制

  • 过滤-拦截-Action处理-拦截-过滤

  • interceptor的执行顺序大致为
    1. 请求达到 DispatcherServlet
    2. DispatcherServlet发送至 Interceptor,执行 preHandle
    3. 请求到达 Controller
    4. 请求结束后,postHandle执行