Java Servlet,现在也称为Jakarta Servlet,是一个Java服务器软件组件,设计和部署的目的是通过升级服务器服务的功能来增强服务器服务,以通过Web API响应任何请求。

什么是Java Servlet?

What is Java Servlet

我们将Java Servlet或Jakarta Servlet定义为使用Java编程语言设计和部署动态网页的技术。它在客户端-服务器体系结构中实现了一个典型的Servlet,该Servlet位于服务器端。

What is Java Servlet

Servlet API中提供了多种接口和类。其中一些建议如下:

  • HTTP Servlet

  • Generic Servlet

  • Servlet Request

  • Servlet Response

在讨论了Java Servlet的定义、接口和类之后,我们现在将进入下一个主题,学习Java Servlet的体系结构。

Java Servlet体系结构

Java Servlet Architecture

我们还可以将Servlet的软件体系结构视为Java Servlet的生命周期。要编写Servlet,用户首先需要使用以下导入命令直接或间接地实现Servlet接口。

import javax.servlet.*;

一旦导入了Servlet接口,并且我们继承了HTTP类,我们就从Java Servlet的生命周期开始。

在Servlet的生命周期中,我们主要有三个阶段,如下所述。

  • init()

  • service()

  • destroy()

我们在它们各自的阶段调用这些方法。这些方法是通过为要执行的进程生成基本线程来解析的。

接下来,我们将详细了解Java Servlet的生命周期。

Java Servlet生命周期

Java Servlet生命周期从开始到结束包括三个阶段,直到垃圾收集器将其清除。下面将对这三个阶段进行描述。

  1. init()

  2. service()

  3. destroy()

1. init()

Init()是任何Java Servlet的萌芽阶段。当特定于特定Servlet的URL被触发时,将调用init()方法。

调用init()方法的另一个场景是启动服务器。随着每个服务器的启动,相应的Servlet也会启动,init()方法也会启动。

Init()方法的一个重要特点是在Servlet的整个生命周期中只调用一次init()方法,并且init()方法不会响应用户的任何命令。

Init()方法语法:

public void init() throws ServletException {

//init() method initializing  

}

2. service()

Service()方法是Java Servlet生命周期的核心。在Servlet初始化之后,它遇到了来自客户端的服务请求。

客户端可以请求各种服务,如:

  • GET

  • PUT

  • UPDATE

  • DELETE

Service()方法负责检查从客户端接收到的请求的类型,并相应地响应,方法是为每个需求生成一个或一组线程,并通过以下方法实现操作。

  • doGet() for GET

  • doPut() for PUT

  • doUpdate() for UPDATE

  • doDelete() for DELETE

service() 方法语法:

public void service(ServletRequest request, ServletResponse response) 

throws ServletException, IOException {

}

3. destroy()

与init()方法一样,销毁()方法在Java Servlet的整个生命周期中也只调用一次。

当调用Destroy()方法时,Servlet执行清理活动,

  • 暂停当前线程或后台线程

  • 制作任何相关数据的恢复列表,如到磁盘的Cookie。

在此之后,Servlet被标记,准备好让垃圾收集器将其清除。

Destroy()方法语法:

public void destroy() {

//destroy() method finalizing 

}

完成Java Servlet的生命周期之后,我们现在将继续前进,在这里我们将遇到Java Servlet特性。

Java Servlet特性

Java Servlet继承了Java编程语言的特性。Java Servlet提供的主要功能如下。

  • Portable

  • Efficient 

  • Scalable

  • Robust

1. Portable

如上所述,Servlet具有与Java编程语言相同的可移植性。在一个操作系统的平台上设计的Servlet程序可以很容易地在不同的操作系统平台上运行。

2. Efficient 

Java Servlet本质上提供对客户端请求的即时响应。此外,它可以是便携的,可以在任何环境条件下执行,而不受操作系统平台的影响。

3. Scalable

我们认为Java Servlet是高度可伸缩的。Servlet为进程使用完全轻量级的线程,并且可以通过生成各种线程来同时处理多个客户端请求。

4. Robust

Java Servlet以其健壮的操作过程而闻名。Servlet扩展了Java的功能,包括。

  1. Java Security Manager

  2. Java Garbage Collector

  3. Exception Handling.

