什么是 Servlet?

Servlet (Server Applet) 被称为小服务程序或服务连接器,是 Java Servlet 的简称,通常指用 Java 编写的服务器端程序,主要用于交互式地浏览、生成数据和生成动态 Web 内容,具有独立于平台和协议的特性。

Servlet 的生命周期

Servlet 是 Java Web 应用程序中的一个重要组件,用于处理客户端请求并生成响应。Servlet 的生命周期描述了它从创建到销毁的整个过程。值得注意的是,Servlet 实例通常会被缓存在内存中以提高性能。只有在特定情况下(如服务器重启或 Web 应用程序被卸载),Servlet 才会被销毁。此外,Servlet 的生命周期由 Web 容器管理,开发人员无需手动创建或销毁 Servlet 实例。

当客户端向服务器发送请求时,Web 容器会检查是否已经有相应的 Servlet 实例。如果没有,则会加载并实例化该 Servlet。

Web 容器会加载 Servlet 类到内存中,并为其分配必要的资源。这个过程只会发生一次,除非 Servlet 被重新加载。

在 Servlet 第一次被创建时,Web 容器会调用其 init () 方法进行初始化。这个方法只会被调用一次,可以在其中执行一些初始化操作,如加载配置文件、建立数据库连接等。

每当有新的请求到达时,Web 容器会调用 Servlet 的 service () 方法。根据不同的请求方法(GET、POST、HEAD、PUT、TRACE、DELETE、OPTIONS),service () 方法会相应地调用 doGet ()、doPost ()、doHead ()、doPut ()、doTrace ()、doDelete () 或 doOptions () 方法。这些方法用于处理具体的请求逻辑。

当 Web 容器决定卸载 Servlet 时,会调用其 destroy () 方法。这个方法只会被调用一次,可以在其中执行一些清理操作,如关闭数据库连接、释放资源等。

Java Servlet

Java Servlet 是一种服务器端技术,用于扩展 Web 服务器的功能。

Servlet 是一个 Java 类

Servlet 是一个 Java 类

它遵循 Servlet 生命周期规范。每个 Servlet 都是一个独立的实例,用于处理客户端请求。
Servlet 主要用于扩展 Web 服务器

Servlet 主要用于扩展 Web 服务器

虽然 Servlet 可以响应任何类型的请求,但它们通常仅在需要扩展 Web 服务器功能时使用,例如处理动态页面、处理表单数据、维护会话等。
Servlet 技术定义了一个特定于 HTTP 的 Servlet 类

Servlet 技术定义了一个特定于 HTTP 的 Servlet 类

这意味着 Servlet 类被设计为处理 HTTP 请求和响应。它们可以访问 HTTP 请求数据、设置 HTTP 响应头和响应体。
Servlet 生命周期

Servlet 生命周期

包括初始化、服务和销毁阶段。Web 服务器在需要时加载 Servlet 实例并调用其 init () 方法进行初始化。每次收到请求时,服务器都会调用 Servlet 实例的 service () 方法来处理请求。最后,当 Web 服务器卸载 Servlet 时,它会调用 destroy () 方法进行清理。
Servlet 容器

Servlet 容器

负责管理 Servlet 的生命周期。常见的 Servlet 容器包括 Apache Tomcat、Jetty 和 GlassFish。这些容器提供了运行 Servlet 所需的环境和资源。
Servlet 可以生成动态内容

Servlet 可以生成动态内容

如 HTML、XML 或其他格式的数据。它们通常与其他 Java 技术(如 JSP、EL、JSTL)结合使用,以提供更丰富的 Web 应用程序功能。

Servlet 容器

Servlet 容器是指提供了 Servlet 功能的服务器,对于 Web 程序而言,Servlet 容器能够提供一些编程基础设施,作用类似于桌面程序里的操作系统。Servlet 容器的主要作用是管理 Servlet 生命周期、处理 HTTP 请求和响应、提供安全性和并发支持等。选择合适的 Servlet 容器对于 Web 应用程序的性能、可靠性和安全性至关重要。

Tomcat

Apache 开源的 Servlet 容器,轻量级、高性能、跨平台,是最流行的 Servlet 容器之一。


Jetty

另一个流行的开源 Servlet 容器,被广泛应用于各种 Web 应用程序和服务器中。


Resin

专业级的商业 Servlet 容器,提供高性能和高可靠性。


Oracle Application Server

Oracle 公司的应用服务器产品,包含 Servlet 容器功能。


WebLogic Server

Oracle 公司的另一款应用服务器产品,同样包含 Servlet 容器功能。


