JavaRush /Java 博客 /Random-ZH /什么是JSP?让我们在实践中探索可能性
Анзор Кармов
第 31 级
Санкт-Петербург

什么是JSP?让我们在实践中探索可能性

已在 Random-ZH 群组中发布
JSP 或 Java Server Pages 是一种 Java 技术,允许您为 Java 应用程序创建动态网页。在本文中,我们将更详细地讨论 JSP 是什么,讨论该技术的一些功能,了解 JSP 页面的结构,并尝试实际了解这些 Java Server Page 是什么。 什么是JSP? 了解实践中的可能性 - 1但首先,我们来谈谈 JSP 的好处和重要性。JSP 允许开发人员:
  • 将网页中的数据接收为 Java 代码;
  • 将数据从 Java 代码发送到网页;
  • 直接在 html 中编写 Java 代码(但是,您不应该滥用这一点)。
由于以下几个原因,对 JSP 知识的需求可以得到相当高的评估:
  • JSP 是主要的 Java Web 技术之一;
  • JSP在大多数公司和项目中得到广泛应用;
  • JSP 与 servlet 容器内的 Java servlet 无缝集成。

JSP定义

以下是维基百科的定义: JSP(JavaServer Pages)是一种允许 Web 开发人员创建具有静态和动态组件的内容的技术。JSP 页面包含两种类型的文本:静态源数据(可以是 HTML、SVG、WML 或 XML 文本格式之一)和 JSP 元素(构造动态内容)。此外,还可以使用JSP 标记库以及表达式语言(EL) 将Java 代码嵌入到JSP 页面的静态内容中。使用 Jasper JSP 页面编译器将 JSP 页面代码翻译为 servlet Java 代码,然后编译为 Java 虚拟机 (JVM) 字节码。能够执行JSP页面的Servlet容器是用独立于平台的Java语言编写的。JSP技术是一种独立于平台、可移植且易于扩展的用于开发Web应用程序的技术。

JSP页面结构

一般来说,JSP是指动态网页,其中动态部分使用Java生成,静态部分使用标记语言(最常见的是HTML)生成。这样的页面是扩展名为 .jsp 的文本文档,以其中一种标记语言(例如 HTML、SVG、WML 和 XML)编写,并散布有 JSP 元素(或 JSP 标签)。这些标签包含对服务器代码(数据)的调用,并执行一些计算。这些文件在服务器上进行处理,所有 JSP 标签都转换为 html 标签,输出是常规的 html 页面。下图显示了 JSP 页面的结构及其与服务器的交互。 什么是JSP? 了解实践中的可能性 - 2一个简单的 JSP 页面示例:
<html>
  <body>
    <p> ${2 + 2} равно 4 </p>
  </body>
</html>
在此示例中,用特殊语言(表达式语言 (EL)) 编写的 JSP 表达式被“嵌入”到 html 代码中。它提供了表示层(网页)和应用程序业务逻辑层(Java 代码)之间交互的重要机制。正如您从示例中看到的,JSP 表达式括在大括号内,并带有前导美元符号 - ${...}。大括号内的所有内容都在服务器上计算,并且该表达式的结果在 html 中给出,位于最初定义 JSP 表达式的位置。处理完所有标签后,页面将如下所示:
<html>
  <body>
    <p> 4 равно 4 </p>
  </body>
</html>

安装并运行 servlet 容器

由于 JSP 代码被翻译为 Java servlet 代码,因此我们需要在某处获取某种 servlet 容器,以便我们可以讨论 JSP 的工作原理。否则,没有容器,JSP将无法工作。但首先,让我们看一下 servlet 容器的定义。servlet容器是一个程序,是一个服务器,为servlet提供系统支持,并保证其生命周期按照规范中定义的规则进行。它可以作为一个成熟的独立 Web 服务器,作为另一个 Web 服务器的页面提供程序,或者集成到 Java EE 应用程序服务器中。最流行的 servlet 容器之一是 Apache Tomcat。 什么是JSP? 了解实践中的可能性 - 3值得一提的是,Tomcat 并不是一个成熟的 Java EE 应用服务器。然而,对于 servlet 和 JSP 页面的重要需求,Tomcat 服务器就足够了。让我们开始安装吧。您可以从官方页面下载Tomcat 。对于 Windows 操作系统,您可以按如下方式安装 Tomcat:
  1. 下载 32 位/64 位 Windows 服务安装程序。

  2. 让我们运行该文件。

  3. 接下来,按照通常的安装过程进行操作:

    1. 不要忘记选中相应安装程序窗口上的示例复选框:

      什么是JSP? 了解实践中的可能性 - 4
    2. 并指定预安装的JRE的路径:

      什么是JSP? 了解实践中的可能性 - 5
  4. 安装后,启动 Tomcat 并打开浏览器。转到http://localhost:8080/