这些高级功能的实现使Java Servlet在一定程度上能够应对任何安全威胁。此外,垃圾收集器负责内存管理,并实时消除与内存管理相关的问题,使Servlet保持健壮。

在介绍Java Servlet的特性之后,我们将深入到Servlet请求和响应阶段。

Java Servlet Request

Java Servlet以请求和响应的形式运行。第一阶段是来自用户端的请求。HttpRequest对象表示用户发送到Web应用程序的对浏览器的HTTP请求。因此,浏览器发送的任何内容都可以通过HttpRequest访问。

现在,我们将了解Servlet收到的请求的各个部分。

  1. HTTP Request Header

  2. HTTP Request Parameters

  3. HTTP Request InputStream

  4. HTTP Request Context

  5. HTTP Request Session

1. HTTP Request Header

请求头是由浏览器作为请求与HTTP请求一起发送的键-值对。请求头包含有关正在使用什么浏览器软件、浏览器可以接收什么文件类型的信息。

2. HTTP Request Parameters

除了请求,浏览器还共享一些与所需信息相关的参数。从技术上讲,请求参数是HTTP请求URL的关键部分。

3. HTTP Request InputStream

HTTP请求InputStream是输入数据流的有序流。HTTP请求InputStream扩展了java.io.InputStream库。

4. HTTP Request Context

我们使用HTTP请求上下文来存储与应用程序相关的元数据。

5. HTTP Request Session

Session对象在多个请求之间保存有关特定用户的信息。如果您在会话对象请求期间设置了新对象,则在同一会话时间范围内的任何后续请求期间,您都可以访问该对象。

现在,我们将继续学习Java Servlet响应阶段。

Java Servlet Response

第二个重要部分是响应阶段。HttpResponse对象用于表示对您的请求的HTTP响应。Web应用程序向用户发回响应页面,以响应从浏览器发送到您的Web应用程序的HTTP请求。

现在,让我们了解Java Servlet中响应阶段的部分,如下所示。

  1. HTTP Response Header

  2. HTTP Response Content Type

  3. HTTP Response Content Length

  4. HTTP Response Write HTML

  5. HTTP Response Redirection 

1. HTTP Response Header

与HTTP请求类似,HTTP响应包括报头。它们负责响应中写入的所有数据。

2. HTTP Response Content Type

Content-Type标头告诉浏览器您要返回的内容类型。

3. HTTP Response Content-Length

Content-Length标头告诉您Servlet返回的字节数。

4. HTTP Response Write HTML

要将HTML发送回浏览器,您需要从HTTP响应对象中检索PrintWriter。

5. HTTP Response Redirection 

重定向将帮助您将自己转到与当前网页不同的网页。

在讨论了请求和响应阶段之后,我们将深入到实际模式中,在该模式中,我们将学习为Java Servlet设置环境并执行示例程序以更好地理解。

Environmental Setup

打开窗口并搜索环境变量

environment-setting-java-servlets-1

选择环境变量

environment-setting-java-servlets-2

选择New并添加以下内容作为主页变量

//Set up JAVA_HOME 

C:\Users\Honey\Downloads\jdk-14.0.1_windows-x64_bin.zip\jdk-14.0.1

environment-setting-java-servlets-java-home

(使用您的本地系统文件位置)

//Set up JRE_HOME

C:\Program Files\Java\jre1.8.0_251 

environment-setting-java-servlets-JRE-home

(使用您的本地系统文件位置)

//Set up CATLINA_HOME

C:\Program Files\Apache Software Foundation\Tomcat 8.5 

environment-setting-java-servlets-Catlina-home

(USE您的本地系统文件位置)

现在进入路径变量并添加新的路径变量

environment-setting-java-servlets-3

//Set up JAVA_PATH

C:\Users\Honey\Downloads\jdk-14.0.1_windows-x64_bin.zip\jdk-14.0.1\bin 

environment-setting-java-servlets-Java-path

(USE您的本地系统文件位置)

//Set up JRE_PATH

C:\Program Files\Java\jre1.8.0_251\bin 

environment-setting-java-servlets-JRE-path

(使用您的本地系统文件位置)

//Set up CATLINA_PATH

C:\Program Files\Apache Software Foundation\Tomcat 8.5\bin 

