整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          育知Java大數據培訓:JSP頁面中的pageEnc

          育知Java大數據培訓:JSP頁面中的pageEncoding和contentType區別

          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指令的使用。

          1.1、基礎語法

          JSP中page指令的語法規則如下所示:

          <%@ page 屬性名稱="屬性值" %>

          注意:一個page指令中,可以有多個【屬性名稱=屬性值】,也可以多次使用page指令

          1.2、指令屬性

          page指令中,提供了很多個屬性,常見的屬性有這幾個:contentType、pageEncoding、errorPage、isErrorPage、import、language、session、isELIgnored,下面我們就介紹每一個屬性的作用。

          這一小節介紹errorPage、isErrorPage、session、isELIgnored四個屬性的作用。

          (1)session

          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兩種情況下,對應的源代碼如下圖所示:

          (2)isELIgnored

          isELIgnored屬性作用:這個屬性的作用是設置當前JSP頁面是否忽略EL表達式,取值:true、false,默認值是true。

          1. false表示當前頁面不忽略EL表達式,那么也就是說,當前JSP頁面支持EL表達式;
          2. 設置成true之后,那么當前JSP頁面中如果使用了EL表達式的內容,此時會被當作普通字符輸出。
          <%@ 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頁面,此時結果如下所示:

          (3)isErrorPage

          isErrorPage屬性作用:指定當前JSP頁面是否作為錯誤處理界面,取值:true、false,默認值是false。設置成true之后,那么當其他的JSP頁面發生報錯的時候,通過errorPage屬性,就會轉發到這個錯誤頁面。

          注意:isErrorPage屬性一般是和errorPage屬性結合使用的

          (4)errorPage

          errorPage屬性作用:指定當前JSP頁面的錯誤頁面地址,一般是和isErrorPage屬性結合使用。errorPage設置的相對路徑,源代碼上就是轉發到對應的錯誤頁面。

          • 首先創建一個error.jsp頁面。
          <%@ 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.jsp頁面。
          <%@ 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指令的常用屬性都介紹完啦。

          今天就到這里,未完待續~~


          主站蜘蛛池模板: 国产主播一区二区三区在线观看| 一区在线观看视频| 一区二区在线视频观看| 亚洲美女视频一区二区三区| 好吊视频一区二区三区| 日韩视频免费一区二区三区| 国产精品福利一区二区久久| 无码人妻一区二区三区在线视频| 国产精品乱码一区二区三区 | 一区二区三区在线观看免费| 精品国产aⅴ无码一区二区| 久久99国产精品一区二区| 久久精品国产一区二区三区不卡 | 夜夜嗨AV一区二区三区| 日韩视频在线观看一区二区| 久久久无码精品人妻一区| 97人妻无码一区二区精品免费 | 中文字幕无码不卡一区二区三区 | 国产成人一区二区三区精品久久| 一色一伦一区二区三区| 一本久久精品一区二区| 亚洲熟妇成人精品一区| 国产精品无码一区二区三区毛片| 无码av人妻一区二区三区四区| 亚洲一区二区三区四区视频| 91一区二区三区四区五区| 精品亚洲AV无码一区二区| 色噜噜狠狠一区二区| 国产韩国精品一区二区三区久久| 亚洲一区二区三区成人网站| 在线免费视频一区| 日韩精品一区二三区中文| 国产亚洲欧洲Aⅴ综合一区| 国产精华液一区二区区别大吗| 鲁丝片一区二区三区免费| 亚洲一区二区三区高清视频| 色一情一乱一区二区三区啪啪高| 精彩视频一区二区| 色狠狠色噜噜Av天堂一区| 一区二区三区四区免费视频| 无码人妻一区二区三区兔费|