Jquery中文網 www.uhadif.co
Jquery中文網 >  腳本編程  >  Jsp  >  正文 servlet與jsp基礎教程(12)-腳本元素、指令和預定義變量

servlet與jsp基礎教程(12)-腳本元素、指令和預定義變量

發布時間:2015-09-19   編輯:www.uhadif.co
servlet與jsp基礎教程(12)-腳本元素、指令和預定義變量

12.1 JSP腳本元素
JSP腳本元素用來插入Java代碼,這些Java代碼將出現在由當前JSP頁面生成的Servlet中。腳本元素有三種格式:

表達式格式<%= expression %>:計算表達式并輸出其結果。
Scriptlet格式<% code %>:把代碼插入到Servlet的service方法。
聲明格式<%! code %>:把聲明加入到Servlet類(在任何方法之外)。

下面我們詳細說明它們的用法。
12.1.1 JSP表達式
JSP表達式用來把Java數據直接插入到輸出。其語法如下:
<%= Java Expression %>
計算Java表達式得到的結果被轉換成字符串,然后插入到頁面。計算在運行時進行(頁面被請求時),因此可以訪問和請求有關的全部信息。例如,下面的代碼顯示頁面被請求的日期/時間:
Current time: <%= new java.util.Date() %>
為簡化這些表達式,JSP預定義了一組可以直接使用的對象變量。后面我們將詳細介紹這些隱含聲明的對象,但對于JSP表達式來說,最重要的幾個對象及其類型如下:
request:HttpServletRequest;
response:HttpServletResponse;
session:和request關聯的HttpSession
out:PrintWriter(帶緩沖的版本,JspWriter),用來把輸出發送到客戶端

例子:
Your hostname: <%= request.getRemoteHost() %>
最后,如果使用XML的話,JSP表達式也可以寫成下面這種形式:
<jsp:expression>
Java Expression
</jsp:expression>

請記住XML元素和HTML不一樣。XML是大小寫敏感的,因此務必使用小寫。有關XML語法的說明,請參見《XML教程 》

12.1.2 JSP Scriptlet
如果你要完成的任務比插入簡單的表達式更加復雜,可以使用JSP Scriptlet。JSP Scriptlet允許你把任意的Java代碼插入Servlet。JSP Scriptlet語法如下:
<% Java Code %>
和JSP表達式一樣,Scriptlet也可以訪問所有預定義的變量。例如,如果你要向結果頁面輸出內容,可以使用out變量:
<%
String queryData = request.getQueryString();
out.println("Attached GET data: " + queryData);
%>
注意Scriptlet中的代碼將被照搬到Servlet內,而Scriptlet前面和后面的靜態HTML(模板文本)將被轉換成println語句。這就意味著,Scriptlet內的Java語句并非一定要是完整的,沒有關閉的塊將影響Scriptlet外的靜態HTML。例如,下面的JSP片斷混合了模板文本和Scriptlet:
<% if (Math.random() < 0.5) { %>
Have a <B>nice</B> day!
<% } else { %>
Have a <B>lousy</B> day!
<% } %>

上述JSP代碼將被轉換成如下Servlet代碼:
if (Math.random() < 0.5) {
out.println("Have a <B>nice</B> day!");
} else {
out.println("Have a <B>lousy</B> day!");
}
如果要在Scriptlet內部使用字符“%>”,必須寫成“%\>”。另外,請注意<% code %>的XML等價表達是:
<jsp:scriptlet>
Code
</jsp:scriptlet>

12.1.3 JSP聲明
JSP聲明用來定義插入Servlet類的方法和成員變量,其語法如下:
<%! Java Code %>

由于聲明不會有任何輸出,因此它們往往和JSP表達式或Scriptlet結合在一起使用。例如,下面的JSP代碼片斷輸出自從服務器啟動(或Servlet類被改動并重新裝載以來)當前頁面被請求的次數:
<%! private int accessCount = 0; %>
自從服務器啟動以來頁面訪問次數為:
<%= ++accessCount %>

和Scriptlet一樣,如果要使用字符串“%>”,必須使用“%\>”代替。最后,<%! code %>的XML等價表達方式為:
<jsp:declaration>
Code
</jsp:declaration>

