JSP 或 Java Server Pages 是一种 Java 技术,允许您为 Java 应用程序创建动态网页。在本文中,我们将更详细地讨论 JSP 是什么,讨论该技术的一些功能,了解 JSP 页面的结构,并尝试实际了解这些 Java Server Page 是什么。 但首先,我们来谈谈 JSP 的好处和重要性。JSP 允许开发人员:
让我们看一下如何访问 JSP 中的隐藏对象,包括 URL 参数。为此,启动 Tomcat 并在 http://localhost:8080/ 页面上打开浏览器,然后转至示例页面: 然后点击链接 JSP 示例: 在示例页面上点击链接隐式对象 -> 执行: 在此页面中您可以看到使用隐藏对象的示例。下面是页面截图,有详细说明: 尝试使用页面上相应字段更改参数的值
- 将网页中的数据接收为 Java 代码;
- 将数据从 Java 代码发送到网页;
- 直接在 html 中编写 Java 代码(但是,您不应该滥用这一点)。
- 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 页面示例:<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。 值得一提的是,Tomcat 并不是一个成熟的 Java EE 应用服务器。然而,对于 servlet 和 JSP 页面的重要需求,Tomcat 服务器就足够了。让我们开始安装吧。您可以从官方页面下载Tomcat 。对于 Windows 操作系统,您可以按如下方式安装 Tomcat:-
下载 32 位/64 位 Windows 服务安装程序。
-
让我们运行该文件。
-
接下来,按照通常的安装过程进行操作:
-
不要忘记选中相应安装程序窗口上的示例复选框:
-
并指定预安装的JRE的路径:
-
-
安装后,启动 Tomcat 并打开浏览器。转到http://localhost:8080/。
演示应用程序。被隐藏的项目
让我们看看一些实际的 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 | |
姓名 | 汤姆 |
foo
,然后注意到地址栏中该参数的值也发生了变化。所呈现的页面没有太多功能,但它是一个很好的参考,您可以在将来需要访问特定隐藏对象时参考。此页面包含可以访问的隐藏对象的列表。下面的表中演示了如何访问特定对象。
JSP函数
现在我们回到上一页,看一下“隐藏对象”页面的源代码: 这里是:<%@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
为 ),通过它可以调用此库中定义的函数。
<%@ 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这样的技术。我们讨论过了:- 什么是 JSP;
- JSP页面结构;
- 安装和运行 Tomcat servlet 容器的过程;
- 用于访问隐藏对象的演示应用程序,包含在 Tomcat 服务器分发包中;
- JSP 函数和标记库。
下一步是什么?
为了保护材料,您可以:- 重复本文中描述的所有内容。
- 考虑 Tomcat 服务器中包含的其他演示应用程序。
- 编写您自己的应用程序并将其部署到 servlet 容器。作为指南,您可以使用文章在 IntelliJ Idea Enterprise 中创建简单的 Web 项目。一步步来,有图。
GO TO FULL VERSION