JavaRush /Java Blog /Random-TW /什麼是JSP?讓我們在實踐中探索可能性
Анзор Кармов
等級 31
Санкт-Петербург

什麼是JSP?讓我們在實踐中探索可能性

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

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