java - 为什么一个web容器可以管理一个servlet?

标签 java tomcat servlets web-container

<分区>

下午好。
为什么 HTTPservlet 的生命周期可以由 WEB 容器管理?
WEB 服务器(例如 Apache Tomcat)能够捕获来自客户端的 HTTP 请求,处理并回复 HTTP 响应; servlet 需要一个 web 容器(例如 Apache Tomcat),因为它没有 main,因此我们可以将 servlet 引擎视为初始化 servlet(简而言之)的 “main”
好!现在我不明白为什么这件事是可能的。当客户端发送 HTTP 请求时,如果这是该 servlet 的第一次调用,Web 容器将调用 init()。然后,它允许调用 doGet、doPost(和其他方法)。最后,servlet 被销毁[destroy()]。但是 Web 容器是如何做到这一点的呢? servlet 引擎内部发生了什么?

****************************************EDIT*******************************************

我的问题讲的是为什么servlet引擎可以管理servlet的周期。答案真的很简单。 servlet 引擎可以管理 servlet 的循环(因此它可以自动调用 create()、service() 和 destroy() 方法),因为 servlet 有一个公共(public)接口(interface),javax.Servlet.servlet此接口(interface)声明具有语义、准确含义的方法:

create() is used just to create servlet
service() is used to handle HTTP methods
destroy() is used to delete the servlet

程序员可以覆盖这些方法,但他们必须尊重方法的语义。

最佳答案

Java 2 EE 标准描述了 Web 应用程序的不同部分如何协同工作。简而言之:

  • 您的项目被编译成具有特定布局的 WAR 文件。此存档包含您的应用程序代码和所有依赖项。
  • Servlet 需要在文件 web.xml 中注册自己,该文件是 WAR 存档的一部分
  • servlet 是一个 Java 类,它实现了 HttpServlet API .
  • 当容器加载 WAR 时,它会创建一个特殊的类加载器,可以加载其中包含的所有类。
  • 当客户端请求特定 URL 时,容器会查看 web.xml 以找到可以处理请求的 servlet。
  • 当找到 servlet 时,容器使用类加载器和 web.xml 中的参数来加载类并创建实例。
  • 当实例存在时,它会调用匹配请求的方法。
  • 然后该方法将准备结果。
  • 如果出现任何问题,容器将准备一个错误答案。

关于java - 为什么一个web容器可以管理一个servlet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30304532/

相关文章:

java - 如何区分 javascript 中的 servlet 响应?

Java NetBeans - 将我的 .DLL 存储在 PATH 中 - 它在哪里?

java - 有没有办法在 REST 中接受带有 & 符号的 QueryParam

java - 为什么我在此代码中收到 StringIndexOutOfBoundsException?

Zuul网关异常中的java.net.URI编码异常

linux - 在 Ubuntu 12.04 上重新安装 Apache Tomcat7

java - 解决Tomcat中的Bind异常

java - 使用jsp el显示不同组的用户列表

java - URLStreamHandler 是一个受限类

java - 可写文件权限问题