一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

jsp 編碼問題

 心情谷 2014-03-11


 

1.Tomcat一般總是默認使用ISO-8859-1作為字符編碼方式的。所以,除非你在Servlet中使用了request.setCharacterEncoding("編碼方式");指定了特殊的編碼方式,否則Tomcat默認使用ISO-8859-1的編碼方式。

2.在JSP頁面中pageEncoding和charset和含義是不同的。pageEncoding是指頁面的編碼格式(請記?。?,十分重要~,與顯示無關),也就是說無論你JSP里的pageEncoding采用什么方式,如果出現(xiàn)中文亂碼,原因不在于pageEncoding的所指定的編碼方式不對,而在于charset的屬性不對。charset是負責JSP頁面中的字符按什么編碼方式顯示。pageEncoding只負責頁面的編碼格式,而后JAVA虛擬機負責按照pageEncoding指定的編碼轉換成Unicode編碼的字節(jié)碼文件。(也就是說,無論你pageEncoding指定什么方式,最終都是轉換成了Unicode編碼。)另外請大家注意,如果從客戶端提交的用戶請求里的中文也是使用pageEncoding方式編碼的。也就是說,在Servlet中request.getParameter("參數(shù)");Tomcat默認是使用ISO-8859-1方式去讀取的,但實際里面的字符編碼方式應該是JSP頁面pageEncoding所指定的方式。除非用戶自己加上request.setCharacterEncoding("編碼方式");

 

3.明白pageEncoding和charset之間的關系。一般而言,如果頁面里指定了pageEncoding的方式也就是說,比如:<%@page language="java" import="java.util.*" pageEncoding="GBK"%>這句話,而沒有指定charset的話,那么頁面默認是按照charset=ISO-8859-1編碼方式顯示字符,按照pageEncoding="GBK"方式進行頁面的編碼。如果你的JSP頁面里面沒有指定pageEncoding方式,而只是說明了charset的話,比如:

<%@ pagecontentType="text/html;charset=utf-8"%>這句話,那么JSP默認是按照pageEncoding="utf-8"進行頁面編碼的,字符集按照charset=utf-8"顯示。

 

4.使用request.setCharacterEncoding("編碼方式");注意:request.setCharacterEncoding()僅僅對POST提交方式起作用,對于GET方式提交還是會出現(xiàn)亂碼問題。要解決GET提交中文的亂碼問題,可以在Server.xml的<Connector port="8888" protocol="HTTP/1.1"
 
             connectionTimeout="20000"
              redirectPort="8443" />

加入:URIEncoding="utf-8" useBodyEncodingForURI="true"

另外,request.setCharacterEncoding()這句話一定要放在要讀取的第一參數(shù)之前調用。否則也不起作用了??!

 

下來我們看一個小例子:

  在index.jsp頁面中,指定pageEncoding方式:

------------------------------------------------------------------

<%@ page language="java" import="java.util.*"pageEncoding="GBK" %>

<html>
  <head>
   <basehref="<%=basePath%>">
 
   <title>My JSP 'index.jsp' startingpage</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 mypage">
<!--
<link rel="stylesheet" type="text/css"href="styles.css">
-->

  </head>

  <body>
    <form action=servlet/Loginmethod=post>
      用戶名:<input type=text name="username"size=20><br>
      密碼:<input type="password" name="password"size=20><br>
      <input type=submitname="submit">
  </form>
  </body>
</html>
-------------------------------------------------------------

在Login.java Servlet源文件中:

public void doPost(HttpServletRequest request, HttpServletResponseresponse)
   throws ServletException,IOException {

 
  PrintWriter out = response.getWriter();
 out.print("<H>welcome you comehere!</H>");
 out.print("<br>");
 out.println(request.getParameter("username"));
 out.print("<br>");
 out.println(request.getParameter("password"));
 out.print("<br>");
  out.flush();
 System.out.println(response.getCharacterEncoding());
  out.close();
}

當輸入中文的用戶名,調用Login Servlet后,結果能正常顯示中文,讀者看到這里似乎感到很奇怪。

