腳本程序
腳本程序可以包括任意量的Java語句、變量、方法或表達式,只要它們在腳本語言中是有效的。
腳本程序的語法格式:<% 代碼片斷 %>
任何文本、HTML標簽、JSP元素必須寫在腳本程序的外面。
<html> <head><title>HelloWorld</title></head> <body> HelloWorld!<br/> <% out.println("Your IP address is " +request.getRemoteAddr()); %> </body> </html>
JSP聲明
1個聲明語句可以聲明1個或多個變量、方法,供后面的Java代碼使用。在JSP文件中,必須先聲明這些變量和方法然后才能使用它們。
JSP聲明的語法格式: <%!declaration; [ declaration; ]+ ... %>
<%! int i =0; %> <%! int a, b,c; %> <%! Circle a= new Circle(2.0); %>JSP表達式
1個JSP表達式中包括的腳本語言表達式,先被轉化成String,然后插入到表達式出現的地方。
由于表達式的值會被轉化成String,所以可以在1個文本行中使用表達式而不用去管它是不是是HTML標簽。
表達式元素中可以包括任何符合Java語言規范的表達式,但是不能使用分號來結束表達式。
JSP表達式的語法格式: <%=表達式 %>
<html> <head><title>AComment Test</title></head> <body> <p> Today's date: <%= (newjava.util.Date()).toLocaleString()%> </p> </body> </html>
JSP注釋
JSP注釋主要有兩個作用:為代碼作注釋和將某段代碼注釋掉。
JSP注釋的語法格式:
<%-- 這里可以填寫 JSP 注釋 --%>
JSP 指令
JSP指令用來設置全部JSP頁面相干的屬性,如網頁的編碼方式和腳本語言。
JSP中的3種指令標簽:
<%@ page ... %> 定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等
<%@ include ... %> 包括其他文件
<%@ taglib ... %> 引入標簽庫的定義
Page指令
<%@ page attribute="value" %>
等價的XML格式:
<jsp:directive.page attribute="value" />
下表列出與Page指令相干的屬性:
buffer 指定out對象使用緩沖區的大小
autoFlush 控制out對象的 緩存區,true/false,默許為true
contentType 指定當前JSP頁面的MIME類型和字符編碼
errorPage 指定當JSP頁面產生異常時需要轉向的毛病處理頁面
isErrorPage 是不是可以作為另外一個JSP頁面的毛病處理頁面,true/false
extends 指定servlet從哪個類繼承
import 導入要使用的Java類,多個包可以用逗號分割
info 定義JSP頁面的描寫信息,可以通過Servlet.getServletInfo()得到
isThreadSafe 指定對JSP頁面的訪問是不是為線程安全
language 定義JSP頁面所用的腳本語言,默許是Java
session 指定JSP頁面是不是使用session,true/false
isELIgnored 指定是不是履行EL表達式,true/false
isScriptingEnabled 肯定腳本元素能否被使用,true/false
trimDirectiveWhitespace 是不是去掉指令前后的空白字符,true/false
Include指令
JSP可以通過include指令來包括其他文件。被包括的文件可以是JSP文件、HTML文件或文本文件。包括的文件就好像是該JSP文件的1部份,會被同時編譯履行。
Include指令的語法格式以下:
<%@ include file="relative url" %>
Include指令中的文件名實際上是1個相對的URL。如果沒有給文件關聯1個路徑,JSP編譯器默許在當前路徑下尋覓。
等價的XML語法:
<jsp:directive.include file="relative url" />
與<jsp:include page=”url”/>的區分:Include指令是先包括,再編譯,jsp:include標簽是先運行,再包括,就是說前者是把包括的文件合并到1個文件,最后編譯成1個class文件;后者是兩個文件單獨履行,然后將結果合并到1塊
Taglib指令
JSP API允許用戶自定義標簽,1個自定義標簽庫就是自定義標簽的集合。
Taglib指令引入1個自定義標簽集合的定義,包括庫路徑、自定義標簽。
Taglib指令的語法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri屬性肯定標簽庫的位置,prefix屬性指定標簽庫的前綴。
等價的XML語法:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />JSP 動作元素
與JSP指令元素不同的是,JSP動作元素在要求處理階段起作用。JSP動作元素是用XML語法寫成的
動作元素基本上都是預定義的函數,JSP規范定義了1系列的標準動作,它用JSP作為前綴,可用的標準動作元素以下:
jsp:include 在頁面被要求的時候引入1個文件。
jsp:useBean 尋覓或實例化1個JavaBean。
jsp:setProperty 設置JavaBean的屬性。
jsp:getProperty 輸出某個JavaBean的屬性。
jsp:forward 把要求轉到1個新的頁面。
jsp:plugin 根據閱讀器類型為Java插件生成OBJECT或EMBED標記。
jsp:element 定義動態XML元素
jsp:attribute 設置動態定義的XML元素屬性。
jsp:body 設置動態定義的XML元素內容。
jsp:text 在JSP頁面和文檔中使用寫入文本的模板
所有的動作要素都有兩個屬性:id屬性和scope屬性。
id屬性:
id屬性是動作元素的唯1標識,可以在JSP頁面中援用。動作元素創建的id值可以通過PageContext來調用。
scope屬性:
該屬性用于辨認動作元素的生命周期。 id屬性和scope屬性有直接關系,scope屬性定義了相干聯id對象的壽命。 scope屬性有4個可能的值:(a) page, (b)request, (c)session, 和 (d) application。
<jsp:include>動作元素
<jsp:include page="relative URL" flush="true" />
以下是include動作相干的屬性列表。page 包括在頁面中的相對URL地址。
flush 布爾屬性,定義在包括資源前是不是刷新緩存區。
<jsp:useBean>動作元素
<jsp:useBean id="name" class="package.class" />在類載入后,可以通過jsp:setProperty 和 jsp:getProperty 動作來修改和檢索bean的屬性。
以下是useBean動作相干的屬性列表。
class 指定Bean的完全包名。
type 指定將援用該對象變量的類型。
beanName 通過 java.beans.Beans 的 instantiate() 方法指定Bean的名字。
<jsp:useBean id="test" class="action.TestBean" /> <!-- 此句可以從request域中自動獲得所有符合的屬性值--> <jsp:setProperty name="test" property="*" /> <jsp:setProperty name="test"property="message" value="HelloJSP..." /> <p>Got message....</p> <jsp:getProperty name="test" property="message" />
<jsp:setProperty>和<jsp:getProperty>
<jsp:setProperty>的屬性列表
name name屬性是必須的。它表示要設置屬性的是哪一個Bean。
property property屬性是必須的。它表示要設置哪一個屬性。有1個特殊用法:如果property的值是"*",表示所著名字和Bean屬性名字匹配的要求參數都將被傳遞給相應的屬性set方法。
value value 屬性是可選的。該屬性用來指定Bean屬性的值。字符串數據會在目標類中通過標準的valueOf方法自動轉換成數字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean類型的屬性值(比如"true")通過 Boolean.valueOf轉換,int和Integer類型的屬性值(比如"42")通過Integer.valueOf轉換。 value和param不能同時使用,但可使用其中任意1個。
param param 是可選的。它指定用哪一個要求參數作為Bean屬性的值。如果當前要求沒有參數,則甚么事情也不做,系統不會把null傳遞給Bean屬性的set方法。因此,你可讓Bean自己提供默許屬性值,只有當要求參數明確指定了新值時才修改默許屬性值。
<jsp:getProperty>的屬性列表
name 要檢索的Bean屬性名稱。Bean必須已定義。
property 表示要提取Bean屬性的值
<jsp:forward> 和<jsp:param>
<jsp:forward page=”url”> <jsp:param name=”param1” value=”value1”/> <jsp:param name=”param2” value=”value2”/> </jsp:forward>
<jsp:directive>
<jsp:directive>與JSP指令相對應,可以互換
<jsp:directive.page/>
<jsp:directive.include/>
<jsp:directive.taglib/>
<jsp:element> 、 <jsp:attribute>、 <jsp:body>動作元素
<jsp:element>、 <jsp:attribute>、 <jsp:body>動作元素動態定義XML元素。動態是非常重要的,這就意味著XML元素在編譯時是動態生成的而非靜態。
以下實例動態定義了XML元素:
<%@page language="java" contentType="text/html"%> <html xmlns="http://www.w3c.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page"> <head><title>Generate XML Element</title></head> <body> <jsp:element name="xmlElement"> <jsp:attribute name="xmlElementAttr"> Value for the attribute </jsp:attribute> <jsp:body> Body for XML element </jsp:body> </jsp:element> </body> </html>
履行時生成HTML代碼以下:
<html xmlns="http://www.w3c.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page"> <head><title>GenerateXML Element</title></head> <body> <xmlElement xmlElementAttr="Value for the attribute"> Body for XML element </xmlElement> </body> </html>