2010-03-08 66 views
5

我覺得我錯過了一些東西 - 從它看起來,JSP開箱即用,支持標記,因爲this question's answer顯示(該人正在問一個純粹的jsp問題並得到了一個涉及標籤的答案)。 但是,如果我嘗試運行給定的代碼在JSP中啓用JavaServerPages標準標記庫(JSTL)

<c:out value="${myString}"/> 

(與myString之前定義的,當然),在jsp只是寫上面的一行到HTML。

我需要額外做些事情才能啓用它嗎?

回答

8

JSTL的支持取決於所使用的應用程序服務器/ servletcontainer。一些JSTL船舶,其他船舶不。這與JSP/Servlet版本無關。例如,Sun Glassfish(作爲完整版的 Java EE實現)與JSTL一起提供,例如Apache Tomcat(作爲簡單 JSP/Servlet實現)不包含在內。對他們來說,你需要自己安裝JSTL。

這其實很簡單(假設你使用的Servlet 2.5或更新版本):

  1. 下載jstl-1.2.jar
  2. 把它/複製到webapp的/WEB-INF/lib文件夾(它是webapp的默認類路徑的一部分)。
  3. 根據this JSTL documentation聲明JSP頂部的標籤(單擊任何taglib以查看聲明示例)。對於JSTL core這是以下幾點:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    

這就是全部。如果你仍然在使用Servlet 2.4,那麼你需要下載jstl.jarandstandard.jar(這是JSTL 1.1的一部分)。這些步驟的剩餘部分是相同的(只需放入classpath並在JSP的頂部聲明)。

您可能會注意到一些糟糕的在線教程會建議提取JAR文件並將Web應用程序的web.xml與TLD聲明混淆在一起。你絕對不應該那樣做,這是一個錯誤的建議,它是由JSTL 1.0 - > JSTL 1.1步驟中taglib URI的變化引起的。不是更新JSP中的taglib URI,而是決定重新定義web.xml中的舊taglib URI,這成爲一個神話。

JSP本身只附帶開箱即用的<jsp:xxx>標籤。你可以在this document找到它們(這確實很舊,但並沒有改變到當前的JSP 2.2)。

1

您需要在JSP的頂部聲明的taglib:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
+0

謝謝!這看起來像是朝着正確方向邁出的一步,但仍然不是一個確切的答案,因爲我得到異常'org.apache.jasper.JasperException:絕對URI:http://java.sun.com/jsp/jstl/core無法在web.xml或使用此應用程序部署的jar文件中解析。 如果我需要安裝某些東西,那很好 - 但我認爲這個taglib是用jsp「開箱即用」的。 你能否考慮在答案中加入答案? – olamundo 2010-03-08 08:57:44

+0

@Noam:它只在特定版本的JSP(本例中爲2.0及更高版本)中出現。但是你沒有告訴我們關於你的設置的任何信息,所以我不能給你一個更好的答案。 – skaffman 2010-03-08 10:00:19

+0

skaffman,這其實不是真的。這取決於所使用的服務器。 – BalusC 2010-03-08 11:46:54