什么是Java Servlet?


276

我阅读了许多文章以了解Java Servlet,但没有成功。

能否请您简要介绍一下Java Servlet(以简单语言)。像什么是servlet?有什么优势?以及所有。

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


38
servlets标签悬停在问题下方,直到弹出黑框。单击其中的信息链接。
BalusC

1
Servlet您可以看一下。我认为这是细节和真实。
shohan 2014年

Answers:


336

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

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


16
Servlet是Web服务器本身内部的Web服务器调用的Java代码片段。如果你想要的东西看起来像PHP或ASP,你需要的JSP(这是一种特殊类型的servlet)
托尔比约恩Ravn的安德森

3
感谢您的回答,但仍然无法真正使用servlet,如果您可以通过sitution这样的示例来解释我们可以使用servlet的话,那就更好了。我不了解servlet的用法,就像servlet可以做什么,其他服务器端编程语言不能做到的那样。
hardik 2011年

4
@Hardik:不是他们可以做其他事情无法做的事情。Servlet只是服务器端Java工作的常用技术。Servlet不是一种语言-ASPX也不是。这两种平台都是您与另一种语言结合使用的平台-对于servlet,通常是Java。
乔恩·斯基特

7
@Hardik:正如我在帖子中所写,servlet是在servlet容器内运行的类。Servlet容器可以同时托管多个Servlet。
乔恩·斯基特

5
@Hardik:是的,完全是。Servlet可以提供HTML以显示表单,也可以对提交进行操作。Servlet也可以用于实现Web服务。它们可以用于HTTP之外的其他协议,但是绝大多数情况下,HTTP是servlet处理的最常见的传输方式。
乔恩·斯基特

101

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

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

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

这是一个有趣的练习。在Resource 3中创建一个简单的servlet,并在其构造方法中写入一些System.out.println()语句(是的,您可以拥有servlet的构造器),init(),doGet(),doPost()方法并运行Tomcat中的servlet。请参阅控制台日志和tomcat日志。

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

资源资源

  1. 在此处查看HTTP Servlet的外观(Tomcat示例)。

  2. Servlet 规范

  3. 简单的Servlet 示例

  4. 开始在线阅读本书 / PDF,也可以下载整本书。可能会有所帮助。如果您只是启动servlet,那么最好将材料与Servlet API一起阅读。这是一个学习过程较慢的过程,但对于使基础变得清晰起来却更有帮助。


12
在堆栈溢出中不建议仅链接的答案,因为它们链接到的资源将来可能会变得不可用或可能会更改。考虑汇总答案中链接的相关内容以进行改进。

6
@Cupcake感谢您的建设性反馈。我试图在答案中添加一些肉。感谢您使社区变得更好。
Ayusman 2015年

34

除了上述内容外,还需指出明显的出血...

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

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

可以说,术语“服务器”或“ servlet”有点过大。一个更合理,更简单的名称可能是“响应者”。选择“服务器”一词的原因是历史性的:第一个这样的安排是“文件服务器”,其中多个用户/客户终端将从中央计算机请求特定文件,然后将该文件“保存”就像一本书或一盘炸鱼薯条。


1
在标准MVC框架中将servlet视为类似于“控制器”是不正确的吗?
user2490003

我个人看不出这种比喻如何成立。我也倾向于认为那些认为我的答案是有用的人(有助于为他们澄清事情)可能会被您的建议弄糊涂。
麦克啮齿动物

我认为这个答案是有用的。但我也想知道(独立于此答案,并且在阅读之前)@ user2490003上面提出的相同问题。Servlet和MVC框架控制器之间有什么区别?为什么user2490003的类比不成立?
cellepo

MVC的安排比较复杂,但较不复杂。它不一定涉及等待输入。在定义服务器-客户端设置的基本思想时,我力求强调的就是这种简单性。在此处查看基本的MVC图:en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller。在简单的客户端-服务器设置中,用户仅与客户端交互,而不与两个对象(即视图和控制器)交互。使用MVC,还可以有多个视图,多个控制器和多个模型。并且(不需要)不涉及等待输入。
麦克啮齿动物

除了上述内容外,服务器还可以为多个用户提供服务,而MVC设置则没有这样的要求。MVC设置属于经典计算领域,即独立应用程序。使用服务器,我们迈出了进入交互式计算领域的第一步。这并不是说类比是100%错误,更是90%是错误,最重要的是,如果类比实际上并没有以任何方式帮助任何人或任何事物,那根本就没有用。服务器-客户端的安排是如此简单,以至于一个人根本不需要任何类比来理解。
麦克啮齿动物

10

什么是Servlet?

  • Servlet只是一个类,它响应特定类型的网络请求-最常见的是HTTP请求。
  • 基本上,通常使用servlet来实现Web应用程序-但也有各种框架在servlet(例如Struts)之上运行,以提供比“这是HTTP请求,请写入此HTTP响应”级别更高的抽象级别。提供。
  • Servlet在处理网络端的Servlet容器中运行(例如,解析HTTP请求,连接处理等)。Tomcat是最著名的开源servlet容器之一。

  • 在请求/响应范例中,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的信息-

    • 小服务程序
      • Servlet名称
      • Servlet类
    • servlet映射 -类似于/ Login或/ Notifications的路径在此处映射
      • Servlet名称
      • 网址模式
    • 等等
  • Web应用程序中的每个servlet都应在该文件中都有一个条目

  • 因此,这种查找的方式类似于-url-pattern-> servlet-name-> servlet-class

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

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


1
欢迎使用指向解决方案的链接,但是请确保没有该链接的情况下,您的回答是有用的:在链接周围添加上下文,以便您的其他用户可以了解它的含义和原因,然后引用您所使用页面中最相关的部分如果目标页面不可用,请重新链接。只是链接的答案可能会被删除。
Mogsdad

1
请注意,世界在前进。在2020年,我们在代码上使用注释,而不是XML中基于中央字符串的配置文件。
托尔比约恩Ravn的安徒生

5

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容器遵循以下步骤。

1. classloader加载servlet类

2.实例化servlet

3.初始化servlet

4.调用service()方法

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


5

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

给定链接下面是一些重要的观点。

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

可以根据上下文以多种方式描述Servlet。

  • Servlet是一种用于创建Web应用程序的技术。
  • Servlet是提供许多接口和类(包括文档)的API。
  • Servlet是创建任何Servlet都必须实现的接口。
  • Servlet是扩展服务器功能并响应传入请求的类。它可以响应任何类型的请求。
  • Servlet是一个Web组件,已部署在服务器上以创建动态网页。参考:这里

1
这是一个非常不错的教程,从基础上解释了概念
Nikhil Sahu

3

Java Servlet是服务器端Java程序模块,可处理和响应客户需求并实现Servlet接口。它以微不足道的开销,维护和支持帮助提高Web服务器的实用性。

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

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


2

Servlet是一个Java类,用于响应HTTP请求并产生HTTP响应……当我们使用HTML创建页面时,它将是一个静态页面,因此要使其成为动态页面,我们使用SERVLET {可以理解} JSP克服了servlet的使用,它本身使用了代码和HTML标记。


2

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

大多数Java程序使用一种main()在程序运行时执行代码的方法。Java servlet包含doGet()doPost()方法,其作用与main()方法相同。当用户对映射到该servlet的URL 发出GETPOST请求时,将执行这些功能。因此,用户可以为GET请求加载页面,或存储POST请求中的数据。

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

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

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


0

本文所述,Servlet是扩展Java服务器并访问其功能的标准化方法。

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

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


-1

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


-2

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

首先是什么Servlet?

Servlet是一个Web组件,由容器管理并生成动态内容。Servlet是Java类,它们被编译为字节代码,可以动态地加载到启用Java技术的Web服务器或Servlet容器中并由其运行。

Servlet 3.0是对现有Servlet 2.5规范的更新。Servlet 3.0是Java平台企业版6所需的API。Servlet3.0专注于可扩展性和Web框架可插入性。Servlet 3.0为您带来了一些扩展,例如易于开发(EoD),可插拔性,异步支持和安全性增强。

易于发展

您可以声明Servlet,过滤器,侦听器,初始化参数,并且几乎所有内容都可以使用注释进行配置

可插拔性

您可以使用web-fragment.xml创建子项目或模块。这意味着它允许独立实现可插拔功能要求。

异步支持

Servlet 3.0提供了异步处理的功能,例如:等待资源可用,异步生成响应。

安全增强

支持身份验证,登录和注销Servlet安全方法

我从Java Servlet教程中找到了它

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.