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 %>
JSP九個內置對象及指令、動作標簽