什么是Java Servlet?请求处理Java Web应用程序

本文翻译自 What are Java servlets? Request handling for Java web applications

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

在这里插入图片描述

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

URL 和 endpoint
作为Internet用户,您熟悉URL作为浏览器中的网站地址。
作为开发人员,您可能还知道URL作为Web服务的 endpoint 。 URL(统一资源定位符)是使用文本描述和定位Internet资源的标准方法。
术语endpoint 是指表示Web服务的URL。 术语“endpoint ”和“ URL”通常可互换使用,尽管它们指的是不同的使用域。

分层软件

正如我在Java Runtime Environment简介中所解释的那样,我们可以将软件视为一系列层次。 软件系统中的每一层都具有其上一层所要求的某些功能。 例如,硬件层位于固件层下面,支持其功能。 同样,需要固件层(PC上的BIOS或Mac上的EFI)来运行操作系统。 图1分层显示了这三个组件。
在这里插入图片描述
您也可以将软件系统视为一系列容器,其中较低的层充当较高层的容器。 每一层都充当运行下一功能级别的上下文:硬件包含固件,而固件包含操作系统。

服务器端Java

服务器端Java应用程序是用作网络端点,从给定URL接收HTTP请求并以HMTL或JSON之类的互换格式发送回数据的广泛应用程序之一。 服务器端Java由标准化Java服务器和用于与这些服务器交互的技术组成。 Java Servlet API是用于与Java服务器进行交互的标准。

Java服务器和JVM

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

图2显示了用于服务器端Java的软件堆栈。
在这里插入图片描述

Java Servlet规范

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

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

为了对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,则以下屏幕将为您打招呼:
在这里插入图片描述

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

运行Tomcat Servlet示例

现在让我们看一下Java servlet。 方便地,Tomcat包含了一些简单的示例。

单击在Tomcat欢迎页面的“开发人员快速入门”部分中看到的“示例”链接。 到达那里后,单击Servlet示例链接。

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

查看servlet源代码

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

清单1. Hello World示例的源代码

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请求,HttpServletResponse响应)。 这两个对象分别代表请求和响应。 它们提供对您的代码处理请求和发出响应所需的一切的访问。 例如,在HelloWorld.doGet servlet方法中,响应对象用于通知服务器要发出的内容类型标头。 在这种情况下,它是response.setContentType(“ text / html”);。

最后,程序从响应response.getWriter()获取Java Writer对象。 然后,使用Writer创建简单的HTML响应以返回到浏览器。

URL mapping

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

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

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

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

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

清单2. Tomcat Hello World示例的源代码

<?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应用程序描述符的模式。 这之后是两个条目:和。

对的调用通过和字段将逻辑名HelloWorldExample分配给HelloWorldExample类。

对的调用将该逻辑名分配给值,从而将代码与URL关联。

请注意,字段支持通配符,以便处理各种灵活的URL映射。

其他Servlet功能

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

总结

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值