JSP九個內建對象及指令、動作標籤,jsp九個
一、JSP九大內建對象
(一)JSP中無需建立就可以使用的9個對象
輸入輸出對象
1.response(HttpServletResponse):處理JSP產生的響應,然後將響應結果發送給用戶端.是service方法的esponse參數。
2.out(JspWriter):表示輸出資料流,將作為請求的響應發送給用戶端.是PrintWriter的一個執行個體。
範圍對象
3.request(HttpServletRequest):表示用戶端的請求,包含了所有的請求資訊,是service方法的resquest參數。
4.session(HttpSession):表示使用者的會話狀況,用此機制可以輕易的識別每一個使用者,能儲存和 跟蹤使用者的工作階段狀態.是HttpSession的一個執行個體。
5.pageContext(PageContext):作用於此頁面,可以訪問頁面範圍中定義的所有隱式對象是PageContext的一個執行個體。
6.application(ServletContext):作用於整個應用程式.是ServletContext的一個執行個體。
Servlet對象
7.page:提供對網頁上定義的所有對象的訪問.是一個Object對象.是此Servlet的 一個引用。如Object page = this;
8.config(ServletConfig):儲存Servlet的一些初始資訊是ServletConfig的一個執行個體。
異常對象
9.exception(Throwable):此對象負責處理常式執行過程中引發的異常.
(二)pageContext
- 一個頂9個,
- servlet中有三大域,而JSP中有四大域,它是最後一個域對象。
- ServletContext:整個應用程式。
- session:整個會話(一個會話中只有一個使用者)。
- request:一個請求鏈。
- pageContext:一個jsp頁面,這個域是當前jsp頁面和當前jsp頁面中使用的標籤之間共用資料。
- 域對象。
- 代理其他域:pageContext.setAttribute("xxx","XXX",PageContext.SESSION_SCOPE);
- 全域尋找:pageContext.findAttribute(“xxx”);從小到大,依賴尋找。為了避免重名現象,命名時可採用如request_xxx;
- 擷取其他8個內建對象:
- JspWriter getOut(): 擷取out內建對象;
- ServletConfig getServletConfig():擷取config內建對象
- Object getPage():擷取page內建對象
- ServletRequest getRequest():擷取request內建對象
- ServletResponse getResponse():擷取response內建對象
- HttpSession getSession():擷取session內建對象
- ServletContext getServletContext():擷取application內建對象
- Exception getException():擷取exception內建對象
二、JSP三大指令
一個jsp頁面中,可以有0~N個指令的定義。
1、page:最複雜:<%@page language="java" info="xxx"......%>
- pageEncoding和contentType:
- pageEncoding:它指定當前jsp頁面的編碼,只要不說謊,就不會有亂碼。在伺服器要把jsp編譯成.java時需要使用pageEncoding;
- contentType:它表示添加一個回應標頭:Content-Type;等同於response.setContentType("text/html;charset=utf-8");
- 如果兩個屬性只提供一個,那麼另一個預設值為設定那一個。
- 如果兩個屬性都沒有設定,那麼預設為iso
- import:導包,可以出現多次
- errorPage和isErrorPage
- errorPage:當前頁面如果拋出異常,那麼要轉寄到哪一個頁面,由errorPage來指定。
- isErrorPage:它指定當前頁面是否為處理錯誤的頁面,但該屬性為true時,這個頁面會設定狀態代碼為500,而且這個頁面可以使用9大內建對象中的exception。
在web.xml檔案配置通用的錯誤頁面
1 <error-page> 2 <error-code>404</error-code> 3 <location>/error/404.jsp</location> 4 </error-page> 5 <error-page> 6 <error-code>500</error-code> 7 <location>/error/500.jsp</location> 8 </error-page> 9 <error-page>10 <exception-type>java.lang.RuntimeException</exception-type>11 <location>/index.jsp</location>12 </error-page>
- autoFlush和buffer
- autoFlush:指定jsp的輸出資料流緩衝區滿時,是否自動重新整理!預設為true,如果為false,那麼在緩衝區滿時拋出異常!
- buffer:指定緩衝區大小,預設為8kb,通常不需要修改。
- isELIgnored:是否忽略el運算式,預設值為false,不忽略,即支援。
- 基本屬性:
- language:指定當前jsp編譯後的語言類型,預設為java。
- info:資訊。
- isThreadSafe:當前的jsp是否支援並發訪問。
- session:當前頁面是否支援session,如果為false,那麼當前頁面就沒有session這個內建對象。
- extends:讓jsp產生的servlet去繼承該屬性指定的類。
2、include:靜態包含
- 與RequestDispatcher的include()方法的功能相似。
- <%@include%>它是在jsp編譯成java檔案時完成的,他們共同產生一個Java(就是一個servlet)檔案,然後再產生一個class。
- RequestDispatcher的include()的include()是一個方法,包含和被包含的是兩個servlet,即兩個.class。他們只是把響應的內容在運行時合并了。
- 作用:把頁面分解了,使包含的方式中組合在一起,這樣一個頁面中不變的部分,就是一個獨立jsp,而我們只需要處理變化的頁面。
3、taglib:匯入標籤庫
- 兩個屬性
- prefix:指定標籤庫在本頁面中的首碼,由我們自己來起名稱。
- uri:指定標籤庫的位置。
- <%@taglib prefix="pre" uri="/struts-tags"%>首碼的用法<s:text>
三、JSP動作標籤
這些jsp的動作標籤,與html提供的標籤有本質的區別。
- 動作標籤是由Tomcat(伺服器)來解釋執行,它與Java代碼一樣,都在伺服器端執行的
- html由瀏覽器來執行。
- <jsp:forward>:轉寄,它與RequestDispatcher的forward方法是一個樣的,一個是在Servlet中使用,一個是在jsp中使用。
- <jsp:include>:包含,它與RequestDispatcher的include方法是一個樣的,一個是在Servlet中使用,一個是在jsp中使用。
- <jsp:param>:它用作為forward和include的子標籤,用來給轉寄或包含的頁面傳遞參數。
1 <body>2 <h1>a.jsp</h1>3 <%-- 動態轉寄 --%>4 <jsp:forward page="b.jsp">5 <jsp:param value="zhangsan" name="username"/>6 <jsp:param value="zhangsan" name="password"/>7 </jsp:forward>8 </body>
1 <h1>b.jsp</h1>2 <%3 String username = request.getParameter("username");4 String password = request.getParameter("password");5 out.print(username+":"+password);6 %>