簡體   English   中英

在Web應用程序中使用JSTL

[英]Use of JSTL in a web app

我是對Java的了解有限的前端或UI開發人員。 我有一個使用了JSTL的基於Java的Web應用程序。我想了解JSTL的確切用法。 它是否始終在JSP頁面中使用,並且僅用於從數據庫獲取數據。 您能否以一些基本示例進行解釋。

JSP標記用於在JSP中動態生成HTML,但無需混合Java代碼和HTML標記。 JSTL是標准JSP標簽的庫。 它的意思是“ JavaServer Pages標准標記庫”,顧名思義,它在JSP中使用。

永遠不要使用它從數據庫中獲取數據。 應該在用Java編寫的控制器中執行JSP之前,從數據庫中獲取數據。 控制器完成工作后,應將HTTP請求調度到視圖(JSP),該視圖的作用是呈現數據。

因此,如果您的應用程序使用sql標記,那就錯了。 corefmt標簽都可以。 正如Java EE教程所指出的:

表7-7中列出的用於訪問數據庫的JSTL SQL標記旨在用於快速原型設計和簡單的應用程序。 對於生產應用程序,數據庫操作通常封裝在JavaBeans組件中。

JSTL-JavaServer Pages標准標記庫-旨在克服JSP的缺點,即需要一種更簡單的方法從JSP頁面調用Java庫。 以前的實現方法是使用<%%><%=進入Java,然后執行所需的操作,這導致非常復雜且難以維護的JSP頁面。

JSTL除了在JSP頁面中具有HTML標記之外,還為您提供了新標記,但是它們在服務器端具有特殊含義,因此當客戶端要求時,它將被解釋,並將結果放入實際頁面中,發送給客戶端。

標簽定義可以執行您在Java中可以執行的任何操作,但是您應該強烈考慮在哪里執行的操作。 在JSP頁面中有例如SQL請求意味着您將業務邏輯與實際表示聯系在一起,這是令人痛苦的學習,這也使Web應用程序變得復雜且難以維護。

是否總是在JSP頁面中使用

是。

...,它僅用於從數據庫獲取數據。

否。實際上,在大多數情況下,使用JSF或使用JSTL或其他方式(例如scriptlet)從JSP訪問數據庫是一種不好的做法

這是否意味着像大多數JSP一樣會映射一個關聯的Java文件(如1-1),在該文件中編寫了使用SQL查詢獲取數據的邏輯並將其提供給JSP頁面。

有點。 但不一定有一對一的映射:

  • 並非所有JSP都需要訪問數據庫。
  • Java Servlet可以使用多個JSP來呈現不同的輸出頁面。
  • 不同的servlet可以共享一個JSP; 例如,呈現常見的錯誤消息頁面。

如果是,那么JSP中JSTL代碼的確切作用是什么。

JSP的目的是呈現輸出。 通常是HTML頁面,但是可以是任何基於文本的頁面。 當輸出呈現邏輯過於復雜或混亂而無法使用JSP EL進行表達時,將在JSP中使用JSTL。


更新

JSTL和JSP EL的老式替代方法是將Java代碼(即scriptlet)嵌入JSP中。 例如:

<c:if test="${a == 'true'}">
    hi
</c:if>

等效於這樣的事情:

<% if ("true".equals(context.findAttribute("a")) { %>
    hi
<% } %>

據我了解,對於JSTL來說,它還可以通過if-else語句在JSP中用於動態HTML呈現。

您正在描述HTML,其結構和內容取決於請求參數,配置參數,從數據庫中獲取的數據等。這是JSTL的主要用途。

但是,這通常不是所謂的“動態HTML”。 動態HTML是瀏覽器更改當前顯示頁面HTML的地方,例如,當頁面中嵌入的Javascript通過修改DOM更改顯示頁面時。

JSTL 是在“ J2EE服務器JSP Servlet引擎”部分中開發的“自定義標簽庫集” ,並適用於該規范。 為用Java2 J2EE規范編寫的Java服務器配置的“ Java J2EE規范服務器標記頁中的任何標簽” 都是JSF,JSP,JSTL或Databaseing cudtom標簽的“自定義標簽實現” 但是,它不是Java Bean(編寫類程序的語法和語義與它們極為相似)。 每個自定義標簽庫在java服務器標記中都有其自己的有用屬性集,這就是開發系統的原因。 Java Bean系統類似,但是通過EL語言完成。 “標記”既使用頁面中的標記表示形式,又使用服務器中其綁定的(配置的) .class文件程序以處理頁面標記和接口或加入其他服務器過程和程序 JSTL只是JSP-servelt引擎的Java服務器標記庫,因為JSF是face-servlet引擎的標記,並且兩者都是自定義標記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM