1.JSP指令
JSP中有三大指令,分別是以下三個:
其中這三個指令中,page是最復雜的,后面我們會詳細講解;include指令表示靜態(tài)包含,我們之前學習的請求包含屬于動態(tài)包含;taglib指令是用來導入標簽庫,后面會學習一些標簽庫,在這里只做簡單介紹。
JSP指令的格式如下:
<%@指令名 attr1=”” attr2=””%>
其中attr1和attr2表示指令中的屬性,通常我們將JSP指令寫在JSP文件的的最上方,但是這不是必須的。
在JSP文件中,任何指令都是可以重復的,例如在一個jsp頁面中可以存在三個page指令:
- <%@ page language=”java”%>
- <%@ page import=”java.util.*”%>
- <%@ page pageEncoding=”utf-8”%>
2.page指令
page指令是最常用的指令,也是屬性最多的指令。并且它的這些屬性都是可選的屬性而不是必須的屬性,例如<%@page%>,沒有給出任何屬性也是可以的。
2.1pageEncoding屬性
在jsp文件中有如下page指令:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
其中pageEncoding屬性的值是UTF-8,該屬性的作用是:指定當前jsp頁面的編碼。這個編碼是給服務器看的,服務器需要知道當前頁面的編碼,否則服務器無法正確的把jsp翻譯成Java文件。所以說這個編碼只要和頁面的真實編碼保持一致,在瀏覽器端就不會出現(xiàn)亂碼。可以通過在myeclipse中,在jsp文件上點擊右鍵,選擇【Properties】選項查看和設(shè)置當前頁面的真實編碼。例如:
(1)在一個web工程中,當前index.jsp頁面的真實編碼是utf-8,如圖1-1所示:
圖1-1 頁面編碼
(2)圖1-1中,index.jsp頁面的真實編碼是utf-8,現(xiàn)在在index.jsp頁面中寫入中文“我是不是亂碼”,然后將頁面的page指令中的pageEncoding屬性的值設(shè)置為“gbk”,如圖1-2所示:
圖1-2 index.jsp頁面
(3)現(xiàn)在將該應用發(fā)布到服務器中,然后啟動服務器,在瀏覽器端訪問index.jsp頁面,瀏覽器顯示結(jié)果如圖1-3所示:
圖1-3 瀏覽器顯示結(jié)果
由圖1-3可知,瀏覽器端并沒有出現(xiàn)亂碼,但是頁面的真實編碼和pageEncoding的值不一致為什么沒有出現(xiàn)亂碼呢?下面我們再來查看index.jsp頁面的真實編碼,如圖1-4所示:
圖1-4 真實編碼
由圖1-4可知,當我們改變了pageEncoding屬性的值,頁面的真實編碼也會隨之改變,所以一般情況下出現(xiàn)亂碼不會是由pageEncoding屬性的設(shè)置導致的,但是如果選擇圖1-4中的【Other】單選框,那么對pageEncoding進行設(shè)置就不會再使頁面的真實編碼隨之改變了。默認情況下,page指令的pageEncoding的值是iso-8859-1,我們只需要將這個設(shè)置修改一下,那么以后新建的jsp文件中的pageEncoding的值就不再是iso-8859-1。
2.2contentType屬性
在jsp文件中有如下指令:
<%@page language="java" import="java.util.*" contentType="text/html; charset=ISO-8859-1"%>
其中contentType屬性的作用等同于response.setContentType(“text/html;charset=ISO-8859-1”)的作用。response的setContentType()方法這里我們就不再多說,當我們在jsp文件中提供了contentType屬性,那么jsp對應的java文件中就會存在response.setContentType(“text/html;charset=ISO-8859-1”)這句代碼。
contentType屬性的默認值就是“text/html; charset=ISO-8859-1”,但是我們知道iso-8859-1并不支持中文,所以我們需要將charset的值修改為“utf-8“。
2.3pageEncoding與contentType的區(qū)別與聯(lián)系
pageEncoding與contentType都是page指令的屬性,它們都是用來設(shè)置編碼,有如下聯(lián)系:
- 如果這兩個屬性只提供了其中一個,那么沒有提供的那個屬性的編碼值就是提供的這個屬性的編碼值,例如:在jsp頁面中設(shè)置了contentType=”text/html;charset=utf-8”,那么沒有設(shè)置的pageEncoding的值就為utf-8,反之亦然;
- 如果兩個屬性都沒有提供,那么兩者的默認編碼就是ISO-8859-1。
根據(jù)對這兩個屬性的講解,它們有如下區(qū)別:
- pageEncoding是設(shè)置當前頁面的編碼,該編碼是給服務器看的,可以讓服務器正確的將jsp文件翻譯成Java文件;
- contentType有兩個作用:一是設(shè)置響應字符流的編碼,二是設(shè)置Content-Type響應頭,即通知瀏覽器使用什么編碼方式解碼響應信息。
本文版權(quán)歸傳智播客Java培訓學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://xamj520.com/javaee