JSP 基本語法
JSP 運行平臺
- Caucho 公司的 Resin 平臺
- Apache 公司的 Tomcat 平臺
- BEA 公司的 WebLogic 平臺
- IBM WebSphere Application Server 平臺
註釋方式
<%-- 註釋內容 --%>
隱式隱藏,註釋的內容不會傳遞到客戶端<!-- 註釋內容 -->
顯式隱藏,註釋的內容會被傳遞到客戶端<% /* 註釋內容 */ %>
和<% //註釋內容 %>
實際是利用了插入腳本的方式插入了註釋,同樣不會被傳遞給客戶端
變量聲明
在 <% %>
中聲明的變量是局部變量,而在 <%! %>
中聲明的變量是在整個 JSP 頁面內有效的,在 JSP 被編譯爲類的實例對象時,這種變量就是對象的屬性。所以當 JSP 第一次編譯執行後,其中聲明的全局變量是會被之後的請求共享的。如此,刷新 JSP 界面時,可以看到他的變化是連續性的。
注意在 <% %>
是不能聲明方法的,這是因爲其中的代碼會被放到方法中去執行,而方法是無法嵌套聲明的。
除了在 <% %>
中使用默認的 out 對象輸出值外,還可以使用 <%=expression %>
輸出值,expression
是可以計算的表達式。
內置對象
JSP 界面中存在着一些不需要聲明就可以直接使用的對象,稱爲內置對象或隱藏對象。
包括:request、response、out、session、application、pageContext、config、page 以及 exception 。
默認對象 exception 是一個 java.lang.Throwable
對象,用來表示界面獲取到的錯誤,但是該對象只有當 JSP 界面被設置爲錯誤界面時纔可使用。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>錯誤</title>
</head>
<body>
發生錯誤:<%=exception.getMessage() %>
</body>
</html>
要使用上述的錯誤界面,需要在可能發生錯誤的界面設置該錯誤界面。
<%@ page errorPage="error.jsp" %>
如此,噹噹前界面發生錯誤時,則返回指定的 error.jsp 錯誤界面。
指令元素
-
page 指令,用來定義 JSP 頁面中的全局屬性,常用來設置腳本語言、內容類型、導入包等。
<%@ page language="java" contentType="text/html; charset=uft-8" %> <%@ page import="java.util.Vector,java.util.Calendar" %>
-
include 指令
JSP 中的 include 指令,用來包含一個靜態的文件,噹噹前 JSP 被解析時,被包含的文件內容會被複制到當前頁面中,同當前的 JSP 頁面一起編譯。
指令格式:
<%@ include file="file path"%>
這個路徑是相對路徑,如果是以
/
開頭,那麼就是相對於 JSP 應用的上下關係路徑,否則就是當前文件的路徑。並且,這個路徑不能是動態的,即不能是類似下面的變量。<% String filePath="header.htmlf"; %>
<%@ include file="<%=filePath%>" %>
如果一個 JSP 文件使用這種方式引用其他文件內容,那麼就意味着引用的文件可以存在語法格式的錯誤(但是要修改文件後綴名以規避語法檢查),主文件中的內容同樣可以是不完整的,只要主文件在編譯時,拷貝了引用的文件中的內容後,語法格式正確即可。
-
taglib 指令
該指令可以用來定義一個自定義的標籤庫,語法格式爲:
<%@ taglib uri="tagLibUri" prefix="tagPrefix" %>
。uri 表示標籤庫的路徑,可以是一個網絡鏈接地址,也可以是本地相對地址。
動作元素
同 JSP 指令元素不同,其是在客戶端請求時動態執行的,是通過 XML 語法格式的標記來實現控制 Servlet 引擎行爲的。
<jsp:include>
同樣可以包含靜態或動態頁面,只是被包含的頁面是在主頁面被請求時添加的。
<jsp:include page="filePath" flush="false|true" />
這種包含方式需要注意的是,包含動作是在各個文件編譯完成後進行的,即被包含文件的語法格式必須是正確的。
<jsp:forward>
表示重定向到其他指定的網頁,可以結合 Java 腳本來根據不同條件實現不同頁面的跳轉。
<%
if (condition) {
%>
<jsp:forward page="success.jsp">
<jsp:param name="paramName" value="<%=value%>">
</jsp:forward>
<%}else {%>
<jsp:forward page="error.jsp" />
<%}%>
在進行跳轉時,可以使用 <jsp:param>
傳遞參數。
<jsp:userBean> 、<jsp:setProperty> 和 <jsp:getProperty>
這三個動作元素通常一起使用。
這是一種在 JSP 中快速創建示例對象的一種方式,<jsp:userBean>
是用來在一個指定範圍內聲明一個指定類型的對象實例。
id 屬性是聲明的對象的名稱,scope(page、request、session、application)是變量的有效範圍,type 則表示變量的所屬類型,他可以是該變量實際引用對象的類型名稱,也可以是其超類,或者是其實現的接口之一。
beanName 表示使用 Bean 的名字,該屬性和 type 屬性可以確定具體的 bean 的類型。
class 屬性表示具體的 Bean 的完整包,使用該屬性,可以省略 type 和 beanName 屬性,但是這就意味着變量類型和實際創建的實例對象類型一致。
<jsp:setProperty>
用來設置指定 bean 的指定屬性的值。其 name 屬性是已經聲明的 bean 變量,property 則表示 bean 的屬性,而 value 則指定該屬性的值,或者使用 param 屬性表示屬性的值來自 param 所指定的參數的值。注意,value 和 param 不能同時存在。
如果 bean 的值來自參數,並且參數的名稱同屬性名稱一致,則可以使用下面的方式來指定 bean 的屬性值。
<jsp:setProperty name="beanID" property="*" />
否則,需要使用 param 將參數同屬性一一對應起來。
<jsp:setProperty name="beanID" property="propertyName" param="paramName" />
還可以使用 value 直接指定屬性的值,value 可以是一個表達式。
<jsp:setProperty name="beanID" property="propertyName" value="<%=2+5%>" />
<jsp:getProperty>
則十分簡單,表示獲取指定 bean 的指定屬性的值。
<jsp:getPropery name="beanName" property="propertyName" />
但是,還可以有另一種取值方式,如下:
<%=beanName.getPropertyName()%>
實際是利用了 <%=expression%>
表達式。
實際上,只要是 bean 中聲明的方法,都是可以利用腳本的方式進行調用的。
<jsp:plugin>
可以從 JSP 網頁中加載 Java Applet 或 JavaBean 程序組件。
在加載 code 屬性指定的類時,可以使用 <jsp:params>
指定參數,當然該標籤下是使用 <jsp:param>
來指定具體參數的。