IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 什么是 Java servlet?Java Web 应用程序的请求处理 -> 正文阅读

[Java知识库]什么是 Java servlet?Java Web 应用程序的请求处理

Servlet 在 Java Web 应用程序中提供 URL 映射和请求处理功能

请求处理是 Java Web 应用程序开发的基础。为了响应来自网络的请求,Java Web 应用程序必须首先确定哪些代码将响应请求 URL,然后编组响应。每个技术栈都有一种完成请求-响应处理的方法。在 Java 中,我们为此使用servlet(和 Java Servlet API)。将 servlet 视为一个微型服务器,其工作是接受请求并发出响应。

URL 与端点

作为开发人员,你可能还知道 URL 是 Web 服务的端点。一个URL(统一资源定位器)是描述和使用文本查找互联网资源的标准方法。术语端点是指表示 Web 服务的 URL。术语端点和URL通常可以互换使用,尽管它们指的是不同的使用域。

作为层的软件

正如我在Java 运行时环境简介中所解释的,我们可以将软件视为一系列层。软件系统中的每一层都拥有其上层所需的某些功能。例如,硬件层位于固件层之下,支持其功能。同样,运行操作系统需要固件层(PC 上的 BIOS 或 Mac 上的 EFI)。图 1 在分层图中显示了这三个组件。


还可以将软件系统视为一系列容器,其中较低层充当较高层的容器。每一层都充当运行下一级功能的上下文:硬件包含固件,固件包含操作系统。

服务器端Java

服务器端Java应用程序是一大类的充当网络端点的应用程序,接收来自给定的URL的HTTP请求和在像HMTL或JSON的交换格式发回数据中的一个。服务器端 Java 由标准化的 Java 服务器和与这些服务器交互的技术组成。在的Java Servlet API是用来与Java服务器交互的标准。

Java 服务器和 JVM

在基于 Java 的系统中,操作系统 (OS) 包含JVM,它为运行 Java 应用程序提供了一致的环境。Java 服务器位于 JVM 之上。正如 JVM 是操作系统和 Java 应用程序之间的中介,Java 服务器提供对操作系统网络和处理功能的一致、简化的访问。Java 应用程序在服务器内部运行,使用Java Servlet API访问服务器的功能。

图 2 显示了服务器端 Java 的软件堆栈。

Java Servlet 规范

在Java Servlet规范提供了Java服务器和相关组件的基本定义。它定义了服务器在通过 HTTP 进行网络交互期间如何发送请求和响应。所有 Java 服务器都必须与 Java Servlet 规范兼容。今天的大多数 Java 服务器都与Servlet 4.0兼容。

小服务程序 4.0

Java Servlet 规范的每个版本都带来了新特性。Servlet 4.0 包括对 HTTP/2 协议及其服务器推送机制的支持。服务器推送使服务器能够预加载网页所需的资产,而不是等待特定请求。Servlet 4.0 规范还包含在运行时发现 URL 映射的能力,这一功能称为运行时发现。

适用于 Java 的 Eclipse 企业版

Servlet 4.0 是开源EE4J (Eclipse Enterprise for Java) 计划的一部分,其中包括提议的 JCP 替代品。

要实际了解 Servlet 规范的工作原理,请考虑您当前正在阅读的文章。在 JavaWorld 基础设施的某个地方,这篇文章被格式化并提交出版。它被分配了一个 URL,通过网络路由,并到达服务器。服务器将工件(文章)与 URL 连接起来,并确定当针对该 URL 的 GET 请求到达时,它会将这篇文章作为 HTML 返回。

创建 Java Web 应用程序时,正在创建在 Java 服务器内运行的软件。应用程序利用服务器上下文提供的工具,其中之一就是 Servlet API。因此,实现 Servlet 规范的 Java 服务器有时称为servlet 容器。

要创建 servlet,需要实现Servlet接口并将其部署在 servlet 容器中。图 3 显示了应用程序如何依赖 servlet。

使用 Tomcat 编写 servlet

现在已经有了一个概念性的概述,让我们开始着手编写 Java servlet 的工作。


首先需要一个 servlet 容器,也称为 Java 应用程序服务器。Tomcat 和 Jetty 是两种最流行的 servlet 容器。我们将使用 Tomcat,因为它是 Java 历史最悠久的应用服务器之一。Tomcat 是免费的并且包含最少的花里胡哨,这将使我们的示例保持简单。(顺便说一下,“花里胡哨”是一个技术术语。)

下载并安装Tomcat

如果还没有 Tomcat,请先打开Tomcat 下载页面。在那里,可以选择 Windows 安装程序或最适合计算机的 ZIP 下载(例如,我正在下载 64 位 Windows zip)。

就是这样:刚刚将 Java 服务器层添加到您的操作系统中!

验证 Tomcat 正在运行

在继续之前,让我们确保可以运行 Tomcat。启动 Windows 服务或从命令行运行startup.sh或startup.bat文件。