GlassFish

开源的 Servlet 容器,由 Oracle 公司开发和维护。


WebSphere

IBM 公司的应用服务器产品,包含 Servlet 容器功能。


JBoss

开源的应用服务器,由 Red Hat 公司维护,同时也是一款 Servlet 容器。


Servlet 工作原理

Servlet 是一种运行在服务器端的 Java 小程序,用于处理客户端发出的请求并生成响应。

接收 HTTP 请求

接收 HTTP 请求

Servlet 容器接收到浏览器或其他客户端向其发出的 HTTP 请求。
创建 Servlet 实例

创建 Servlet 实例

在第一次访问时,Servlet 容器会产生 Servlet 对象的实例。这个实例将在整个生命周期中被重复利用,以提高性能。
创建请求和响应对象

创建请求和响应对象

Servlet 容器创建一个 HttpServletRequest 对象,用于封装客户端的请求信息,如请求头、请求参数等。同时还创建一个 HttpServletResponse 对象,用于封装服务器端的响应信息。
调用 Servlet 的 service 方法

调用 Servlet 的 service 方法

Servlet 容器调用 HttpServlet 对象的 service 方法,并向该方法传递 HttpServletRequest 对象和 HttpServletResponse 对象作为参数。
处理请求和生成响应

处理请求和生成响应

在 service 方法中,HttpServlet 可以调用 HttpServletRequest 对象的方法来获取 HTTP 请求信息,如请求方法、请求参数等。然后根据请求信息进行相应的业务逻辑处理,并调用 HttpServletResponse 对象的方法来生成响应数据,如设置响应头、写入响应体等。
发送响应

发送响应

Servlet 容器将 HttpServlet 生成的响应结果传递给浏览器或其他客户端,完成一次请求-响应周期。

Servlet 和 JSP 的区别

Servlet 和 JSP 都是 Java Web 应用程序中常用的技术,但它们在设计理念和用途上存在一些重要区别。总的来说,Servlet 更适合处理应用程序的控制逻辑,而 JSP 更适合生成动态网页视图。在实际开发中,通常会将它们结合使用,Servlet 负责处理请求和响应,JSP 负责生成视图。

编译方式

JSP 需要经过编译才能成为 Servlet 类。JSP 文件在第一次被访问时会被 JSP 容器编译成 Servlet 类,之后就可以像普通 Servlet 一样运行。


使用场景

在逻辑控制方面,Servlet 的使用率更高,因为它可以很好地处理请求和响应。而在页面视图方面,JSP 的使用率更高,因为它可以方便地嵌入 HTML 和 Java 代码。


内置对象

JSP 拥有一些内置对象,如 request、response、session 等,可以直接在 JSP 页面中使用。而在 Servlet 中,需要通过 HttpServletRequest 和 HttpServletResponse 对象来获取这些对象。


代码结构

Servlet 是一个完整的 Java 类,所有的应用逻辑都写在 Java 文件中。而 JSP 则是一个混合了 HTML 和 Java 代码的文件,可以在 HTML 中嵌入 Java 代码。


分离原则

Servlet 遵循了 MVC 设计模式中的"控制器"角色,将应用逻辑与表示层分离。而 JSP 则更多地扮演"视图"的角色,将 Java 代码和 HTML 混合在一起。


文件扩展名

Servlet 是一个 Java 类文件,扩展名为 .java。而 JSP 文件的扩展名为 .jsp,它将 Java 代码和 HTML 组合在一个文件中。

亚马逊云科技中国峰会

6 月 19 日 - 20 日|上海世博中心

聚焦生成式 AI 从技术爆发迈向行业深耕的跨越

亚马逊云科技在 Servlet 应用中的优势

简单易行无限扩展

Amazon Elastic Beanstalk 是一项易于使用的服务,用于在熟悉的服务器(例如 Apache、Nginx、Passenger 和 IIS)上部署和扩展使用 Java、.NET、PHP、Node.js、Python、Ruby、GO 和 Docker 开发的 Web 应用程序和服务。您只需上传代码,Elastic Beanstalk 即可自动处理从容量预置、负载均衡、自动扩展到应用程序运行状况监控的部署。同时,您能够完全控制为应用程序提供支持的亚马逊云科技资源,并可以随时访问底层资源。

