Servlet简介

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

Servlet生命周期可以被定义为从创建到毁灭的整个过程。下面是Servlet的过程:

  1. 加载Servlet
  2. Servlet通过调用init()方法进行初始化
  3. Servlet调用service()方法来处理客户端的请求
  4. Servlet调用destroy()方法来终止(结束)

最后Servlet是由jvm的垃圾回收器进行垃圾回收的

加载Servlet

Servlet容器加载所执行的操作:

  1. 加载Servlet类
  2. 创建Servlet并进行实例化

如果Servlet不在前一阶段,它可能会延迟加载过程,因为要知道web容器确定需要Servlet来请求提供服务。

init()方法

init()方法被设计只能调用一次。它在第一次创建Servlet时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化。

Servlet创建于用户第一次调用对应于该Servlet的URL时也可以指定 Servlet 在服务器第一次启动时被加载。

当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,也就是说,每个用户的请求都会导致service方法被调用执行,其执行过程分别运行在不同的线程当中,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

init方法的定义如下:

public void init() throws ServletException {

  // 初始化代码...

}

service()方法

当servlet成功创建和初始化之后,调用service方法来处理用户的请求并返回响应。服务器将两个参数值传递给该方法。一个是HttpServletRequest类型的对象,该对象封装了用户的请求信息;另一个参数对象是HttpServletRespones类型的对象,该对象用来响应用户的请求。service方法可以被调用很多次,也就是说,当后续的用户请求该servlet时,服务器将启动一个新的线程,在该线程中servlet调用service方法响应用户的请求,即每个用户的请求都导致service方法被调用执行,调用过程运行在不同的线程当中,互不干扰。因此,不同线程的service方法中的局部变量互不干扰,一个线程改变了自己的service方法中局部变量的值不会影响其他进程的service方法中的局部变量。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法

public void service(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException{
}

service 方法在适当的时候调用 doGet、doPost、doPut、doDelete,所以不用对service()方法做任何动作,只需要根据来自客户端的请求类型来重写doGet()或者doPost()。

doGet()方法

GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代码
}

doPost() 方法

POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。

public void doPost(HttpServletRequest request,

                   HttpServletResponse response)

    throws ServletException, IOException {

    // Servlet 代码

}

destroy() 方法

destroy方法只会被调用一次,在Servlet生命周期结束的时候调用。destroy()方法可以让Servlet关闭数据库连接、停止后台线程、把Cookie列表或者点击计数器写入到磁盘,并且执行其他类似的清理活动。在调用destroy()方法之后Servlet对象被标记为垃圾回收。destroy方法的定义如下

  public void destroy() {
    // 终止化代码...
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值