12.2 JSP指令
JSP指令影響Servlet類的整體結構,它的語法一般如下:
<%@ directive attribute="value" %>

另外,也可以把同一指令的多個屬性結合起來,例如:
<%@ directive attribute1="value1"
attribute2="value2"
...
attributeN="valueN" %>

JSP指令分為兩種類型:第一是page指令,用來完成下面這類任務:導入指定的類,自定義Servlet的超類,等等;第二是include指令,用來在JSP文件轉換成Servlet時引入其他文件。JSP規范也提到了taglib指令,其目的是讓JSP開發者能夠自己定義標記,但JSP 1.0不支持該指令,有希望它將成為JSP 1.1的主要改進之一。

12.2.1 page指令
page指令的作用是定義下面一個或多個屬性,這些屬性大小寫敏感。
import="package.class",或者import="package.class1,...,package.classN":
用于指定導入哪些包,例如:<%@ page import="java.util.*" %>。import是唯一允許出現一次以上的屬性。
contentType="MIME-Type" 或contentType="MIME-Type; charset=Character-Set":
該屬性指定輸出的MIME類型。默認是text/html。例如,下面這個指令:
<%@ page contentType="text/plain" %>。
和下面的Scriptlet效果相同:
<% response.setContentType("text/plain"); %>
isThreadSafe="true|false"

默認值true表明Servlet按照標準的方式處理,即假定開發者已經同步對實例變量的訪問,由單個Servlet實例同時地處理多個請求。如果取值false,表明Servlet應該實現SingleThreadModel,請求或者是逐個進入,或者多個并行的請求分別由不同的Servlet實例處理。
session="true|false"

默認值true表明預定義變量session(類型為HttpSession)應該綁定到已有的會話,如果不存在已有的會話,則新建一個并綁定session變量。如果取值false,表明不會用到會話,試圖訪問變量session將導致JSP轉換成Servlet時出錯。

buffer="size kb|none"
該屬性指定JspWrite out的緩存大小。默認值和服務器有關,但至少應該是8 KB。

autoflush="true|false"
默認值true表明如果緩存已滿則刷新它。autoflush很少取false值,false值表示如果緩存已滿則拋出異常。如果buffer="none",autoflush不能取false值。

extends="package.class"
該屬性指出將要生成的Servlet使用哪個超類。使用該屬性應當十分小心,因為服務器可能已經在用自定義的超類。

info="message"
該屬性定義一個可以通過getServletInfo方法提取的字符串。

errorPage="url"
該屬性指定一個JSP頁面,所有未被當前頁面捕獲的異常均由該頁面處理。

isErrorPage="true|false"
該屬性指示當前頁面是否可以作為另一JSP頁面的錯誤處理頁面。默認值false。

language="java"
該屬性用來指示所使用的語言。目前沒有必要關注這個屬性,因為默認的Java是當前唯一可用的語言。
定義指令的XML語法為:
<jsp:directive.directiveType attribute=value />
例如,下面這個指令:
<%@ page import="java.util.*" %>
它的XML等價表達是:
<jsp:directive.page import="java.util.*" />

您可能感興趣的文章:
servlet與jsp基礎教程(11)-JSP及語法概要
servlet與jsp基礎教程(12)-腳本元素、指令和預定義變量
servlet與jsp基礎教程(2)-設置開發、運行環境
servlet與jsp基礎教程(6)-訪問CGI變量
JSP入門教程(4)-使用腳本
servlet與jsp基礎教程(1)-Servlet和JSP概述
servlet與jsp基礎教程(3)-第一個Servlet
JQuery 選擇器、過濾器介紹
servlet與jsp基礎教程(4)-處理表單數據
AWK 簡介與例子

[關閉]
北京pk赛车历史 武威做海鲜赚钱吗 梦幻175跑宝宝环真赚钱 黑龙江十一选五计划软件 老版南京麻将 网络直播都赚钱吗 足球指数新浪 申城棋牌上海斗地主三打一 dnf大转移做什么赚钱平民 GTA5地堡买来怎么赚钱 河北快三 小卖部在办公区卖什么赚钱 什么手工艺品最赚钱 188比分直188比分直播手球 325棋牌下载 我有什么能赚钱的游戏 小米盒子新浪体育