JSP頁面就是帶有JSP元素的常規(guī)Web頁面,它由靜態(tài)內(nèi)容和動態(tài)內(nèi)容構(gòu)成。其中,靜態(tài)內(nèi)容指HTML元素,動態(tài)內(nèi)容(JSP元素)包括指令元素、腳本元素、動作元素、注釋等內(nèi)容。
1、指令元素
指令元素主要用于為轉(zhuǎn)換階段提供JSP頁面的相關(guān)信息,指令不會產(chǎn)生任何輸出到當(dāng)前的輸出流中,它指定了有關(guān)頁面本身的信息,這些信息在請求之間一直保持不變。指令元素語法為<%@ directive{attr="value"}%>。指令元素有三種:page、include、taglib。
1)page
該指令用于整個頁面,定義與頁面相關(guān)的屬性,它是JSP頁面和容器的通信員,一般放在JSP頁面的第一行。與page相關(guān)的屬性如下:
屬性描述
buffer指定out對象使用緩沖區(qū)的大小
autoFlush控制out對象的 緩存區(qū)
contentType指定當(dāng)前JSP頁面的MIME類型和字符編碼
errorPage指定當(dāng)JSP頁面發(fā)生異常時需要轉(zhuǎn)向的錯誤處理頁面
isErrorPage指定當(dāng)前頁面是否可以作為另一個JSP頁面的錯誤處理頁面
extends指定servlet從哪一個類繼承
import導(dǎo)入要使用的Java類
info定義JSP頁面的描述信息
isThreadSafe指定對JSP頁面的訪問是否為線程安全
language定義JSP頁面所用的腳本語言,默認(rèn)是Java
session指定JSP頁面是否使用session
isELIgnored指定是否執(zhí)行EL表達(dá)式
isScriptingEnabled確定腳本元素能否被使用
a、import="導(dǎo)包列表",可以多次導(dǎo)入,也可以用逗號分隔開。
b、language=“scriptingLangeuage”,指定在腳本元素使用的腳本語言,默認(rèn)是Java。
c、contentType="cinfo",指定HTTP響應(yīng)的頭部的Content-Type值??蛻舳说臑g覽器會根據(jù)我們在contentType中指定的MIME類型和字符集代碼來顯示Servlet輸出的內(nèi)容。
常見的MIME類型有:
MIME類型文件格式
application/mswordMicrosoft Word文檔
application/pdfAcrobat PDF文件
application/vnd.ms-excelMicrosoft Excel表格
audio/x-wavWAV格式的音頻文件
text/htmlHTML格式的文本文檔
text/cssHTML層疊樣式表
text/plain普通文本文檔
image/jpegJPEG格式圖片
video/mpegMPEG格式視頻文件
d、pageEncoding="peingo",指定頁面的字符編碼,如果設(shè)置了這個屬性,則JSP頁面的字符編碼就是它指定的字符集,如果沒有則默認(rèn)的是ISO-8859-1。
2)include
該指令用于在JSP頁面中包含一個文件,該文件可以是JSP頁面、HTML網(wǎng)頁、文本文件或一段Java代碼。
<%@ include file="相對于當(dāng)前文件的" %>
3)taglib
該指令允許頁面使用用戶定制的標(biāo)簽。
<%@taglib prefix="前綴" uri="具有唯一標(biāo)識和前綴相關(guān)的標(biāo)簽描述符地址" %>
2、腳本元素
使用JSP腳本元素可以將Java代碼嵌入到JSP頁面里,這些Java代碼將出現(xiàn)在由當(dāng)前JSP頁面生成的Servelt中,使JSP將靜態(tài)內(nèi)容與動態(tài)內(nèi)容分離出來。腳本元素包含表達(dá)式、腳本和聲明等。
1)表達(dá)式
表達(dá)式是對數(shù)據(jù)的表示,系統(tǒng)將其作為一個值進(jìn)行計(jì)算。
<%= expression%>
例如<%= user.getName()%>在將JSP轉(zhuǎn)換成Servlet后,使用out.print()將表達(dá)式的值輸出。所以如果表達(dá)式是調(diào)用一個方法的話,那方法必須要有返回值,而且在方法的后面不能有分號。
2)腳本
腳本是在<% ... %>里嵌入的Java代碼,這里的Java代碼與一般的Java代碼沒有什么區(qū)別,所以每一條語句同樣要以分號“;”結(jié)束,這和表達(dá)式是不同的。
<% code %>
3)聲明
聲明就是允許用戶定義Servlet中的變量、方法。
<%! code %>
例如:<%! String getName(){return name; }%>,聲明的本質(zhì)其實(shí)就是將聲明的變量加入到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">請輸入兩個自然數(shù)給您打印乘法表</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,提交:
結(jié)果輸出:
3、JSP的動作
JSP的動作元素用來控制JSP容器的動作,可以動態(tài)插入文件、重用JavaBean組件、導(dǎo)向另一個頁面等。動作元素和指令元素不同,動作元素是在客戶端請求時動態(tài)執(zhí)行的,每次有客戶端請求時,可能都會被執(zhí)行一次,而指令元素是在編譯時被編譯執(zhí)行,它只會被編譯一次。
1)<jsp:useBean>
useBean動作用于創(chuàng)建引用,并將現(xiàn)有的Bean組件嵌入JSP。JavaBean實(shí)際上是一個類,這個類可以重復(fù)使用。在JSP程序中,JavaBean常用來封裝事務(wù)邏輯、數(shù)據(jù)庫操作等。
<jsp:useBean id = "BeanName" class="BeanClass" scope="page/request/session/application">
2)<jsp:setProperty>
setProperty動作用于設(shè)置useBean中指定的Bean的屬性的值。setProperty動作指定名稱、屬性、值和參數(shù),用于賦給Bean的屬性。
<jsp:setProperty name="BeanAlias" property="PropertyName" value="Value" param="parameter">,其中name為useBean中使用的Bean的ID,property是指定為之設(shè)置的Bean的屬性名稱,value為設(shè)置的顯示值,param指定用于輸入并給屬性賦值的HTML標(biāo)簽。param屬性不能與value屬性一起使用。
3)<jsp:getProperty>
getProperty動作用于獲取Bean中指定的屬性中的值,系統(tǒng)先將收到的值轉(zhuǎn)換成字符串,然后再將其作為輸出結(jié)果發(fā)送。
<jsp:getProperty name = "BeanAlias" property="PropertyName">,其中name為useBean中使用的Bean的ID,property指定要從中檢索的屬性名稱。
4)<jsp:include>
include動作用于將其他HTML頁面或JSP頁面中的內(nèi)容合并到當(dāng)前頁面,或?qū)⑵渲械奈募迦氲疆?dāng)前頁面。
a、不帶參數(shù)的include動作:
<jsp:include page="weburl" flush="true">,其中page指定要嵌入當(dāng)前頁面的頁面的網(wǎng)址,flush用于在嵌入其他響應(yīng)前清空存儲在緩沖區(qū)中的數(shù)據(jù)。
b、帶參數(shù)的include動作:
<jsp:include page="weburl" flush="true">
<jsp:param name="ParamName" value="ParamValue"/>
</jsp:include>
其中name指定被嵌入到頁面中的參數(shù)的名稱,value指定參數(shù)的值。
5)<jsp:forward>
forward動作用來把當(dāng)前的JSP頁面重定向到另一個頁面(HTML文件、JSP頁面、Servelt)。地址還是當(dāng)前頁面的地址,內(nèi)容則是另一個頁的內(nèi)容。
<jsp:forward page="url"/>
6)<jsp:param>
param提供其他JSP動作的名稱/值信息。
<jsp:param name="ParamName" value="ParamValue"/>
7)<jsp:plugin>
plugin用于連接客戶端的Applet和Bean插件。plugin動作為Web開發(fā)人員提供了一種在JSP文件中嵌入客戶端運(yùn)行的Java程序(如Applet、JavaBean)的方法。在處理這個動作的時候,根據(jù)客戶端瀏覽器的不同,JSP在執(zhí)行以后將分別輸出為OBJECT或MEBED這兩個不同的HTML元素。
4、注釋
1)<!--...-->:在客戶端查看源代碼時能看到的注釋
2)<%-- ... --%>:在客戶端查看源代碼時無法看到的注釋。