Elastic Beanstalk 支持使用 Servlet 技术开发的 Java Web 应用程序。Servlet 是 Java 企业版 (Java EE) 规范的一部分,它定义了一种用于扩展 Web 服务器功能的标准方法。Servlet 可以响应特定类型的网络请求,读取请求数据、生成响应并将其发送回客户端。在 Elastic Beanstalk 中部署 Servlet 应用程序时,您只需上传打包的 Web 应用程序归档文件 (WAR),Elastic Beanstalk 会自动配置 Tomcat 或其他 Servlet 容器来运行您的应用程序。

简单易行无限扩展

发现、部署、发布和共享无服务器应用程序

Amazon Serverless Application Repository 是无服务器应用程序的托管存储库。它使团队、组织和个人开发人员能够存储和共享可重用的应用程序,并以强大的新方法轻松组装和部署无服务器架构。利用 Serverless Application Repository,您无需在部署之前将源代码克隆、构建、打包或发布到亚马逊云科技。相反,您可以在无服务器架构中使用 Serverless Application Repository 中的预构建应用程序,帮助您和您的团队减少重复工作、确保遵循组织最佳实践,并更快地进入市场。

Serverless Application Repository 中的应用程序可以包含各种 Amazon Lambda 函数、Amazon API Gateway API 定义、Amazon DynamoDB 表等资源。这些应用程序可以使用 Servlet 技术,将 Java Web 应用程序部署为无服务器架构。通过将 Servlet 应用程序打包为 Amazon Serverless Application Model (SAM) 模板,您可以将其发布到 Serverless Application Repository 中供其他人使用和部署。

发现、部署、发布和共享无服务器应用程序

云资源和应用程序的完全可见性

Amazon CloudWatch 是一项针对亚马逊云科技云资源和在亚马逊云科技上运行的应用程序的监控服务。您可以使用 Amazon CloudWatch 来收集和跟踪各项指标、收集和监控日志文件、设置警报以及自动应对亚马逊云科技资源的更改。Amazon CloudWatch 可以监控各种亚马逊云科技资源,例如 Amazon EC2 实例、Amazon DynamoDB 表、Amazon RDS 数据库实例、应用程序和服务生成的自定义指标以及应用程序生成的所有日志文件。

对于使用 Servlet 技术开发的 Java Web 应用程序,您可以使用 CloudWatch 来监控应用程序的运行状况和性能。例如,您可以收集 Servlet 容器(如 Tomcat)的指标,包括请求计数、错误计数、线程计数等。您还可以将应用程序日志发送到 CloudWatch Logs,以便集中查看和分析日志数据。通过设置 CloudWatch 警报,您可以在发生特定事件(如请求错误率过高)时得到通知,从而及时采取措施。

云资源和应用程序的完全可见性

Servlet 的优势

Servlet 提供了多项优势。它为基于 Web 的应用程序提供了高度抽象,允许 MVC 用户根据需要编写自己的实现。Servlet 将前端代码与 Servlet API 解耦,从而使前端代码更加简洁。与 Servlet API 的紧密耦合也确保了开发人员可以继续使用 Servlet API 的各种功能。Servlet 可用于使用 Java 平台为 Web 服务器添加动态内容,生成的内容通常为 HTML、XML 或 JSON。此外,JSP 编译器可以自动从 Jakarta Server Pages (JSP) 生成 Servlet,实现了 Servlet 的处理逻辑与 JSP 的表现层之间的明确分离。

Servlet 的优势

Servlet 的安全性保证方式

认证和授权控制

Servlet 可以实现基于角色的访问控制 (RBAC) 和基于会话的认证,确保只有经过身份验证和授权的用户才能访问敏感数据和功能。


输入验证和编码

Servlet 应该对所有用户输入进行严格的验证和净化,防止注入攻击、跨站脚本 (XSS) 等安全漏洞。输出时也应对数据进行适当编码。


会话管理和 CSRF 防护

Servlet 需要正确管理会话,防止会话固定攻击和会话劫持。同时应采取措施防御跨站请求伪造 (CSRF) 攻击。


安全头和 HTTPS

Servlet 应该设置适当的安全 HTTP 头,如 X-XSS-Protection 和 X-Frame-Options。对于敏感数据传输,应使用 HTTPS 加密通信。


最小权限原则

Servlet 应该以最小所需的权限运行,避免授予不必要的权限,降低被攻击时的风险。


安全审计和日志记录

Servlet 应记录安全相关事件的详细日志,以便审计和追踪潜在的安全问题。


及时修补漏洞

Servlet 及其所有依赖组件应及时更新到最新版本,修复已知的安全漏洞。

Servlet 的部署方式

Web 容器部署