environment-setting-java-servlets-tomcat-path

(使用您的本地系统文件位置)

带Eclipse的TOMCAT

在设置Home和PATH变量之后,启动Tomcat服务器和Eclipse。然后将Tomcat服务器添加到您的eclipse中,并通过在控制台中右键单击服务器来启动服务器。

java-servlets-start-Tomcat

配置的端口号:

要配置服务器,请双击它

java-servlets-tomcat-server-settings

启动后,您将看到以下对话框。

setting-java-servlets-setup-ports

编辑Tomcat管理端口、AJP端口和HTTP端口的以下数字。

// Tomcat Admin Port number: 8086

// HTTP Port: 8000

// AJP: 8008

Java Servlet Example

package Servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/SServlet")

public class SServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

     public SServlet() {

        // TODO Auto-generated constructor stub

    }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/* TODO Auto-generated method stub

response.getWriter().append("Served at: ").append(request.getContextPath());*/

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.print("<html><body>");

out.print("<h2>Hello. Welcome to Simplilearn</h2>");

out.print("</body></html>");

}

}

/output

在该示例之后,我们进入Java Servlet会话跟踪、会话管理和Cookie。

Java Servlet Session Tracking

Servlet Session Tracking

会话跟踪是一个简单的过程,用于维护与Servlet中特定用户相关的各种数据类型。这些数据可以是搜索历史、登录凭据。

下图描述了Java Servlet中的会话跟踪流程。

用户发送的请求被记录和保存,以跟踪他在网站和他当前正在浏览的浏览器上的活动。

Java Servlet Cookies

Cookies

Cookie是在多个客户端请求之间持久化的一小段信息。Cookie包含名称、单个值和可选属性,如注释、路径和域限定符、最长期限和版本号。

下图描述了Java Servlet中的Cookie管理。

用户登录网站并浏览网站。他的活动和登录凭据将以cookie的形式保存,以帮助他轻松登录或为他提供可能被视为他最喜欢的最近浏览详细信息。

继续阅读本文,我们将了解Java Servlet提供的一流优势,以及使其相对于其他类似技术具有优势的原因。

Java Servlet Advantages

以下是Java Servlet的显著优势。

  • Servlet创建更容易编写和运行更快的动态文档。

  • Servlet继承了Java的强大功能,包括

  1. Exception handling

  2. Garbage collection

  3. Java Security

  • Java Servlet具有高度的可移植性,并且可以在Web服务器上执行,而不受平台的限制。

  • Java Servlet可以与不同的Servlet和服务器建立通信。

在介绍了Servlet的优点之后,我们现在将讨论Servlet的缺点。

Java Servlet Disadvantages

以下是Java Servlet的缺点。

  • 众所周知,设计Java Servlet很复杂。

  • Java Servlet很繁重,有时会降低应用程序的性能。

  • 复杂的业务逻辑使应用程序难以解码。

  • 必须在服务器端安装JRE才能运行Servlet。

至此,我们完成了Java Servlet的优点和缺点。接下来,我们将简要了解另一种与Java Servlet类似的技术--CGI(计算机图形界面)。

CGI

CGI是Common Gateway Interface的缩写。像Java Servlet一样,它设计了CGI,允许Web服务器调用外部程序,将HTTP请求传递给外部程序,并处理它。

下图描述了CGI的基本架构。

CGI

它在CGI外壳之间分发收到的HTTP请求,如上图所示。而在Java Servlet中,它在线程之间分发要处理的请求。

在介绍了CGI和Servlet之后,现在是讨论Java Servlet和CGI之间的一些重要区别的好时机。

CGI v/s Java Servlet

下表比较了Java Servlet和CGI之间的区别。

Java Servlets

CGI

Servlet在JVM中编写和运行

CGI脚本是在本地操作系统中编写的可执行代码

性能很高

性能较低

独立于平台

很难在平台之间切换

它将Servlet转换为字节码

CGI脚本直接执行

Servlet是可移植的

CGI不可移植

至此,我们已经结束了Java Servlets文章。Java Servlets已被证明是设计、开发、部署和维护Web服务的一站式解决方案。我们现在走得更远。您需要达到的下一个里程碑是掌握Java中的API。