Servlet 架构
Servlet 在用于创建动态 Web 应用程序的高级Java树下分组。 Servlet本质上是健壮的,具有良好的可扩展性,主要用于开发服务器端应用程序。如果我们时光倒流一点,我们就会看到,在引入 servlet 之前,使用的是CGI(通用网关接口) 。在 servlet 能够完成的几个本地任务中,动态执行客户端请求和响应是最常见的。 servlet 可以有效执行的其他任务包括:
- 可以轻松管理/控制应用程序流程。
- 适合实现业务逻辑。
- 可以有效地平衡服务器端的负载。
- 轻松生成动态网页内容。
说到servlet的种类,主要有两种,分别是:
- 通用 Servlet
- HTTP Servlet
我们可以使用三种潜在的方式来创建 servlet:
- 实现 Servlet 接口
- 扩展通用 Servlet
- 扩展 HTTP Servlet
Servlet 架构的组件
下面是 servlet 的高层架构图。让我们简要地看看每个组件如何添加到 servlet 的工作中。
1. 客户
上面架构中显示的客户端主要作为一种媒介工作,它向 Web 服务器发送 HTTP 请求,并再次处理从服务器返回的响应。正如我们在图中看到的,我们的客户端是 Web 浏览器。
2. 网络服务器
Web 服务器的主要工作是处理用户随时间发送的请求和响应,并维护 Web 用户如何访问托管在服务器上的文件。我们在这里谈论的服务器是一种管理对网络中集中资源或服务的访问的软件。 .恰好有两种类型的网络服务器:
- 静态网络服务器
- 动态网络服务器
3. 网络容器
Web 容器是 servlet 架构中的另一个典型组件,它负责与 servlet 通信。 Web 容器的两个主要任务是:
- 管理 servlet 生命周期
- 网址映射
Web 容器位于服务器端,管理和处理来自 servlet 或来自某些 JSP 页面或可能来自任何其他文件系统的所有请求。
Servlet 请求如何流动?
每个 servlet 都应该覆盖以下 3 个方法:
- 在里面()
- 服务()
- 破坏()
这些方法用于处理来自用户的请求。
以下是请求流经 servlet 的步骤,可以在架构图中观察到:
- 客户端发送请求。
- 请求被 Web 服务器接受并转发到 Web 容器。
- 为了获取 servlet 的地址,Web 容器会跟踪与请求URL 模式相对应的web.xml文件。
- 到上述过程发生时,servlet 应该已经实例化和初始化。如果 servlet 尚未实例化和初始化,则调用init()方法来达到目的。
- 通过传递ServletRequest和Response 对象,容器调用公共service()方法。
- 在下一步中, ServletRequest和ServletResponse对象通过public service()方法被类型转换为HttpServletRequest和HttpServletResponse对象。
- 现在受保护的 service()方法由public service()方法调用。
- 受保护的 service()方法根据 request 的类型将请求分派到正确的处理程序方法。
- 当 servlet 容器关闭时,它会卸载所有 servlet 并为每个初始化的 servlet 调用destroy()方法。
好处
- servlet 的主要功能是它们独立于服务器配置,并且它们几乎与任何 Web 服务器兼容
- Servlet 也是独立于协议的,支持FTP 、 HTTP 、 SMTP等协议。
- 在手动销毁之前,servlet 可以保留在内存中,随着时间的推移帮助处理多个请求。此外,一旦建立了数据库连接,它可以促进在同一个数据库会话中处理对数据库的多个请求。
- Servlet 继承了 Java 的可移植性,因此几乎可以与任何 Web 服务器兼容。
- Servlet 首先被转换成字节码然后被执行,这有助于增加处理时间。
缺点
- 设计 servlet 可能非常费力。
- 在设计 servlet 时需要处理异常,因为它们不是线程安全的。
- 开发人员可能需要额外的技能来编写 servlet。
正如我们已经知道的,Servlet 本质上是可移植的(平台/服务器独立),因此如果我们谈论其他脚本语言,它是一个更好的选择。它们动态地处理请求和响应。每当我们开发需要与不同现有协议协调的 Web 应用程序时,servlet 比其他方式更受欢迎,因为它能够支持各种协议。最后我们可以得出一个结论,即在开发 Web 应用程序时使用 servlet 可能是最合适的。