如果看到Tomcat启动页,则说明安装成功,服务器正在运行。要手动启动和停止 Tomcat,您可以运行 bin 目录中的两个可执行文件之一。它位于 Tomcat 的安装目录中: 什么是JSP? 了解实践中的可能性 - 6

演示应用程序。被隐藏的项目

让我们看看一些实际的 JSP 功能。其中之一是访问所谓的隐藏对象(隐式对象)。这些是可以使用表达式语言 (EL) 访问的对象。此类对象的示例包括 HTTP 标头或 URL 参数。让我们揭示(或刷新我们的记忆)什么是 URL 参数。下面的示例显示了带有参数的 URL。参数以粗体显示:http://example.net/foo/bar ?param1=value1¶m2=value2&a=1&name=Tom 参数始终以问号 (?) 开头。接下来是参数的名称,然后是等号 - 确定参数的值。可以有多个或一个参数。如果有多个,则每个名称/值对均由与号字符 (&) 分隔。上面的例子中定义了几个参数及其值:
参数名称 参数值
参数1 值1
参数2 值2
A 1
姓名 汤姆
让我们看一下如何访问 JSP 中的隐藏对象,包括 URL 参数。为此,启动 Tomcat 并在 http://localhost:8080/ 页面上打开浏览器,然后转至示例页面: 什么是JSP? 了解实践中的可能性 - 7然后点击链接 JSP 示例: 什么是JSP? 了解实践中的可能性 - 8在示例页面上点击链接隐式对象 -> 执行: 什么是JSP? 了解实践中的可能性 - 9在此页面中您可以看到使用隐藏对象的示例。下面是页面截图,有详细说明: 什么是JSP? 了解实践中的可能性 - 10尝试使用页面上相应字段更改参数的值foo,然后注意到地址栏中该参数的值也发生了变化。所呈现的页面没有太多功能,但它是一个很好的参考,您可以在将来需要访问特定隐藏对象时参考。此页面包含可以访问的隐藏对象的列表。下面的表中演示了如何访问特定对象。

JSP函数

现在我们回到上一页,看一下“隐藏对象”页面的源代码: 什么是JSP? 了解实践中的可能性 - 11这里是:
<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<html>
  <head>
    <title>JSP 2.0 Expression Language - Implicit Objects</title>
  </head>
  <body>
    <h1>JSP 2.0 Expression Language - Implicit Objects</h1>
    <hr>
    This example illustrates some of the implicit objects available
    in the Expression Language.  The following implicit objects are
    available (not all illustrated here):
    <ul>
      <li>pageContext - the PageContext object</li>
      <li>pageScope - a Map that maps page-scoped attribute names to
          their values</li>
      <li>requestScope - a Map that maps request-scoped attribute names
          to their values</li>
      <li>sessionScope - a Map that maps session-scoped attribute names
          to their values</li>
      <li>applicationScope - a Map that maps application-scoped attribute
          names to their values</li>
      <li>param - a Map that maps parameter names to a single String
          parameter value</li>
      <li>paramValues - a Map that maps parameter names to a String[] of
          all values for that parameter</li>
      <li>header - a Map that maps header names to a single String
          header value</li>
      <li>headerValues - a Map that maps header names to a String[] of
          all values for that header</li>
      <li>initParam - a Map that maps context initialization parameter
          names to their String parameter value</li>
      <li>cookie - a Map that maps cookie names to a single Cookie object.</li>
    </ul>

    <blockquote>
      <u><b>Change Parameter</b></u>
      <form action="implicit-objects.jsp" method="GET">
          foo = <input type="text" name="foo" value="${fn:escapeXml(param["foo"])}">
          <input type="submit">
      </form>
      <br>
      <code>
        <table border="1">
          <thead>
            <td><b>EL Expression</b></td>
            <td><b>Result</b></td>
          </thead>
          <tr>
            <td>\${param.foo}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${param["foo"]}</td>
            <td>${fn:escapeXml(param["foo"])} </td>
          </tr>
          <tr>
            <td>\${header["host"]}</td>
            <td>${fn:escapeXml(header["host"])} </td>
          </tr>
          <tr>
            <td>\${header["accept"]}</td>
            <td>${fn:escapeXml(header["accept"])} </td>
          </tr>
          <tr>
            <td>\${header["user-agent"]}</td>
            <td>${fn:escapeXml(header["user-agent"])} </td>
          </tr>
        </table>
      </code>
    </blockquote>
  </body>
