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

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

URL与端点

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

分层软件

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

JW Servlet图1 马修·泰森(Matthew Tyson)

图1.软件作为层

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

服务器端Java

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

Java服务器和JVM

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

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

JW Servlet图2 马修·泰森(Matthew Tyson)

图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映射的功能,这一功能称为运行时发现

Eclipse企业版Java

Servlet 4.0是开源EE4J(Java的Eclipse企业版)计划的一部分 ,该计划包括对JCP的提议替代

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

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

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

JW Servlet图3 马修·泰森(Matthew Tyson)

图3. Java 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.shstartup.bat文件。

如果现在打开Web浏览器并转到localhost:8080 ,则以下屏幕将为您打招呼:

JW Servlet图4 马修·泰森(Matthew Tyson)

图4. Tomcat欢迎屏幕

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

运行Tomcat Servlet示例

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

单击在Tomcat欢迎页面的“ 开发人员快速入门”部分中看到的“ 示例”链接。 到达那里后,单击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");

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

URL映射

清单1中的结构和代码流是相当直观的,但是有一个明显的遗漏。 服务器如何知道将http://localhost:8080/examples/servlets/servlet/HelloWorldExample URL与HelloWorld.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的元数据文件的标准位置。 如果打开此文件,则将看到服务器的配置方式。

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

清单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>的调用通过<servlet-name>和<servlet-class>字段将逻辑名HelloWorldExample分配给HelloWorldExample类。

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

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

其他Servlet功能

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

结论

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

这个故事“什么是Java servlet?Java Web应用程序的请求处理”最初由JavaWorld发布。

翻译自: https://www.infoworld.com/article/3313114/what-is-a-java-servlet-request-handling-for-java-web-applications.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值