因為,在LoginServlet中并沒有使用request.setCharacterEncoding("編碼方式");指定特點的編碼方式,也就是說Tomcat默認是使用ISO-8859-1的方式,怎么能正常顯示中文了呢?問題出在IE瀏覽器上,請大家注意!因為,大家默認使用的都是中文IE瀏覽器,所以中文IE瀏覽器默認使用的字符集是charset=GBK,再請大家注意了,在上面這段LoginServlet代碼中并沒有指定response.setContentType("text/html;charset=GBK");這樣的語句,也就是說IE瀏覽器認為,既然用戶自己沒有指定字符集,那么就使用默認的字符集,也就是默認使用了charset=GBK,

所以你所看到的中文顯示,是IE瀏覽器默默幫你轉換了,從ISO-8859-1到GBK的轉換,也就是說IE瀏覽器幫你做了這么一句話:

out.println(newString(request.getParameter("username").getBytes("ISO-8859-1"),"gbk"));

再請大家注意,如果你在Login Servlet原碼中加入了response.setContentType("text/html;charset=GBK");那么你就畫蛇添足了,反而起到不好的效果,因為IE瀏覽器認為用戶自己已經(jīng)指定了特定的字符集方式,而且就是charset=GBK方式,所以就不需要從ISO-8859-1到GBK的轉換,因為IE瀏覽認為你頁面里的字符就應該是GBK編碼方式的,但是其實不然,是ISO-8859-1方式的,所以反而顯示的中文亂碼了。

 

下來,我們把上面的小例子改一下:index.jsp頁面中只指定charset方式:

<%@ pagecontentType="text/html;charset=utf-8"%>

<html>
  <head>
   <basehref="<%=basePath%>">
 
   <title>My JSP 'index.jsp' startingpage</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 mypage">
<!--
<link rel="stylesheet" type="text/css"href="styles.css">
-->

  </head>

  <body>
    <form action=servlet/Loginmethod=post>
      用戶名:<input type=text name="username"size=20><br>
      密碼:<input type="password" name="password"size=20><br>
      <input type=submitname="submit">
  </form>
  </body>
</html>
-------------------------------------------------------

在Login.java Servlet源文件中:

public void doPost(HttpServletRequest request, HttpServletResponseresponse)
   throws ServletException,IOException {

 response.setContentType("text/html;charset=utf-8");

 //response.setContentType("text/html;charset=GBK");//也可以正常顯示中文

  request.setCharacte

補充:Web開發(fā) , Jsp ,

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    老鸭窝精彩从这里蔓延| 欧美一二三区高清不卡| 日韩精品少妇人妻一区二区| 伊人欧美一区二区三区| 夫妻性生活一级黄色录像| 国产精品流白浆无遮挡| 中字幕一区二区三区久久蜜桃| 国产精品丝袜一二三区| 在线视频三区日本精品| 婷婷基地五月激情五月| 高清免费在线不卡视频| 欧美一级不卡视频在线观看| 国内午夜精品视频在线观看| 日韩午夜福利高清在线观看| 日韩中文字幕欧美亚洲| 国产又色又爽又黄又免费| 精品久久久一区二区三| 国产成人精品国内自产拍| 中文字幕日韩欧美一区| 日韩不卡一区二区在线| 99国产高清不卡视频| av国产熟妇露脸在线观看| 国产一区二区不卡在线视频| 亚洲国产av在线观看一区| 色婷婷成人精品综合一区| 九九热精品视频免费在线播放| 欧美乱视频一区二区三区| 亚洲欧美日本成人在线| 在线免费国产一区二区三区| 亚洲专区中文字幕视频| 精品香蕉一区二区在线| 少妇特黄av一区二区三区| 91久久精品国产一区蜜臀| 久久精视频免费视频观看| 久久亚洲国产视频三级黄| 美国黑人一级黄色大片| 久久精品国产在热亚洲| 国产欧美一区二区三区精品视| 国产精品激情在线观看| 日本丰满大奶熟女一区二区| 熟女高潮一区二区三区|