如果现在打开 Web 浏览器并转到localhost:8080,应该会看到以下屏幕:

图 4. Tomcat 欢迎屏幕

如果你在运行 Tomcat 时遇到任何问题,你可以访问Tomcat 文档进行故障排除。

运行 Tomcat servlet 示例

现在让我们来看看 Java servlet。为方便起见,Tomcat 包含了一些简单的示例。

单击你在Tomcat 欢迎页面的Developer Quick Start部分中看到的示例链接。到达那里后,单击Servlet 示例链接。

现在,你可以通过单击Hello World示例的Execute链接来查看运行中的简单 Servlet 。这会将你的浏览器带到http://localhost:8080/examples/servlets/servlet/HelloWorldExample URL,在那里你将看到常年程序员的称呼。

查看 servlet 源代码

单击浏览器中的后退箭头,然后单击HelloWorld 应用程序的源链接。源代码如清单 1 所示。

清单 1. HelloWorld 示例的源代码

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

    throws IOException, ServletException

    {

        response.setContentType("text/html");

        PrintWriter out = response.getWriter();

        out.println("<html>");

        out.println("<head>");

        out.println("<title>Hello World!</title>");

        out.println("</head>");

        out.println("<body>");

        out.println("<h1>Hello World!</h1>");

        out.println("</body>");

        out.println("</html>");

    }

}

这个非常简单的代码清单包含 Java servlet 的基本组件。让我们一步一步地考虑它。

第一行调用标准 Java 导入。之后,程序定义了一个新类,它扩展了HttpServlet该类。这很关键,因为 servlet必须实现Servlet接口才能在 servlet 容器内运行。

接下来,HelloWorld该类定义了一个名为 的方法doGet()。这是 servlet 的标准方法:它告诉服务器将HTTP GET请求路由到此方法。其他 HTTP 方法,如 POST,由类似命名的方法处理,如doPost.

请注意,它doGet()有两个参数:(HttpServletRequest request, HttpServletResponse response). 这两个对象代表请求和响应。它们提供对你的代码处理请求和发出响应所需的一切的访问。HelloWorld.doGet例如,在servlet 方法中,该response对象用于通知服务器要发布什么内容类型标头。在这种情况下,它是response.setContentType("text/html");.

最后,程序从响应中获取Java Writer 对象response.getWriter()。在Writer随后被用来创建一个简单的HTML响应返回给浏览器。

网址映射

清单 1 中的结构和代码流相当直观,但有一个明显的遗漏。服务器如何知道将http://localhost:8080/examples/servlets/servlet/HelloWorldExampleURLHelloWorld.doGet方法相关联?

你将在应用程序元数据中找到这个谜团的答案。每个 Java Web 应用程序都包含一个名为 的标准元数据文件web.xml,它告诉服务器如何将 URL 映射到 servlet。

什么是元数据?

元数据是用于从软件本身外部控制软件操作的任何信息。

在 Tomcat 示例应用程序中,web.xml可以在\apache-tomcat-9.0.11\webapps\examples\WEB-INF\web.xml.\WEB-INF\web.xml是 servlet 元数据文件的标准位置。如果你打开此文件,您将看到服务器是如何配置的。

web.xml清单 2 中的缩写包含我们讨论所需的信息。

清单 2. Tomcat HelloWorld 示例的源代码

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

  version="4.0"

  metadata-complete="true">

<!-- ...CODE REMOVED FOR BREVITY... -->

    <servlet>

        <servlet-name>HelloWorldExample</servlet-name>

        <servlet-class>HelloWorldExample</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>HelloWorldExample</servlet-name>

        <url-pattern>/servlets/servlet/HelloWorldExample</url-pattern>

    </servlet-mapping>

<!-- ...CODE REMOVED FOR BREVITY... --> 

</web-app>

清单 2 显示了一个典型的 XML 文件头,它引用了 Java Web 应用程序描述符的模式。后面跟着两个条目:<servlet><servlet-mapping>

给呼叫<servlet>分配一个逻辑名称,HelloWorldExampleHelloWorldExample类,通过<servlet的名称><servlet的类>字段。

调用<servlet-mapping>将该逻辑名称分配给<url-pattern>值,从而将代码与 URL 相关联。

请注意,该<url-pattern>字段支持通配符以处理各种灵活的 URL 映射。

其他 servlet 功能

除了 URL 映射之外,servlet 还提供了额外的过滤和身份验证功能。过滤器用于处理请求,身份验证用于将简单的用户和角色分配给 URL 模式。JavaServer Pages (JSP) 规范以更强大的方式支持生成 HTML。

结论

超硬核!贯穿一生的知识点总结,你要的都有

本文是对 Java servlet 的概念性概述,包括 Java 服务器内的 URL 请求和响应处理。了解服务器端 Java 的这些基本元素将帮助您集成更高级的概念,例如服务器推送和 URL 映射的运行时发现,这是 Servlet 4.0 中的新概念。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:02:30  更:2021-07-15 16:02:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 20:34:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码