ChatGPT解决这个技术问题 Extra ChatGPT

什么是 Java Servlet?

我阅读了很多文章来了解 Java servlet,但我没有成功。

能否请您简要介绍一下Java servlet(用简单的语言)。什么是小服务程序?有什么优势?

我无法理解服务器端编程语言(PHP、ASP)和 servlet 之间的区别。

Servlets 你可以看看。我认为这是细节和真实的。
坚持最后一个问题:“服务器端编程和 servlet 有什么区别”。 Servlet 是服务器的一部分,它接收例如 http 请求然后对其做出响应,例如将 html 页面发送回用户。它实际上是为用户构建最终视图的控制器(检查 MVC。所以它类似于 PHP 等技术,但这只是来自 Java。

J
Jon Skeet

servlet 只是一个响应特定类型的网络请求的类——最常见的是 HTTP 请求。基本上 servlet 通常用于实现 Web 应用程序 - 但也有各种框架在 servlet 之上运行(例如 Struts),以提供比“这是一个 HTTP 请求,写入这个 HTTP 响应”级别更高级别的抽象。提供。

Servlet 在处理网络端(例如解析 HTTP 请求、连接处理等)的 servlet 容器 中运行。最著名的开源 servlet 容器之一是 Tomcat


Servlet 是由 Web 服务器自身内部的 Web 服务器调用的 Java 代码片段。如果你想要看起来像 PHP 或 ASP 的东西,你需要 JSP(这是一种特殊的 servlet)
感谢您的回答,但我仍然无法真正使用 servlet,如果您可以通过示例来解释我们可以使用 servlet 的情况会更好。我不了解 servlet 的使用,就像其他服务器端编程语言无法做到的 servlet 一样。
@Hardik:并不是说他们可以做任何其他方式无法做到的事情。 Servlet 只是服务器端 Java 工作的一种常用技术。 Servlet 不是一种语言——ASPX 也不是。两者都是您与另一种语言结合使用的平台——通常是 Java 的 servlet。
@Hardik:正如我在帖子中所写,servlet 是在 servlet 容器内运行的类。 servlet 容器可以同时托管多个 servlet。
@Hardik:是的,完全正确。 servlet 可以提供 HTML 来显示表单,也可以对提交进行操作。 Servlet 也可用于实现 Web 服务。它们可以用于除 HTTP 之外的其他协议,但 HTTP 绝大多数是 servlet 处理的最常见的传输。
J
Jianhui Liu

servlet 的核心是一个 java 类。它可以处理 HTTP 请求。通常,通过网络读取 HTTP 请求和响应的内部细节由 Tomcat 等容器负责。这样做是为了作为服务器端开发人员,您可以专注于如何处理 HTTP 请求和响应,而不必费心处理处理网络等的代码。容器将处理诸如将整个事情包装在一个HTTP 响应对象并将其发送到客户端(例如浏览器)。

现在要问的下一个合乎逻辑的问题是谁来决定容器应该做什么?答案是;至少在 Java 世界中它是由规范引导的(注意我没有使用受控这个词)。例如,Servlet 规范(参见参考资料 2)规定了 servlet 必须能够做什么。因此,如果您可以为规范编写一个实现,那么恭喜您刚刚创建了一个容器(从技术上讲,像 Tomcat 这样的容器也实现了其他规范并做一些棘手的事情,例如自定义类加载器等,但您明白了)。

假设您有一个容器,您的 servlet 现在是 java 类,其生命周期将由容器维护,但它们对传入 HTTP 请求的反应将由您决定。你可以通过在 init()、doGet()、doPost() 等预定义方法中编写你想做的事情来做到这一点。查看资源 3。

这是一个有趣的练习。像在资源 3 中一样创建一个简单的 servlet,并在它的构造函数方法中编写一些 System.out.println() 语句(是的,你可以有一个 servlet 的构造函数)、init()、doGet()、doPost() 方法并运行Tomcat中的servlet。查看控制台日志和 tomcat 日志。

希望对你有帮助,学习愉快。

资源

在此处查看 HTTP servlet 的外观(Tomcat 示例)。小服务程序规范。简单的 Servlet 示例。开始在线阅读本书/PDF 它还为您提供整本书的下载。可能这会有所帮助。如果您刚刚开始使用 servlet,那么阅读材料以及 servlet API 可能是一个好主意。这是一个较慢的学习过程,但对了解基础知识更有帮助。


在 Stack Overflow 上不鼓励仅链接答案,因为它们链接到的资源将来可能会变得不可用或可能会发生变化。考虑在您的答案中总结链接的相关内容以改进它。
@Cupcake 感谢您的建设性反馈。我试图在答案中添加一些肉。感谢您让社区变得更好。
servlet 如何适应 Jax-RS 和 Springboot?它们是否与这两种技术一起使用?
@pixel 最终它必须使用 servlet。如果您查看 Jax-RS / springboot 的源代码,它有时会扩展标准 java servlet 以提供所有抽象和特性。
m
mike rodent

除了上述之外,只是为了指出明显的出血......

对许多人来说,这是非常明显的,但对于习惯于编写运行然后结束的应用程序的人来说:servlet 大部分时间都在闲逛,什么都不做……等待发送一些东西,一个请求,然后响应它.由于这个原因,一个 servlet 有一个生命周期:它被初始化,然后等待,响应任何扔给它的东西,然后被销毁。这意味着它必须由其他东西(框架)创建(然后销毁),它在自己的线程或进程中运行,并且除非被要求,否则它什么也不做。而且,通过某种方式,必须实施一种机制,使这个“实体”可以“监听”请求。

我建议阅读有关线程、进程和套接字的内容会对此有所了解:它与基本的“hello world”应用程序的运行方式完全不同。

可以说“服务器”或“servlet”这个词有点矫枉过正。一个更理性、更简单的名字可能是“响应者”。选择“服务器”一词的原因是历史性的:第一个这样的安排是“文件服务器”,其中多个用户/客户端会从中央机器请求特定文件,然后该文件将被“提供服务” “就像一本书或一盘炸鱼和薯条。


将 servlet 视为类似于标准 MVC 框架中的“控制器”是否不正确?
就我个人而言,我看不出这个类比是如何成立的。我也倾向于认为那些认为我的回答有用(有助于为他们澄清事情)的人可能会对你的建议感到困惑。
我认为这个答案很有用。但我也想知道(独立于这个答案,在阅读之前)@user2490003 上面提出的同样的问题。 Servlet 和 MVC 框架控制器有什么区别?为什么 user2490003 的类比不成立?
MVC 安排更复杂,但也不那么复杂。它不一定涉及等待输入。在定义服务器-客户端设置的基本概念时,我试图强调的正是这种简单性。在此处查看基本 MVC 图:en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller。在简单的客户端-服务器设置中,用户只与客户端交互,而不与两个对象交互,即视图和控制器。使用 MVC 还可以有多个视图、多个控制器和多个模型。并且不(必然)涉及等待输入。
除了上述之外,服务器还可以为多个用户提供服务,而 MVC 设置则没有这样的要求。 MVC 设置属于经典计算领域,即独立应用程序。通过服务器,我们迈出了进入交互式计算领域的第一步。并不是说这个类比是 100% 错误的,更多的是 90% 错误,最重要的是,如果它实际上并不能以任何方式帮助任何人或任何事情,那么任何类比都是毫无用处的。服务器 - 客户端的安排非常简单,就像没有人需要任何类比来理解的想法一样。
S
Sankalp

什么是 Servlet?

servlet 只是一个响应特定类型的网络请求的类——最常见的是 HTTP 请求。

基本上 servlet 通常用于实现 Web 应用程序 - 但也有各种框架在 servlet 之上运行(例如 Struts),以提供比“这是一个 HTTP 请求,写入这个 HTTP 响应”级别更高级别的抽象。提供。

Servlet 在处理网络端(例如解析 HTTP 请求、连接处理等)的 servlet 容器中运行。最著名的开源 servlet 容器之一是 Tomcat。

在请求/响应范例中,Web 服务器只能为客户端提供静态页面

为了提供动态页面,我们需要 Servlet。

Servlet 只不过是一个 Java 程序

这个 Java 程序没有 main 方法。它只有一些回调方法。

Web 服务器如何与 servlet 通信?通过容器或 Servlet 引擎。

Servlet 在 Web 容器中生存和死亡。

Web 容器负责调用 servlet 中的方法。它知道 Servlet 有哪些回调方法。

请求流程

客户端向 Web 服务器发送 HTTP 请求

Web 服务器将该 HTTP 请求转发到 Web 容器。

由于 Servlet 无法理解 HTTP,它是一个 Java 程序,它只能理解对象,因此 Web 容器将该请求转换为有效的请求对象

Web 容器为每个请求旋转一个线程

所有业务逻辑都在 servlet 中的 doGet() 或 doPost() 回调方法中进行

Servlet 构建一个 Java 响应对象并将其发送到容器。它再次将其转换为 HTTP 响应以将其发送给客户端

容器如何知道哪个 Servlet 客户端请求了?

有一个名为 web.xml 的文件

这是 Web 容器的主文件

您在此文件中有关于 servlet 的信息 - servlets Servlet-name Servlet-class servlet-mappings - /Login 或 /Notifications 之类的路径在 Servlet-name url-pattern 中映射,依此类推

servlet Servlet 名称 Servlet 类

小服务程序名称

Servlet 类

servlet-mappings - /Login 或 /Notifications 之类的路径在 Servlet-name url-pattern 中映射

小服务程序名称

url 模式

等等

Web 应用程序中的每个 servlet 都应该有一个进入该文件的条目

所以这个查找发生在- url-pattern -> servlet-name -> servlet-class

如何“安装” Servlet? * 好吧,servlet 对象是从库 javax.servlet.* 继承的。 Tomcat 和 Spring 可用于利用这些对象来适应用例。

Ref- 在 1.5x- https://www.youtube.com/watch?v=tkFRGdUgCsE 上观看此内容。这有一个很棒的解释。


欢迎提供指向解决方案的链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及它存在的原因,然后引用您链接的页面中最相关的部分以防目标页面不可用。 Answers that are little more than a link may be deleted.
请注意,世界已经在前进。在 2020 年,我们在代码上使用注释,而不是 XML 中基于中央字符串的配置文件。
N
Navnath Adsul

Servlet 是一种服务器端技术,用于在 Web 应用程序中创建动态网页。实际上 servlet 是一个 api,它由一组类和接口组成,它具有一些功能。当我们使用 Servlet API 时,我们可以使用 servlet 类和接口的预定义功能。

Servlet的生命周期:

Web 容器维护 servlet 实例的生命周期。

1.加载的 Servlet 类

2.创建的 Servlet 实例

3. init() 方法被调用

4.调用的 service() 方法

5.调用destroy()方法

当客户端(浏览器)提出请求时,Web 容器检查 servlet 是否正在运行,如果是,则调用 service() 方法并向浏览器提供响应。

当 servlet 未运行时,web-container 遵循以下步骤..

1.classloader加载servlet类

2. 实例化servlet

3.初始化servlet

4.调用service()方法

在为请求提供服务后,Web 容器等待特定时间,在这段时间内,如果请求到来,则仅调用 service() 方法,否则调用 destroy() 方法。


S
Sandun Madola

如果您是初学者,我认为本教程可能会提供有关 What Servlet is ... 的基本概念

下面是给定链接的一些有价值的观点。

Servlet技术用于创建驻留在服务器端并生成动态网页的Web应用程序。

Servlet 可以用多种方式描述,具体取决于上下文。

Servlet 是一种用于创建 Web 应用程序的技术。

Servlet 是一种 API,它提供了许多接口和类,包括文档。

Servlet 是创建任何 Servlet 时必须实现的接口。

Servlet 是一个扩展服务器功能并响应传入请求的类。它可以响应任何类型的请求。

Servlet 是部署在服务器上用于创建动态网页的 Web 组件。参考:这里。


这是一个非常好的教程,从基础解释概念
P
Poorna Senani Gamage

Java Servlet 是服务器端 Java 程序模块,用于处理和响应客户需求并实现 servlet 接口。它有助于以可忽略的开销、维护和支持来提高 Web 服务器的实用性。

servlet 充当客户和服务器之间的中介。随着 servlet 模块在服务器上持续运行,它们可以获取并响应客户的需求。 servlet 的需求和响应对象提供了一种有用的方法来处理 HTTP 请求并将内容信息发送回客户。

由于 servlet 与 Java 方言相协调,它还具有 Java 的所有亮点,例如高可移动性、阶段自治性、安全性和 Java 数据库可用性。


k
kundus

Servlet 是当网站用户从服务器请求 URL 时运行某些功能的 Java 类。这些函数可以完成诸如将数据保存到数据库、执行逻辑以及返回加载页面所需的信息(如 JSON 数据)等任务。

大多数 Java 程序使用在程序运行时执行代码的 main() 方法。 Java servlet 包含 doGet()doPost() 方法,其作用类似于 main() 方法。当用户向映射到该 servlet 的 URL 发出 GETPOST 请求时,将执行这些函数。因此,用户可以为 GET 请求加载页面,或存储来自 POST 请求的数据。

当用户发送 GETPOST 请求时,服务器会读取目录中每个 servlet 类顶部的 @WebServlet 来决定调用哪个 servlet 类。例如,假设您有一个 ChatBox 类,并且在顶部有这个:

@WebServlet("/chat")
public class ChatBox extends HttpServlet {

当用户请求 /chat URL 时,您的 ChatBox 类将被执行。


R
Roopam

Servlet 是一个响应 HTTP 请求并产生 HTTP 响应的 java 类......当我们使用 HTML 制作页面时,它将是一个静态页面,因此为了使其动态,我们使用 SERVLET {简单地说可以理解} JSP 克服了使用 servlet,它本身使用代码和 HTML 标记。


m
mtyson

this article 所述,Servlet 是一种扩展 Java 服务器并访问其功能的标准化方式。

每个 Servlet 都可以看作是一个微型服务器(因此得名),它可以访问以 Java 代码建模的请求和响应,以及其他上下文数据,如 Session。

有了这些,servlet 的 Java 代码就可以与呈现响应所需的任何内容进行交互,包括移交给 JSP 页面以生成 HTML 视图。


r
remudada

我认为 servlet 基本上是一个 java 类,它充当 HTTP 请求和 HTTP 响应之间的中间方式。Servlet 也用于使您的网页动态化。例如,假设您想重定向到服务器上的另一个网页,那么您必须使用 servlet。另一个重要的事情是 servlet 可以在 localhost 和 Web 浏览器上运行。


B
BalusC

您刚刚得到了正常 servlet 的答案。但是,我想与您分享一些有关 Servlet 3.0 的信息

什么是第一个 Servlet? servlet 是由容器管理并生成动态内容的 Web 组件。 Servlet 是编译成字节码的 Java 类,这些字节码可以动态加载到支持 Java 技术的 Web 服务器或 Servlet 容器中并由其运行。 Servlet 3.0 是对现有 Servlet 2.5 规范的更新。 Servlet 3.0 需要 Java 平台企业版 6 的 API。Servlet 3.0 专注于可扩展性和 Web 框架可插入性。 Servlet 3.0 为您带来了一些扩展,例如易于开发 (EoD)、可插入性、异步支持和安全性增强 易于开发您可以声明 Servlet、过滤器、侦听器、初始化参数,几乎所有东西都可以使用注解进行配置使用 web-fragment.xml 创建子项目或模块。这意味着它允许独立实现可插拔的功能需求。异步支持 Servlet 3.0 提供了异步处理的能力,例如:等待资源变为可用,异步生成响应。安全增强 支持身份验证、登录和注销 servlet 安全方法

我从 Java Servlet Tutorial 找到的