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" %>
這樣就服務器一定會是正確抓到“你好”了。
期,為進一步整治涉企侵權亂象,切實維護企業合法權益,根據中央網信辦有關工作部署,上海市網信辦向嗶哩嗶哩、小紅書、東方財富網、大智慧、證券之星等屬地90多家網站平臺部署開展“清朗浦江·e企同行”優化營商網絡環境專項行動,要求網站平臺切實落實內容管理主體責任,加強涉企侵權信息舉報專區建設,規范受理處置涉企信息舉報工作;強化熱搜榜單等重點環節管理,嚴格要求相關“自媒體”賬號、MCN機構不得炒作營銷涉企侵權信息。
上海市網信辦將通過開展專項行動,集中整治無事實依據詆毀企業和企業家、以“輿論監督”名義向企業索要利益、發布涉企負面報道索要公關費、操縱“水軍”賬號發帖攻擊企業、編造企業虛假信息、片面惡意解讀企業財務報表、斷章取義企業家過往言論等涉企侵權亂象。專項行動開展期間,上海市網信辦將與屬地相關部門、各區網信辦加強協同聯動,對情節嚴重的網站平臺和“自媒體”賬號嚴格依法處置。歡迎社會各界據實向上海市網信辦和上海重點網站平臺(涉企舉報專區鏈接見下文)提供舉報線索,共同維護清朗網絡空間,營造良好營商網絡環境,全方位提升企業感受度。
上海市網信辦舉報受理渠道
專項工作聯系郵箱:
wxbwgc@shxc.gov.cn
上海市互聯網違法和不良信息舉報中心網站:
http://www.shjbzx.cn
上海部分重點網站平臺涉企舉報專區鏈接
1.小紅書
https://ipp.xiaohongshu.com/login
2.嗶哩嗶哩
https://www.bilibili.com/v/copyright/intro/
3.東方財富網
https://help.eastmoney.com/more_info.html?pagetype=9
4.大智慧
https://mnews.dzh.com.cn/wap/data/news/xmt/2023/09/442660.html
5.證券之星
http://info.stockstar.com/aboutus/report.htm
6.拼多多
https://jubao.pinduoduo.com/qinglang
7.蜻蜓
https://bp.qtfm.cn/topic/660cdeea23dc1d15313aec96/index.html
8.2345導航
https://www.2345.com/web/tousu.html#/
(原標題為《進一步整治涉企侵權亂象 上海部署開展“清朗浦江·e企同行” 優化營商網絡環境專項行動》)
SP指令是指:用于設置JSP頁面相關屬性的一個語法命令,例如:設置頁面編碼字符集、導入其他包等等。JSP中提供了三個指令,分別是:page指令、include指令、taglib指令。其中page指令用于設置JSP頁面屬性,include指令用于引入其他的JSP文件,taglib指令用于引入標簽庫。這一小節內容介紹page指令的使用。
JSP中page指令的語法規則如下所示:
<%@ page 屬性名稱="屬性值" %>
注意:一個page指令中,可以有多個【屬性名稱=屬性值】,也可以多次使用page指令。
page指令中,提供了很多個屬性,常見的屬性有這幾個:contentType、pageEncoding、errorPage、isErrorPage、import、language、session、isELIgnored,下面我們就介紹每一個屬性的作用。
這一小節介紹errorPage、isErrorPage、session、isELIgnored四個屬性的作用。
session屬性作用:設置當前JSP頁面中是否可以使用session對象,取值:true、false。默認是true,設置成false,那么當前JSP頁面里面就不能使用session對象。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page session="true" %>
<html>
<head>
<title>JSP指令之Page</title>
</head>
<body>
<h3>JSP指令之Page</h3>
<%
// 使用session對象
Object username=session.getAttribute("username");
System.out.println(username);
%>
</body>
</html>
如果設置session="fasle",那么在JSP頁面中使用session,編譯會報錯,如下所示:
這是因為,當我們設置session="false"的時候,JSP編譯之后,對應的java源代碼中,都不會定義session變量,來看下session設置成true和false兩種情況下,對應的源代碼如下圖所示:
isELIgnored屬性作用:這個屬性的作用是設置當前JSP頁面是否忽略EL表達式,取值:true、false,默認值是true。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="true" %>
<html>
<head>
<title>JSP指令之Page</title>
</head>
<body>
<h3>JSP指令之Page</h3>
使用EL表達式獲取參數: ${"輸出EL表達式內容"}
</body>
</html>
運行結果如下所示:
當我們設置成isELIgnored="false"的時候,再次訪問jsp頁面,此時結果如下所示:
isErrorPage屬性作用:指定當前JSP頁面是否作為錯誤處理界面,取值:true、false,默認值是false。設置成true之后,那么當其他的JSP頁面發生報錯的時候,通過errorPage屬性,就會轉發到這個錯誤頁面。
注意:isErrorPage屬性一般是和errorPage屬性結合使用的。
errorPage屬性作用:指定當前JSP頁面的錯誤頁面地址,一般是和isErrorPage屬性結合使用。errorPage設置的相對路徑,源代碼上就是轉發到對應的錯誤頁面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 指定當前頁面是錯誤頁面 --%>
<%@ page isErrorPage="true" %>
<html>
<head>
<title>JSP錯誤顯示頁面</title>
</head>
<body>
<h3>
Sorry,你訪問的頁面報錯啦!!!
</h3>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%-- 指定錯誤頁面的路徑地址 --%>
<%@ page errorPage="error.jsp" %>
<html>
<head>
<title>errorPage屬性</title>
</head>
<body>
<%-- 模擬報錯 --%>
<%
int i=10 / 0;
%>
</body>
</html>
啟動Tomcat容器,瀏覽器訪問http://localhost:8080/servlet/page.jsp,結果如下所示:
查看page.jsp編譯之后對應的源代碼,可以看到有一個handlePageException()方法,這個方法就是處理JSP頁面異常的。
點進去查看源代碼,如下所示:
private void doHandlePageException(Throwable t) throws IOException, ServletException {
if (this.errorPageURL !=null && !this.errorPageURL.equals("")) {
this.request.setAttribute("javax.servlet.jsp.jspException", t);
this.request.setAttribute("javax.servlet.error.status_code", 500);
this.request.setAttribute("javax.servlet.error.request_uri", ((HttpServletRequest)this.request).getRequestURI());
this.request.setAttribute("javax.servlet.error.servlet_name", this.config.getServletName());
try {
this.forward(this.errorPageURL);
} catch (IllegalStateException var3) {
this.include(this.errorPageURL);
}
Object newException=this.request.getAttribute("javax.servlet.error.exception");
if (newException !=null && newException==t) {
this.request.removeAttribute("javax.servlet.error.exception");
}
this.request.removeAttribute("javax.servlet.error.status_code");
this.request.removeAttribute("javax.servlet.error.request_uri");
this.request.removeAttribute("javax.servlet.error.servlet_name");
this.request.removeAttribute("javax.servlet.jsp.jspException");
} else if (t instanceof IOException) {
throw (IOException)t;
} else if (t instanceof ServletException) {
throw (ServletException)t;
} else if (t instanceof RuntimeException) {
throw (RuntimeException)t;
} else {
Throwable rootCause=null;
if (t instanceof JspException || t instanceof ELException || t instanceof javax.servlet.jsp.el.ELException) {
rootCause=t.getCause();
}
if (rootCause !=null) {
throw new ServletException(t.getClass().getName() + ": " + t.getMessage(), rootCause);
} else {
throw new ServletException(t);
}
}
}
從上面源代碼就可以看到,有一個this.forward()方法,這個方法就是轉發的作用。到此,page指令的常用屬性都介紹完啦。
今天就到這里,未完待續~~
*請認真填寫需求信息,我們會在24小時內與您取得聯系。