教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

JAVA培訓(xùn)之page指令中的屬性詳解

更新時(shí)間:2016年09月23日10時(shí)58分 來源:傳智播客JAVA培訓(xùn)學(xué)院 瀏覽次數(shù):

jsp文件的三個(gè)指令中,page指令的屬性最多,今天我們就來一一學(xué)習(xí)page指令的各個(gè)屬性。

1.import屬性

import屬性表示導(dǎo)入jar包,對(duì)應(yīng)著java文件中的import語句,該屬性是page指令中唯一一個(gè)可以重復(fù)出現(xiàn)的屬性,例如:<%@page import=”java.util.*” import=”java.net.*” import=”java.sql.*”%>,也可以寫成<%@page import=”java.net.*,java.util.*,java.sql.*”%>,多個(gè)包之間用逗號(hào)隔開。

2.errorPage屬性和isErrorPage屬性

我們知道,如果一個(gè)頁面出現(xiàn)錯(cuò)誤,在瀏覽器端訪問這個(gè)頁面時(shí),服務(wù)器會(huì)響應(yīng)錯(cuò)誤信息,但是一般在開發(fā)中,為了讓用戶體驗(yàn)更好一些,開發(fā)人員不會(huì)讓用戶看到錯(cuò)誤信息,這時(shí)我們就可以使用page指令的errorPage屬性指定錯(cuò)誤頁面,給用戶一種友好的體驗(yàn)。
errorPage屬性的作用:當(dāng)前訪問的頁面如果拋出異常,就轉(zhuǎn)發(fā)到errorPage屬性指定的頁面。下面我們來驗(yàn)證一下,如下所示:
(1)在一個(gè)web工程下創(chuàng)建一個(gè)one.jsp,主要代碼如例1-1所示:
例1-1 one.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" errorPage="errorPage.jsp"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  </head>
  <body>
   <%
     int n=1/0;
    %>
  </body>
</html>
例1-1中,在page指令中設(shè)置errorPage屬性的值為“errorPage.jsp”,表示如果one.jsp頁面出現(xiàn)問題,就轉(zhuǎn)發(fā)到errorPage.jsp。
(2)在當(dāng)前web應(yīng)用下再次新建一個(gè)jsp頁面,errorPage.jsp,主要代碼如例1-2所示:
例1-2 errorPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>哈哈~出錯(cuò)了</h1>
</body>
</html>
(3)將工程發(fā)布到服務(wù)器中,然后啟動(dòng)服務(wù)器,在瀏覽器端訪問one.jsp頁面,瀏覽器顯示結(jié)果如圖1-1所示:

圖1-1 瀏覽器顯示結(jié)果
由圖1-1可知,瀏覽器地址欄上的地址仍然是one.jsp頁面的訪問地址,說明當(dāng)頁面拋出異常,使用errorPage屬性會(huì)轉(zhuǎn)發(fā)到指定的頁面。
(4)使用HttpWatch工具抓取請(qǐng)求響應(yīng)信息,如圖1-2所示:

圖1-2 響應(yīng)狀態(tài)碼
圖1-2中,響應(yīng)狀態(tài)碼是200,表示響應(yīng)成功。訪問one.jsp頁面,該頁面有錯(cuò)誤,服務(wù)器本應(yīng)該響應(yīng)500狀態(tài)碼,而現(xiàn)在卻相應(yīng)200狀態(tài)碼,出現(xiàn)這種現(xiàn)象是由于我們沒有設(shè)置另外一個(gè)屬性:isErrorPage。下面我們來了解這個(gè)屬性:
isErrorPage屬性的作用是指定當(dāng)前頁面是否為處理錯(cuò)誤的頁面,如果值為true,這個(gè)頁面會(huì)設(shè)置響應(yīng)狀態(tài)碼500,并且在該頁面中可以使用jsp九大內(nèi)置對(duì)象中的exception對(duì)象。
(5)在errorPage.jsp頁面的page指令中添加一個(gè)屬性,isErrorPage,值為true,如下所示:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
(6)然后再在瀏覽器端訪問one.jsp,使用HttpWatch工具抓取到的信息如圖1-3所示:

圖1-3 響應(yīng)狀態(tài)碼
由圖1-3可知,當(dāng)在errorPage.jsp頁面中設(shè)置了isErrorPage屬性,響應(yīng)狀態(tài)碼就為500了。
(7)在errorPage.jsp頁面使用九大內(nèi)置對(duì)象中的exception對(duì)象,如例1-3所示:
例1-3 errorPage.jsp
<body>
<h1>哈哈~出錯(cuò)了</h1>
<%
 exception.printStackTrace(response.getWriter());
 %>
