JSP頁面就是帶有JSP元素的常規Web頁面,它由靜態內容和動態內容構成。其中,靜態內容指HTML元素,動態內容(JSP元素)包括指令元素、腳本元素、動作元素、注釋等內容。
1、指令元素
指令元素主要用於為轉換階段提供JSP頁面的相關信息,指令不會產生任何輸出到當前的輸出流中,它指定了有關頁面本身的信息,這些信息在請求之間一直保持不變。指令元素語法為<%@ directive{attr="value"}%>。指令元素有三種:page、include、taglib。
1)page
該指令用於整個頁面,定義與頁面相關的屬性,它是JSP頁面和容器的通信員,一般放在JSP頁面的第一行。與page相關的屬性如下:
屬性 | 描述 |
---|---|
buffer | 指定out對象使用緩沖區的大小 |
autoFlush | 控制out對象的 緩存區 |
contentType | 指定當前JSP頁面的MIME類型和字符編碼 |
errorPage | 指定當JSP頁面發生異常時需要轉向的錯誤處理頁面 |
isErrorPage | 指定當前頁面是否可以作為另一個JSP頁面的錯誤處理頁面 |
extends | 指定servlet從哪一個類繼承 |
import | 導入要使用的Java類 |
info | 定義JSP頁面的描述信息 |
isThreadSafe | 指定對JSP頁面的訪問是否為線程安全 |
language | 定義JSP頁面所用的腳本語言,默認是Java |
session | 指定JSP頁面是否使用session |
isELIgnored | 指定是否執行EL表達式 |
isScriptingEnabled | 確定腳本元素能否被使用 |
b、language=“scriptingLangeuage”,指定在腳本元素使用的腳本語言,默認是Java。
c、contentType="cinfo",指定HTTP響應的頭部的Content-Type值。客戶端的瀏覽器會根據我們在contentType中指定的MIME類型和字符集代碼來顯示Servlet輸出的內容。
常見的MIME類型有:
MIME類型 | 文件格式 |
application/msword | Microsoft Word文檔 |
application/pdf | Acrobat PDF文件 |
application/vnd.ms-excel | Microsoft Excel表格 |
audio/x-wav | WAV格式的音頻文件 |
text/html | HTML格式的文本文檔 |
text/css | HTML層疊樣式表 |
text/plain | 普通文本文檔 |
image/jpeg | JPEG格式圖片 |
video/mpeg | MPEG格式視頻文件 |
d、pageEncoding="peingo",指定頁面的字符編碼,如果設置了這個屬性,則JSP頁面的字符編碼就是它指定的字符集,如果沒有則默認的是ISO-8859-1。
2)include
該指令用於在JSP頁面中包含一個文件,該文件可以是JSP頁面、HTML網頁、文本文件或一段Java代碼。
<%@ include file="相對於當前文件的" %>
3)taglib
該指令允許頁面使用用戶定制的標簽。
<%@taglib prefix="前綴" uri="具有唯一標識和前綴相關的標簽描述符地址" %>
2、腳本元素
使用JSP腳本元素可以將Java代碼嵌入到JSP頁面里,這些Java代碼將出現在由當前JSP頁面生成的Servelt中,使JSP將靜態內容與動態內容分離出來。腳本元素包含表達式、腳本和聲明等。
1)表達式
1)表達式
表達式是對數據的表示,系統將其作為一個值進行計算。
<%= expression%>
例如<%= user.getName()%>在將JSP轉換成Servlet后,使用out.print()將表達式的值輸出。所以如果表達式是調用一個方法的話,那方法必須要有返回值,而且在方法的后面不能有分號。
2)腳本
腳本是在<% ... %>里嵌入的Java代碼,這里的Java代碼與一般的Java代碼沒有什么區別,所以每一條語句同樣要以分號“;”結束,這和表達式是不同的。
<% code %>
3)聲明
聲明就是允許用戶定義Servlet中的變量、方法。
<%! code %>
例如:<%! String getName(){return name; }%>,聲明的本質其實就是將聲明的變量加入到Servlet類(在任何方法之外)中,方法就成了Servlet的方法。
例子:九九乘法表
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD//XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>九九乘法表</title>
</head>
<body>
<br/>
<form id="form1" name="form1" method="post" action="result.jsp">
<p align="center">請輸入兩個自然數給您打印乘法表</p>
<p align="center">要求:startNumber <endNumber <br/></p>
<table width="350" border="1" align="center" cellpadding="0"
cellspacing="0" bgcolor="#aaccdd" bordercolor="#cccccc">
<tr>
<td width="101">startNumber:</td>
<td width="113">
<label>
<input name="s" type="text" id="textfield" size="15" maxlength="8" height="20"/>
</label>
</td>
<td width="68"> <br/></td>
</tr>
<tr>
<td>endNumber</td>
<td>
<label>
<input name="e" type="text" id="textfield2" size="15" maxlength="8" height="20"/>
</label>
</td>
<td> <br/></td>
</tr>
<tr>
<td> </td>
<td>
<label>
<input type="submit" name="button" id="button" value="submit"/>
<input name="button2" type="reset" id="button2" value="reset"/>
</label>
</td>
<td> </td>
</tr>
</table>
</form>
</body>
</html>
result.jsp:
<%@ page import="java.io.PrintWriter" %> <%@ page contentType="text/html;charset=UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <html> <head> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"/> <title>表單提交</title> </head> <body> <% PrintWriter pw = response.getWriter(); int s = Integer.parseInt(request.getParameter("s")); int e = Integer.parseInt(request.getParameter("e")); for (int i = s; i <= e; i++) { for (int j = s; j <= i; j++) { pw.print(j + "*" + i + "=" + (j * i) + "\t"); } pw.println("<br />"); } %> <br /> <a href="index.jsp">返回</a> </body> </html>
啟動Tomcat,輸入http://localhost:8080/index.jsp,輸入2和8,提交:
結果輸出:
3、JSP的動作
JSP的動作元素用來控制JSP容器的動作,可以動態插入文件、重用JavaBean組件、導向另一個頁面等。動作元素和指令元素不同,動作元素是在客戶端請求時動態執行的,每次有客戶端請求時,可能都會被執行一次,而指令元素是在編譯時被編譯執行,它只會被編譯一次。
1)<jsp:useBean>
useBean動作用於創建引用,並將現有的Bean組件嵌入JSP。JavaBean實際上是一個類,這個類可以重復使用。在JSP程序中,JavaBean常用來封裝事務邏輯、數據庫操作等。
<jsp:useBean id = "BeanName" class="BeanClass" scope="page/request/session/application">
2)<jsp:setProperty>
setProperty動作用於設置useBean中指定的Bean的屬性的值。setProperty動作指定名稱、屬性、值和參數,用於賦給Bean的屬性。
<jsp:setProperty name="BeanAlias" property="PropertyName" value="Value" param="parameter">,其中name為useBean中使用的Bean的ID,property是指定為之設置的Bean的屬性名稱,value為設置的顯示值,param指定用於輸入並給屬性賦值的HTML標簽。param屬性不能與value屬性一起使用。
3)<jsp:getProperty>
getProperty動作用於獲取Bean中指定的屬性中的值,系統先將收到的值轉換成字符串,然后再將其作為輸出結果發送。
<jsp:getProperty name = "BeanAlias" property="PropertyName">,其中name為useBean中使用的Bean的ID,property指定要從中檢索的屬性名稱。
4)<jsp:include>
include動作用於將其他HTML頁面或JSP頁面中的內容合並到當前頁面,或將其中的文件插入到當前頁面。
a、不帶參數的include動作:
<jsp:include page="weburl" flush="true">,其中page指定要嵌入當前頁面的頁面的網址,flush用於在嵌入其他響應前清空存儲在緩沖區中的數據。
b、帶參數的include動作:
<jsp:include page="weburl" flush="true">
<jsp:param name="ParamName" value="ParamValue"/>
</jsp:include>
其中name指定被嵌入到頁面中的參數的名稱,value指定參數的值。
5)<jsp:forward>
forward動作用來把當前的JSP頁面重定向到另一個頁面(HTML文件、JSP頁面、Servelt)。地址還是當前頁面的地址,內容則是另一個頁的內容。
<jsp:forward page="url"/>
6)<jsp:param>
param提供其他JSP動作的名稱/值信息。
<jsp:param name="ParamName" value="ParamValue"/>
7)<jsp:plugin>
plugin用於連接客戶端的Applet和Bean插件。plugin動作為Web開發人員提供了一種在JSP文件中嵌入客戶端運行的Java程序(如Applet、JavaBean)的方法。在處理這個動作的時候,根據客戶端瀏覽器的不同,JSP在執行以后將分別輸出為OBJECT或MEBED這兩個不同的HTML元素。
4、注釋
1)<!--...-->:在客戶端查看源代碼時能看到的注釋
2)<%-- ... --%>:在客戶端查看源代碼時無法看到的注釋。