Servlet 可以部署并运行在 Web 容器中,Web 容器是 Web 服务器的一个组件,负责与 Servlet 交互。Web 容器负责管理 Servlet 的生命周期、将 URL 映射到特定的 Servlet 以及确保请求者具有正确的访问权限。

Web 容器部署

Web.xml 配置

在 Servlet 3.0 规范之前,Servlet 的配置和 URL 映射是在 web.xml 文件中完成的。对于使用 Servlet 3.0 或更高版本的应用程序,可以使用 @WebServlet 注解来将 Servlet 映射到 URL 模式。

Web.xml 配置

WAR 包部署

Servlet 也可以打包在 WAR 文件中作为 Web 应用程序进行部署。WAR 文件是一种用于分发 Web 应用程序的归档文件格式,它包含了 Servlet、JSP、HTML、CSS 和其他资源文件。

WAR 包部署

JSP 编译部署

Servlet 还可以由 JSP 编译器自动生成,来自 Jakarta Server Pages (JSP)。虽然 Servlet 通常在 Java 代码中嵌入 HTML,但 JSP 则是在 HTML 中嵌入 Java 代码。将后端逻辑从 JSP 移到 Servlet 的 Java 代码中被认为是更好的实践。

JSP 编译部署

欢迎加入亚马逊云科技培训中心

从 0 到 1 轻松上手云服务,获取更多官方开发资源及培训教程

快速上手训练营

第一课:亚马逊云科技简介

本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。

亚马逊云科技技术讲师:李锦鸿

第二课:存储与数据库服务

您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。

亚马逊云科技资深技术讲师:周一川

第三课:安全、身份和访问管理

在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。

亚马逊云科技技术讲师:马仲凯

了解更多入门学习计划 »

快速上手训练营

账单设置与查看

账单设置与查看

动手实操

快速上手云上无服务器化的 MySQL 数据库

本教程将引导您创建一个Aurora Serverless 数据库并且连接上它。

部署时间:10 分钟

启动一台基于 Graviton2 的 EC2 实例

本教程将为您讲解如何在云控制台上启动一台基于 Graviton2 的 EC2 实例。

部署时间:5 分钟

使用 Amazon Systems Manager 进行云资源统一跟踪和管理

在这个快速上手教程中,您将学会如何使用 Amazon Systems Manager 在 Amazon EC2 实例上远程运行命令。

部署时间:10 分钟

查看更多教程 »

动手实操

快速注册账号 享用免费套餐

跟随注册步骤详解,三分钟快速创建账号,领取免费权益

打开中国区账号注册页面

01 填写您 注册账号的邮箱,点击“继续”

02 查看您的 注册账号邮箱

注: 发件箱 no-reply@register.signin.amazonaws.com.cn

03 输入 邮箱中收到的验证码,点击“继续”

注: 该链接中的内容显示语言是与您的网页浏览器设置相一致的,您可以根据需要自行调整语言栏。

立即开始注册 »

image

填写用户名密码

01 请设置您的 账号用户名

02 为您的帐号 设置密码

03 重新 输入密码

立即开始注册 »

图片

填写账号联系人以及公司信息

01 填写公司联系人 姓名全称

02 填写公司联系人的 联系电话

03 填写 公司名称

注: 公司名称请务必与您所提供的营业执照公司名称保持一致

04 填写 公司办公地址

注: 省份/自治区/直辖市 - 城市 - 区 - 街道门牌号以及楼层信息 - 邮政编码

05 请选择 是否需要发票

注: *附件-申请发票流程 供您参考

06 点击查看 客户协议 勾选方框表示您已阅读,并同意客户协议的条款

立即开始注册 »

图片

企业信息验证

01 在此上传 企业注册执照

02 请填写网络安全负责人的 姓名

注: 该字段务必与您下方提供的身份证号匹配或与证件上的姓名保持一致

03 请填写网络安全负责人的 联系方式

注: 有效的电子邮件地址 - 有效的中国内地 手机号码 - 座机号码(如无座机,请填写正确有效的手机号码)

04 在此上传网络安全负责人的 身份证件

注: 当您选择证件类型为“身份证”时,您需要填写正确的身份证号码,选择其他证件类型时,您需要上传证件扫描稿

立即开始注册 »

图片

手机验证与支持计划

01 在此填写 手机号

02 请输入您收到的 4 位 验证码

03 请点击 继续

04 请根据需求 选择一个支持计划

立即开始注册 »

图片
Summit

亚马逊云科技中国峰会即将开幕!

6 月 19 日 - 20 日|上海世博中心

与 12,000+ 云计算从业者齐聚一堂,探索全球行业应用实践,共话未来!