、《JSP頁面實際上就是Servlet》
2、《JSP頁面中最常使用的腳本元素》
3、《JSP頁面隱藏了哪些對象》
Page指令
我們在說《JSP頁面中最常使用的腳本元素》的時候,提到了指令標簽
而Page指令,就是一種極其常見的指令
之前使用的例子:
Page指令可以在頁面內隨便放置,一般是放在頁首的位置。
里面有很多使用:
(1)language:
language屬性有默認,寫成別的編譯不了
寫法是:<%@ page language="java"%>
(2)extends:
標明JSP編譯時需要加入的Class的全名,最好不使用它,它會限制JSP的編譯能力.
寫法是: <%@ page extends="package.class"%>
(3)import:
import屬性,寫了之后會自動添加到servlet的import語句中,但不進行包存在性的檢查;
寫法:<%@ page import="java.util.*"%>
(4)session:
Session對象是否參與會話,session="false"就沒有session對象了
寫法:<%@ page session="false"%>
(5)buffer:
buffer屬性指定out對象(JspWriter)使用的緩沖區大小,以kb為單位,默認8kb
寫法:<%@ page buffer="none"%>
(6)autoFlush:
autoFlush屬性控制當緩沖區滿了后,是自動清空輸出緩沖區(默認true),還是在緩沖區溢出后拋出異常(false)。
寫法:<%@ page autoFlush="true"%>
(7)isThreadSafe:
isThreadSafe問你的應用是否是線程安全的,缺省為true,表示應用是線程安全的,可以同時響應多個請求;如果設置為false,那么一次只能處理一個用戶請求。
寫法:<%@ page isThreadSafe="false"%>
(8)info:
定義一個可以在servlet中通過getServletInfo方法獲取的字符串。 jsp容器做的是在servlet中生成getServletInfo方法返回info屬性指定的String
寫法:<%@ page info="infotext"%>
(9)errorPage:
errorPage="relativeURL" 設置處理異常事件的JSP文件。
isErrorPage="true | false" 設置此頁是否為出錯頁,如果被設置為true,你就能使用exception對象
寫法:<%@ page errorPage="error.jsp"%>、、<%@ page isErrorPage="true"%>
(10)isELIgnored:
isELIgnored忽略el表達式
寫法:<%@ page isELIgnored="true"%>
(11)contentType:
contentType屬性設置發送到客戶端文檔的響應報頭的類型和字符編碼。多個使用;號分開。 pageEncodeing屬性只用于更改字符編碼
寫法:<%@ page contentType="text/html; charset=UTF-8"%>
Charset設置的是頁面的字符集、pageEncoding定義的輸出流的字符集
我們寫整理這些,里面的內容會在學習的過程中不斷擴展,這次我們就做一個小例子
我們在我們之前的頁面寫一個明顯的錯誤
然后我們運行服務器
然后訪問頁面
點擊提交
頁面就會出現錯誤
但是這個看的人有點暈。特別是用戶他不知道這是什么
我們寫一個錯誤頁面
我們寫內容
然后在錯誤頁面引入
然后就看到我們寫的內容了,這樣就不會出現前面用戶看不懂的情況,我們可以寫我們想寫的
這個例子最后一個,也出現了Exception中的隱藏對象,記到筆記了,又遇到一個。
ageEncoding:設置JSP源文件本身和響應正文中的字符集編碼。
ContentType 屬性指定響應的 HTTP 內容類型。如果未指定 ContentType,默認為 text/HTML。
語法 Response.ContentType [= ContentType ]
contentType:設置JSP源文件和響應正文的字符集編碼及MIME類型。
contentType的charset:設置服務器發送給客戶端時的內容的編碼。
JSP要經過兩次的“編碼”,第一階段會用pageEncoding,第二階段會用utf-8的.java文件至utf-8的.class文件,第三階段就是由Tomcat傳回瀏覽器的網頁, 用的是contentType。
JSP要經過兩次的“編碼”,第一階段會用pageEncoding,第二階段會用utf-8至utf-8,第三階段就是由Tomcat出來的網頁, 用的是contentType。
第一階段是jsp編譯成java
它會根據pageEncoding的設定讀取jsp,結果是由指定的編碼方案翻譯成統一的UTF-8 JAVA源碼(即.java),如果pageEncoding設定錯了,或沒有設定,出來的就是中文亂碼。
第二階段是由JAVAC的JAVA源碼至java byteCode的編譯
不論JSP編寫時候用的是什么編碼方案,經過這個階段的結果全部是UTF-8的encoding的java源碼。
JAVAC用UTF-8的encoding讀取java源碼,編譯成UTF-8 encoding的二進制碼(即.class),這是JVM對常數字串在二進制碼(java encoding)內表達的規范。
第三階段是Tomcat(或其的application container)載入和執行階段二的來的JAVA二進制碼
輸出的結果,也就是在客戶端見到的,這時隱藏在階段一和階段二的參數contentType就發揮了功效
pageEncoding 和contentType的預設都是 ISO8859-1. 而隨便設定了其中一個, 另一個就跟著一樣了(TOMCAT4.1.27是如此). 但這不是絕對的, 這要看各自JSPC的處理方式. 而pageEncoding不等于contentType, 更有利亞洲區的文字 CJKV系JSP網頁的開發和展示, (例pageEncoding=GB2312 不等于 contentType=utf-8)。
jsp文件不像.java,.java 在被編譯器讀入的時候默認采用的是操作系統所設定的locale所對應的編碼,比如中國大陸就是GBK,臺灣就是BIG5或者MS950。而一般我們不管 是在記事本還是在ue中寫代碼,如果沒有經過特別轉碼的話,寫出來的都是本地編碼格式的內容。所以編譯器采用的方法剛好可以讓虛擬機得到正確的資料。
但是jsp文件不是這樣,它沒有這個默認轉碼過程,但是指定了pageEncoding就可以實現正確轉碼了。
舉個例子:
1.<%@ page contentType="text/html;charset=utf-8" %>
大都會打印出亂碼,因為輸入的“你好”是gbk的,但是服務器是否正確抓到“你好”不得而知。
但是如果更改為
1.<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK" %>
這樣就服務器一定會是正確抓到“你好”了。
需要將文檔移動到一個新的位置時,就需要使用JSP重定向了。
最簡單的重定向方式就是使用response對象的sendRedirect()方法。這個方法的簽名如下:
public void response.sendRedirect(String location)throws IOException
這個方法將狀態碼和新的頁面位置作為響應發回給瀏覽器。您也可以使用setStatus()和setHeader()方法來得到同樣的效果:
....String site = "http://www.runoob.com" ;response.setStatus(response.SC_MOVED_TEMPORARILY);response.setHeader("Location", site); ....
實例演示
這個例子表明了JSP如何進行頁面重定向:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%><%@ page import="java.io.*,java.util.*" %><html><html><head><title>頁面重定向</title></head><body><h1>頁面重定向</h1><%
// 重定向到新地址
String site = new String("http://www.runoob.com");
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site); %></body></html>
將以上代碼保存在PageRedirecting.jsp文件中,然后訪問http://localhost:8080/PageRedirect.jsp,它將會把您帶至http://www.runoob.cc/。
如您還有不明白的可以在下面與我留言或是與我探討QQ群{{308855039}},我們一起飛!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。