目录

Servlet简介

Servlet 架构图

Servlet 任务

Servlet的生命周期

init() 方法

service() 方法

doGet() 方法

doPost() 方法

destroy() 方法

Servlet 生命周期架构图

Servlet的线程安全问题


Servlet简介

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

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Java Servlet 通常情况下与使用 CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效果。但是相比于 CGI,Servlet 有以下几点优势:

  • 性能明显更好。
  • Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。
  • Servlet 是独立于平台的,因为它们是用 Java 编写的。
  • 服务器上的 Java 安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet 是可信的。
  • Java 类库的全部功能对 Servlet 来说都是可用的。它可以通过 sockets 和 RMI 机制与 applets、数据库或其他软件进行交互。

Servlet 架构图

Servlet 任务

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

Servlet的生命周期

Servlet对象的创建 Servlet对象的初始化 Servlet对象服务的执行 最终Servlet对象被销毁的整个过程

  • Servlet 初始化后调用 init () 方法
  • Servlet 调用 service() 方法来处理客户端的请求
  • Servlet 销毁前调用 destroy() 方法
  • Servlet 最终是由 JVM 的垃圾回收器进行垃圾回收的

init() 方法

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

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

当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

service() 方法

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

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

doGet() 方法

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

doPost() 方法

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

destroy() 方法

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

Servlet 生命周期架构图

Servlet的线程安全问题

Servlet是线程不安全的。因为Servlet是单例模式的,当不同的请求都调用这一个Servlet,只在堆里申请了一个对象空间,即只实例化了一次。所以,不管来了多少请求,都是这一个实例在处理。如果多个请求在同一时刻出现,就会并发执行。因而导致线程不安全。

Servlet的生命周期和线程安全问题相关推荐

  1. Servlet功能实现和执行过程、servlet的生命周期、Servlet线程安全问题、Servlet的三种映射方式、ServletConfig、ServletContext

    1. 什么是Servlet? Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一. 第一:Servlet是一个运行在web服务端的java小程序 第二:它 ...

  2. 创建线程的几种方式?JSP的九大内置对象及作用分别是什么?servlet的生命周期及常用方法?转发和重定向区别?ajax书写方式及内部主要参数都有哪些

    文章目录 1 , 创建线程的几种方式? 问题扩展: 2 ,JSP的九大内置对象及作用分别是什么? (1) 问题分析: (2) 核心答案讲解: 1.request对象 2.response对象 3.se ...

  3. Servlet的生命周期和工作原理

    原文 一.Servlet生命周期分为三个阶段: 1).初始化阶段:调用init()方法 2).响应客户端请求阶段:调用service()方法 3).终止阶段:调用destroy()方法         ...

  4. java之Servlet的生命周期

    Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...

  5. 框架:Servlet的生命周期

    Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...

  6. Java20-day11【实现多线程(进程、线程-调度-控制-生命周期)、线程同步(同步代码块、线程安全、Lock)、生产者消费者(模式概述、案例)】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  7. Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。

    Servlet的生命周期分为5个阶段:加载.创建.初始化.处理客户请求.卸载. (1)加载:Servlet容器(Tomcat)通过类加载器加载servlet文件(.class) (2)创建:通过调用s ...

  8. 阅文 java面试题,阅文笔试:讲讲servlet的生命周期

    大家好,我是勾玉! 该问来自2021届阅文Java方向笔试卷,servlet想必大家都有所了解,这是一个非常重要的知识点,希望大家多多关注. servlet的生命周期可分为初始化.响应请求.终止三个阶 ...

  9. java servlet的生命周期_Java Servlet系列之Servlet生命周期

    Servlet生命周期定义了一个Servlet如何被加载.初始化,以及它怎样接收请求.响应请求,提供服务.在讨论Servlet生命周期之前,先让我们来看一下这几个方法: 1. init()方法 在Se ...

最新文章

  1. 里程碑:DTrace 切换到 GPL 许可证
  2. dex文件结构(三):dex文件差分包分成
  3. 皮一皮:21世纪了还有这样的事情?
  4. 读----------空乏的估算
  5. sigmoid函数解决溢出_梯度消失和梯度爆炸及解决方法
  6. 使用docker的mysql镜像
  7. JAM - get self detail information
  8. 你用好了没?K8 CPU使用指南
  9. Android,EditText,InuputType
  10. conda 环境迁移
  11. unity 插件uniwebview 内嵌H5游戏
  12. JS入门到精通完整版
  13. 饥荒dns服务器未响应,DNS服务器未响应怎么办
  14. JAVA核心知识点--元注解详解
  15. Mindspore | lenet 模型代码
  16. 给定一个数组,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择某一天买入这只股票,并选择在未来的一个不同的日子卖出该股票。【LeetCode Hot 100】
  17. 架构师小跟班:教你从零开始申请和配置七牛云免费OSS对象存储(不能再详细了)
  18. 超市管理系统2.5.1版本升级
  19. 2022年4月线上终端药品增长迅猛,市场政策合规进程加快
  20. Git 详解及常用命令

热门文章

  1. 【Java】hashMap的应用---姓氏统计
  2. 华为笔记本锐龙版和linux,华为 MateBook 13 锐龙版 详细体验(对比小新Pro)
  3. 软件测试简历,别再做无用的简历了
  4. 02 Android 植物人大战僵尸-太阳花和豌豆射手卡片
  5. Link2SD ,内存自定义映射软件,功能比较灵活。
  6. zip解压缩,亲测有效!!!
  7. ROS py文件编译错误“ catkin_install_python() called with non-existing file”
  8. html 打开腾讯qq,qq软件管理器 QQ应用管理器里面的腾讯软件打不开
  9. Linux系统 虚拟化篇之KVM
  10. 电子技术背后的数学本质【3】(放大器电路噪声的计算和去除)