</html>
如果您熟悉 HTML,那么该页面的源代码对您来说应该非常清楚。注意这些行:
<tr>
  <td>${param.foo}</td>
  <td>${fn:escapeXml(param["foo"])} </td>
</tr>
在这里我们看到 html 标签<tr><td>. 这些标记后面是<td>JSP 标记,用花括号括起来${ }。但是,请注意 URL 参数的值是如何输出的foo
${fn:escapeXml(param["foo"])}
该值是通过使用 JSP 函数输出的fn:escapeXml()。JSP 函数封装了一些可以重用的功能。在本例中,它是 XML 转义。JSP 技术提供了广泛的函数可供选择,以及创建您自己的函数的能力。要在 JSP 中使用函数,必须将定义该函数的相应库导入到 JSP 文件中。

标签库

我们再看一下上面的另一行源代码(第二行):
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
这就是标签库的导入方式。语法很直观。我们定义了几件事:
  • taglib(标签库-标签库);
  • url,该图书馆所在的位置;
  • 前缀(在本例中fn为 ),通过它可以调用此库中定义的函数。
在上面的示例中,我们研究了导入函数。具体来说,在我们的示例中,我们导入了 JSTL(JSP 标准标记库)库。JSTL 是一个标准标记库,包含一组不同的库,每个 servlet 和 JSP 实现(包括 Tomcat)都附带这些库。另一个流行的标签库是 core,可以像这样导入:
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>
与 一样fn,该表示法c是可选的并且被普遍接受。几乎在使用这些库的任何地方都可以找到这个名称。以下是核心库中的函数示例:
<c:out value = "${'<div>'}"/>
该函数将简单地输出标签<div>。该函数已经进行了 XML 转义。从安全角度来看,这个函数很重要,因为通过直接输出变量的值,${variable}我们打开了脚本注入的大门。

JSP编辑

现在,有了新知识,让我们尝试对 Tomcat 内的演示应用程序进行更改。为此,我们将在安装此 servlet 容器的文件夹中找到此页面的源代码。该文件可以在以下地址找到: ...\Apache Software Foundation\Tomcat 9.0\webapps\examples\jsp\jsp2\el 然后在任意文本编辑器中打开文件implicit-objects.jsp 添加核心库的导入,然后使用它来输出一些文本: 什么是JSP? 了解实践中的可能性 - 12现在让我们刷新隐藏对象页面并看看所做的更改: 什么是JSP? 了解实践中的可能性 - 13

结果

这样,我们就粗略地考察了JSP这样的技术。我们讨论过了:
  • 什么是 JSP;
  • JSP页面结构;
  • 安装和运行 Tomcat servlet 容器的过程;
  • 用于访问隐藏对象的演示应用程序,包含在 Tomcat 服务器分发包中;
  • JSP 函数和标记库。

下一步是什么?

为了保护材料,您可以:
  1. 重复本文中描述的所有内容。
  2. 考虑 Tomcat 服务器中包含的其他演示应用程序。
  3. 编写您自己的应用程序并将其部署到 servlet 容器。作为指南,您可以使用文章在 IntelliJ Idea Enterprise 中创建简单的 Web 项目。一步步来,有图。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION