JSP html
JSP聲明的語法格式以下:
<%! 聲明部分 %>
示例頁面:
<%@ page contentType="text/html;charset=GBK" language="java" errorPage="" %>
<html>
<head><title>JSP 聲明示例</title></head>
<body>
<%!
public int count;
public String info(){
return "Hello!!!";
}
%>
<%
out.println(count++);
%>
<br/>
<%
out.println(info());
%>
</body>
</html>
打開多個瀏覽器,甚至能夠在多個機子上打開瀏覽器來刷新該頁面,將發現全部客戶端訪問的count值是連續的,即全部客戶端共享了同一個count變量。JSP頁面會編譯成一個Servlet類,每一個Servlet在容器中只有一個實例;在JSP中聲明的變量是成員變量,成員變量只在建立實例時初始化,該變量的值將一直保存,直到實例銷燬。
JSP的3個編譯指令
1. page指令
page指令一般位於JSP頁面的頂端,一個JSP頁面可使用多條page指令。page指令的語法格式以下:
<%@page
[language="Java"]
[extends="package.class]
[import="package.class|package.*,..."]
[session="true|false"]
[buffer="none|8KB|size Kb"]
[autoFlush="true|false"]
[isThreadSafe="true|false"]
[info="text"]
[errorPage="relativeURL"]
[contentType="mimeType[;charset=characterSet]"|"text/html;charSet=ISO-8859-1"]
[pageEncoding="ISO-8859-1"]
[isErrorPage="true|false"]
%>
2.include 指令
使用include指令,能夠將一個外部文件嵌入到當前JSP文件中,同時解析這個頁面中的JSP語句(若是有的話)。這是個靜態的include語句,它會把目標頁面的其餘譯指令也包含進來,但動態include則不會。
include既能夠包含靜態的文本,也能夠包含動態的JSP頁面。靜態的include編譯指令會被包含的頁面加入本頁面,融合成一個頁面,所以被包含的頁面甚至不須要是一個完整的頁面。
include編譯指令的語法以下:
<%@include file="relativeURLSpec"%>
若是被嵌入的文件常常須要改變,建議使用<jsp:include>操做指令,由於它是動態的include語句。
JSP的7個動做指令
動做指令與編譯指令不一樣,編譯指令是通知Servlet引擎的處理消息,而動做指令只是運行時的動做。編譯指令在將JSP編譯成Servlet時起做用;而處理指令一般可替換成JSP腳本,它只是JSP腳本的標準化寫法。
JSP動做指令主要有以下7個。
jsp:forward: 執行頁面轉向,將請求的處理轉發到下一個頁面。
jsp:param: 用於傳遞參數,必須與其餘支持參數的標籤一塊兒使用。
jsp:include: 用於動態引入一個JSP頁面。
jsp:plugin: 用於下載JavaBean或Applet到客戶端執行。
jsp:useBean: 建立一個JavaBean的實例。
jsp:setProperty: 設置JavaBean實例的屬性值。
jsp:getProperty: 輸出JavaBean實例的屬性值。
1.forward指令
JSP的forward指令的格式以下語法:
對於JSP1.0,使用以下語法:
<jsp:forward page="{relativeURL|<%=expression%>}"/>
對於JSP1.1以上規範,可以使用以下語法:
<jsp:forward page="{relativeURL|<%=expression%>}">
{<jsp:param.../>}
</jsp:forward>
第二種語法用於在轉發時增長額外的請求參數。增長的請求參數的值能夠經過HttpServletRequest類的getParameter()方法獲取。
2.include指令
include指令是一個動態include指令,也用於包含某個頁面,它不會導入被include頁面的編譯指令,僅僅將被導入的頁面的body內容插入本頁面。
下面是include動做指令的語法格式:
<jsp:include page="{relativeURL|<%=expression%>}" flush="true"/>
或者
<jsp:include page="{relativeURL|<%=expression%>}" flush="true">
{<jsp:param name="parameterName" value="parameterValue"/>}
</jsp:include>
flush屬性用於指定輸出緩存是否轉移到被導入文件中。若是指定爲true,則包含在被導入文件中;若是指定爲false,則包含在原文件中。對於JSP1.1舊版本,只能設置爲false。
靜態導入和動態導入有以下是三點區別:
靜態導入是將被導入頁面的代碼徹底融入,兩個頁面融合成一個總體Servlet;而動態導入則在Servlet中使用include方法來引入被導入頁面的內容。
靜態導入時被導入頁面的編譯指令會起做用;而動態導入時被導入頁面的編譯指令則失去做用,只是插入被導入頁面的body內容。
動態包含還能夠增長額外的參數。
3. useBean、setProperty、getProperty
useBean的語法格式以下:
<jsp:useBean id="name" class="className" scope="page|request|session|application"/>
setProperty 指令的語法格式以下:
<jsp:setProperty name="BeanName" proterty="propertyName" value="value"/>
getProperty 指令的語法格式以下:
<jsp:getProperty name="BeanName" proterty="propertyName" />
4. plugin指令
plugin指令主要用於下載服務器端的JavaBean或Applet到客戶端執行。因爲程序在客戶端執行,所以必須客戶端安裝虛擬機。該標籤不多使用。
5.param指令
param指令用於設置參數值,這個指令自己不能單獨使用,由於單獨的param指令沒有實際意義。param指令能夠與如下三個指令結合使用。
jsp:include
jsp:forward
jsp:plugin
param指令的語法格式以下:
<jsp:param name="paramName" value="paramValue"/>
JSP腳本中的9個內置對象
JSP腳本中包含9個內置對象,這9個內置對象都是Servlet API接口的實例,只是JSP規範對它們進行了默認初始化(由JSP頁面對應Servlet的_jspService()方法來建立這些實例)。9個內置對象依次以下:
application:javax.servlet.ServletContext的實例,該實例表明JSP所屬的Web應用自己,可用於JSP頁面,或者在Servlet之間交換信息。經常使用的方法有
getAttribute(String attName)、setAttribute(String attName, String attValue)和getInitParameter(String paramName)等。
config:javax.servlet.ServletConfig的實例,該實例表明該JSP的配置信息。經常使用的方法有getInitParameter(String paramName)和getInitParameternames() 等方法。事實上,JSP頁面一般無須配置,也就不存在配置信息。所以,該對象更多地在Servlet中有效。
exception:java.lang.Throwable的實例,該實例表明其餘頁面中的異常和錯誤。只有當頁面是錯誤處理頁面,即編譯指令page的isErrorPage屬性爲true時,該對象纔可使用。經常使用的方法有getMessage()和printStackTrace()等。
out:javax.servlet.jsp.JspWriter的實例,該實例表明JSP頁面的輸出流,用於輸出內容,造成HTML頁面。
page:表明該頁面自己,一般沒有太大用處。也就是Servlet中的this,其類型就是生成的Servlet類,能用page的地方就能夠用this。
pageContext:javax.servlet.jsp.PageContext的實例,該對象表明該JSP頁面上下文,使用該對象能夠訪問頁面中的共享數據。經常使用的方法有getServletContext()和getServletConfig()等。
request:javax.servlet.http.HttpServletRequest的實例,該對象封裝了一次請求,客戶端的請求參數都被都被封裝在該對象裏。這是一個經常使用的對象,獲取客戶端請求參數必須使用該對象。經常使用方法有getParameter(String paramName)、getParameterValues(String paramName)、setAttribute(String atrrName, Object attrValue)、
getAttribute(String attrName)和setCharacterEncoding(String env)等。
response:javax.servlet.http.HttpServletResponse的實例,表明服務器對客戶端的響應。一般不多使用該對象直接影響,而使使用out對象,除非須要生成非字符響應。而response對象經常使用於重定向,經常使用方法有getOutPutStream()、sendRedirect(java.lang.String location)等。
session:javax.servlet.http.HttpSession的實例,該對象表明一次會話。當客戶端瀏覽器與站點創建鏈接時,會話開始;當客戶端關閉瀏覽器時,會話結束。經常使用的方法有:getAttribute(String attrName)、setAttribute(String attrName, Object attrValue)等。 java