</body>
例1-3中,使用九大內(nèi)置對(duì)象將異常信息打印在瀏覽器端。
(8)在瀏覽器端再次訪問one.jsp,瀏覽器顯示結(jié)果如圖1-4所示:

圖1-4 瀏覽器顯示結(jié)果
如果jsp頁面中沒有isErrorPage=true,那么該頁面中就不能使用exception內(nèi)置對(duì)象。
溫馨提示:IE瀏覽器會(huì)在狀態(tài)碼為500時(shí),并且響應(yīng)正文的長(zhǎng)度小于等于512B時(shí)不給予顯示!而是顯示“網(wǎng)站無法顯示該頁面”字樣。這時(shí)你只需要添加一些響應(yīng)內(nèi)容即在瀏覽器端顯示.

3.web.xml中配置錯(cuò)誤頁面

錯(cuò)誤頁面不僅可以在jsp頁面中配置,還可以在web.xml中配置。如例1-4所示:
例1-4 web.xml
   <error-page>
    <error-code>404</error-code>
    <location>/error404.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error500.jsp</location>
  </error-page>
  <error-page>
    <exception-type>java.lang.RuntimeException</exception-type>
    <location>/error.jsp</location>
  </error-page>
在例1-4中,如果響應(yīng)的狀態(tài)碼是404時(shí),會(huì)轉(zhuǎn)發(fā)到error404.jsp頁面,如果響應(yīng)狀態(tài)碼是500,會(huì)轉(zhuǎn)發(fā)到error500.jsp頁面,當(dāng)服務(wù)器端拋出RuntimeException,會(huì)轉(zhuǎn)發(fā)到error.jsp頁面。
我們知道無論服務(wù)器端拋出什么異常,響應(yīng)的狀態(tài)碼都是500,那么當(dāng)服務(wù)器端拋出RuntimeException時(shí),是轉(zhuǎn)發(fā)到error500.jsp還是轉(zhuǎn)發(fā)到error.jsp?由于狀態(tài)碼500的范圍比較大,相對(duì)來說不夠具體,所以會(huì)轉(zhuǎn)發(fā)到error.jsp頁面。如果響應(yīng)狀態(tài)碼是500,但并不是RuntimeException異常,那么就轉(zhuǎn)發(fā)到error500.jsp。
下面我們來驗(yàn)證一下,如下所示:
(1)在web應(yīng)用下新建一個(gè)error目錄,在該目錄下新建一個(gè)errorPage.jsp,頁面的主要內(nèi)容如例1-5所示:
 <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>哈哈~出錯(cuò)了</h1>
</body>
</html>
(2)該應(yīng)用的web.xml,如例1-6所示:
    <error-page>
    <error-code>404</error-code>
    <location>/error/errorPage.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error/errorPage.jsp</location>
  </error-page>
  <error-page>
    <exception-type>java.lang.RuntimeException</exception-type>
    <location>/index.jsp</location>
  </error-page>
(3)重啟服務(wù)器,在瀏覽器端訪問一個(gè)不存在的頁面,瀏覽器的顯示結(jié)果如圖1-5所示:

圖1-5 瀏覽器顯示結(jié)果

4.autoFlush屬性和buffer屬性

這兩個(gè)屬性很少使用,我們了解一下即可,如下所示:
  • autoFlush屬性:指定jsp的輸出緩沖區(qū)被響應(yīng)信息填滿時(shí),是否自動(dòng)刷新。默認(rèn)值為true,如果值為false,表示在緩沖區(qū)被填滿時(shí)拋出異常;
  • buffer屬性:指定緩沖區(qū)的大小,默認(rèn)是8kb,通常不需要修改。

5.其他屬性

page指令的其他不常用屬性,如下所示:
  • isELIgnored屬性:是否忽略el表達(dá)式,默認(rèn)值是false,表示不忽略;
  • language屬性:指定當(dāng)前jsp編譯后的語言類型,默認(rèn)值為java;
  • info:jsp的說明信息;
  • isThreadSafe:當(dāng)前的jsp是否支持并發(fā)訪問;
  • session:當(dāng)前頁面是否支持session,如果為false,那么當(dāng)前頁面就沒有session這個(gè)內(nèi)置對(duì)象;
  • extends:讓jsp生成的servlet去繼承該屬性指定的類。

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/javaee
0 分享到:
和我們?cè)诰€交談!