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技術是一種獨立於平台、可移植且易於擴展的開發網頁應用程式的技術。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