?? jsp(day03).txt
字號:
JSP第三天 2007年7月2日
一、JSP的異常處理
<%@page errorPage="xxx.jsp"%> 指定本頁面出現異常后要轉到的頁面
<%@page iserrorPage="true"%> 見本頁面指定為異常處理頁面,也就是其他出異常的頁面可以指定本頁面為要轉到的異常處理頁面。
處理異常
運行時異常
1) 一個程序運行時重獲的錯誤;
2) 能被一固有的異常對象引用所使用;
3) 可以利用異常引用創建或產生一個JSP頁面顯示異常信息給用戶。
創建一個異常跟蹤方案
1) 在每一個JSP頁面,包含要創建的異常頁面名稱;
<%@page import="numberguess.NumberGuessBean" errorPage="error.jsp"%>
2) 創建一個異常頁面;
<%@page isErrorPage="true"%>
JSP頁面中的異常處理
1) <%=exception.toString()%> 打印異常名稱;
2) <%exception.printStackTrace();%> 打印當前錯誤流中所有錯誤的列表;
3) <%=exception.getMessage()%> 打印錯誤的詳細描述信息
二、JSP中隱含內置對象
名稱 類型 注釋和范圍
request javax.servlet.http.HttpServletRequest request
response javax.servlet.http.HttpServletResponse response
page javax.lang.Object page
Exception java.lang.Throwable page
pageContext javax.servlet.jsp.PageContext page
session javax.servlet.http.HttpSession session
application javax.servlet.ServletContext ServletContext
out javax.servlet.jsp.JspWriter output stream
config javax.servlet.ServletConfig ServletConfig
內置對象request
1)封裝了來自客戶端的請求:
2)方法:
getCookies: 取得Cookie數組;
getMethod: 返回請求形成的方式(GET/POST);
getParameterNames: 返回form中對象名稱的枚舉;
getParameter:返回指定名稱的對象值; 5) getParameterValues: 返回指定名稱的對象值數組; setAttribute: 設置屬性;
getAttribute: 返回屬性值;
getAttributeNames: 返回屬性名稱的枚舉
內置對象out
1)JSPWriter的一個實例, 用于發送響應給客戶端
2)方法:
print(String)/println(String) 用于向頁面輸出
print(int)/println(int)
flush() 刷新out對象的緩存
內置對象exception
1) 用于異常對象的異常實例;
2) 異常頁面在page指令中存在屬性 isErrorPage="true";
3) 方法:
getMessage()/printStackTrace()/toString()
內置對象session
1) HttpSession的一個實例, 用于來維護session的狀態
2) 方法:
getAttribute(String name)/setAttribute(String name)
取得設置的屬性的對應資源/設置屬性的對應資源
removeAttribute(String name) 刪除屬性和隊應資源
getAttributeNames()
返回值是一個迭代器,可以獲得session中設置的屬性的名字也就是在set時使用的與資源對應的那個 名字
內置對象application
1) ServletContext一個實例,用來維護application的狀態
2) 方法:
getAttribute()/setAttribute() 和session以及request中的那一對設置屬性及其對應資源的方法
getInitParameter() 獲得初始化參數
getServletInfo() 獲得Servlet的信息
3) application的作用域比session大得多,一個session和一個client聯系, 而application保持了用于所有客戶端的狀態。
注意:如果要保存的數據量比較大時,就要使用生命周期比較短的request對象,page對象只在本頁面中有效,也就是會再翻譯后的service方法體內
的一個局部變量,service運行結束后就會銷毀,不像request可以轉發。session和application的生命周期都比較長而且作用域比較大。
三、JSP自定義標簽(tag)
什么是自定義標簽
1,用戶自定義的Java語言元素, 實質是運行一個或者兩個接口的JavaBean;
2,可以非常機密地和JSP的表示邏輯聯系在一起,又具有和普通JavaBean相同的業務邏輯處理能力;
3,當一個JSP頁面轉變為servlet時,其間的用戶自定義標簽轉化為操作一個稱為標簽hander的對象;
4,可操作默認對象,處理表單數據,訪問數據庫以及其它企業服務;
自定義標簽庫的特點
1,通過調用頁面傳遞參數實現定制;
2,訪問所有對JSP頁面可能的對象;
3,修改調用頁面生成的響應;
4,自定義標簽間可相互通信;
5,在同一個JSP頁面中通過標簽嵌套,可實現復雜交互。
如何使用自定義標簽庫
1,聲明標簽庫
2,使標簽庫執行對Web應用程序可用
聲明標簽庫
1,使用taglib指令聲明標簽庫
2,語法:<%@taglib uri="URI" prefix="pre" %>
注意:a. uri屬性可以是絕對的,也可以是相對URL,該URL指向標記庫描述符(TLD)文件;
b. uri屬性也可以是一個并不存在的URL,該URL為web.xml文件中將標記庫描述符(TLD)文件的絕對
URL到本地系統的一個映射;
3,范例:<%@taglib uri="/WEB-INF/template.tld" prefix="test" %>
<%@taglib uri="http://java.sun.com/jstl/core" prefix="core" %>
使標簽庫執行可用
方式一:在WEB-INF/classes目錄下部署標記處理程序類;
方式二:將標記處理程序類打包成jar文件并置于WEB-INF/lib目錄。
幾種典型的標簽
1,不帶屬性和主體的簡單標簽:<mytaglibs:SomeTag/>;
2,不帶主體但有屬性的標簽:<mytaglibs:SomeTag user="TonyDeng"/>;
3,帶有主體和屬性的標簽:
<mytaglibs:SomeTag user="TonyDeng">
...// 標簽體
</mytaglibs:SomeTag>;
注意:a. 屬性列于start tag中,它是在標記庫描述符(TLD)文件中指定,服務于標記庫的自定義行為;
b. 標簽體位于start tag和end tag間,可以是任何合法的JSP內容或者標簽;
定義標簽
1,開發實現tag的類(tag handler);
2,編輯標記庫描述符(TLD)文件;
3,在web.xml中為標記庫描述符(TLD)文件的絕對URL建立一個映射(該步驟可選);
標記庫描述符(TLD)文件
1,一個描述標記庫的XML文件;
2,內容開始是整個庫的描述,然后是tag的描述;
3,標記庫描述符(TLD)文件用于Web Container確認tag以及JSP頁面發展工具;
實現tag的類(標簽處理器)(tag handler)
1,是一些在引用了標簽的JSP頁面執行期間被Web Container調用以求自定義標簽值的對象;
2,必須實現Tag, SimpleTag和BodyTag之一;
3,可以繼承TagSupport和BodyTagSupport之一。
標簽庫的接口和類的繼承關系接口的繼承關系:
☉ interface javax.servlet.jsp.tagext.JspTag
☉ interface javax.servlet.jsp.tagext.SimpleTag
☉ interface javax.servlet.jsp.tagext.Tag
☉ interface javax.servlet.jsp.tagext.IterationTag
☉ interface javax.servlet.jsp.tagext.BodyTag
類的繼承關系:
☉ class javax.servlet.jsp.tagext.TagSupport
(implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable)
☉ class javax.servlet.jsp.tagext.BodyTagSupport
(implements javax.servlet.jsp.tagext.BodyTag)
☉ class javax.servlet.jsp.tagext.SimpleTagSupport
(implements javax.servlet.jsp.tagext.SimpleTag)
(Interface)
JspTag
|
|ˉˉˉˉˉˉˉˉ|
(Interface) (Interface)JSP2.0
Tag SimpleTag ←--SimpleTagSupport
|
|
(Interface)
IterationTag←--TagSupport
支持迭代的標簽 |
| |
| |
(Interface) |
BodyTag ←---BodyTagSupport
可以處理標簽體
自定義標簽的開發步驟
1,寫標簽處理器,也就是一個符合自定義標簽規范的類 xxx.java
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -