亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

揭秘5種JSP頁面顯示為亂碼的解決方法

2024-09-05 00:17:14
字體:
來源:轉載
供稿:網友
JSP編程中網頁顯示出現亂碼的情況,基本可以歸為5類:
1. JSP頁面顯示亂碼。
2. Servlet接收Form/Request傳遞的參數時顯示為亂碼
3. JSP接收Form/Request傳遞的參數時顯示為亂碼
4. 用<jsp:forward page="catalog2.html"></jsp:forward>時頁面顯示亂碼
5. 數據庫存取的時候產生亂碼。

下面給出全部解決方法: 
1. JSP頁面顯示亂碼。
第一種為在頁面的開頭加上:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<!--這里的 GBK可以由 gb2312代替,此處以GBK為例。下同 -->
注:有時候如果不再頁面開頭加上這句,則頁面中無法保存中文字符,并提示:中文字符在不能被iso-8859-1字符集mapped,這是由于默認情況下,JSP是用iso-8859-1來編碼的,可以在Window->Preferences->General->Content Type選項下,在右邊的窗口選擇Text->Jsp,然后在下面的Default Encoding由默認的iso-8859-1改為GBK,然后點擊update即可解決。
然而這種方式會帶來一些問題:由于這一句在其他文件include該文件的時候不能被繼承,所以include它的文件也需要在文件開頭加上這句話,此時如果用的是pageEncoding="gbk"則會出現問題。類似于org.apache.jasper.JasperException: /top.jsp(1,1) Page directive: illegal to have multiple occurrences of contentType with different values (old: text/html;charset=GBK, new: text/html;charset=gbk).
類似地,如果兩個文件一個用的是gbk,一個用的是gb2312也會出現問題。
另一種更好的解決方式為:
在項目的web.xml中添加以下片段:
<!-- 下面的代碼為解決頁面亂碼問題而加入 --> 
<jsp-config>  
            <jsp-property-group>  
                <description>  
                   Special property group for JSP Configuration JSP example.  
                </description>  
                <display-name>JSPConfiguration</display-name>  
                <url-pattern>*.jsp</url-pattern>  
                <el-ignored>true</el-ignored>  
                <page-encoding>GBK</page-encoding>  
                <scripting-invalid>false</scripting-invalid>  
                <include-prelude></include-prelude>  
                <include-coda></include-coda>  
            </jsp-property-group>             
            <jsp-property-group>  
                <description>  
                   Special property group for JSP Configuration JSP example.  
                </description>  
                <display-name>JSPConfiguration</display-name>  
                <url-pattern>*.html</url-pattern>  
                <el-ignored>true</el-ignored>  
                <page-encoding>GBK</page-encoding>  
                <scripting-invalid>false</scripting-invalid>  
                <include-prelude></include-prelude>  
                <include-coda></include-coda>  
</jsp-property-group>  
</jsp-config>  
<!--       添加的代碼結束 --> 

2. Servlet接收Form/Request傳遞的參數時顯示為亂碼的解決方式:
第一種解決方式為在用到request方法的前面加上這條語句:
request.setCharacterEncoding("GBK");
同樣地,這也會由于頁面設置中GbK或gB2312大小寫不同或者采用不同的漢語字符集而發生錯誤。
另一種更好的解決方式為:添加一個名為SetCharacterEncodingFilter的filter。
filter的源文件為(參見apach安裝目錄下/webapps/jsp-examples/WEB-INF/classes/filters中的SetCharacterEncodingFilter.java文件):
package com.filters;import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.UnavailableException; 
public class SetCharacterEncodingFilter implements Filter { 

         protected String encoding = null; 
         protected FilterConfig filterConfig = null; 
         protected boolean ignore = true; 
         public void destroy() { 
             this.encoding = null; 
             this.filterConfig = null; 
         }   
         public void doFilter(ServletRequest request, ServletResponse response, 
                              FilterChain chain) 
throws IOException, ServletException { 
             // Conditionally select and set the character encoding to be used 
             if (ignore || (request.getCharacterEncoding() == null)) { 
                 String encoding = selectEncoding(request); 
                 if (encoding != null) 
                     request.setCharacterEncoding(encoding); 
             } 
// Pass control on to the next filter 
             chain.doFilter(request, response); 
         } 

        public void init(FilterConfig filterConfig) throws ServletException { 
this.filterConfig = filterConfig; 
             this.encoding = filterConfig.getInitParameter("encoding"); 
             String value = filterConfig.getInitParameter("ignore"); 
             if (value == null) 
                 this.ignore = true; 
             else if (value.equalsIgnoreCase("true")) 
                 this.ignore = true; 
             else if (value.equalsIgnoreCase("yes")) 
                 this.ignore = true; 
             else 
                 this.ignore = false; 
         } 
           protected String selectEncoding(ServletRequest request) { 
             return (this.encoding); 
         } 


同時在web.xml中添加一下片段:
<!-- 為解決亂碼問題而添加 -->   
          <filter>  
             <filter-name>SetCharacterEncoding</filter-name>  
             <filter-class>com.filters.SetCharacterEncodingFilter</filter-class>  
             <init-param>  
                 <param-name>encoding</param-name>  
                 <param-value>GBK</param-value>  
             </init-param>  
          </filter>  
         <filter-mapping>  
             <filter-name>SetCharacterEncoding</filter-name>  
             <url-pattern>/*</url-pattern>  
         </filter-mapping> 
<!-- 添加代碼結束 -->   
3. JSP接收Form/Request傳遞的參數時顯示為亂碼

當我們按照第二種亂碼的解決方式修改了web.xml并添加了filter之后,有時候并不一定就對亂碼問題高枕無憂了,有時候我們會奇怪的發現Sevlet接收Form/Request傳遞的參數可以正常顯示了,但是jsp頁面接受Form/Request傳遞的參數卻仍然顯示為亂碼。這是為什么呢?
對于我遇到的情況而言,我發現是由于我在用Form發送信息的頁面采用了這樣的html:
<form action="getParam.jsp" >
姓名<input type="text" name ="UserName"> <br>
選出你喜歡吃的水果:
<input type ="checkbox" name = "checkbox1" value = "蘋果"> 蘋果
<input type ="checkbox" name = "checkbox1" value = "西瓜"> 西瓜
<input type ="checkbox" name = "checkbox1" value = "桃子"> 桃子
<input type ="checkbox" name = "checkbox1" value = "葡萄"> 葡萄
<input type = "submit" value = "提交">
</form>
也就是說沒有指定form的method屬性。而問題就發生在此,Form的默認mothod屬性為get.
而get是通過在發送請求的url后面加?然后加參數和值來傳遞數據的的,編碼格式為ASCII.這就要求我們在傳遞的數據中有非ASCII字符或是超過了100個字符,那么你必須使用method="post",否則就會出現亂碼。
所以解決方式為:第二種亂碼的解決方式+在發送頁面的Form中指定method為post.
4. 用<jsp:forward page="catalog2.html"></jsp:forward>時頁面顯示亂碼的解決方式
此時實際上亂碼的原因和產生其他幾種亂碼的原因不同,它的原因在于我們用eclipse編輯要forward的html或者jsp文件時,采用的編碼是可以產生中文亂碼的編碼而不是GBK或者GB2312.所以解決方式就是把eclipse編輯器的編碼方式改為GBK或者GB2312.
具體操作方式見:上文紅色字體部分。
5. 數據庫存取的時候產生亂碼的解決方式
當然,在寫數據庫時,也要保正數據庫的編碼與其它一致:
我們可以在系統盤windows目錄下的my.ini文件,在文件中插入一行default-character-set=GBK,但上面說了這么多,大家也應該明白些了吧,改動太多的默認設置不是我的風格,因此上,這一行還是不要加的好。 
但不管怎么樣,我們還是要創建一個基于中文編碼的數據庫,當然,用客戶端登錄的時候,某些客戶用自動把字體編碼轉換成中文編碼。在這里,我想說一下在DOS下創建中文編碼數據庫的方法: 
在進入數據庫的時候,用mysql --default-character-set=gbk -u root -p 這句話進入mysql,然后創建數據庫,如:create database admin;這樣創建起來的數據庫就是基于中文編碼的了。
用連接數據庫的時候,讀出的數據也可能是亂碼,解決這個問題的方法非常簡單,只要在你建立數據庫連接的時候把URL設置成下面這個樣子就可以了:URL= jdbc:mysql://localhost:3306/my_database?useUnicode=true&characterEncoding=GBK 
最后總結,把各種地方的編碼統一起來,所在的亂碼問題就都解決了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久77777| 国产精品热视频| 成人国产在线视频| 亚洲高清在线观看| …久久精品99久久香蕉国产| 性视频1819p久久| 国产精品美女av| 国产亚洲欧美视频| 亚洲综合小说区| 中文字幕在线国产精品| 亚洲新声在线观看| 亚洲第一中文字幕| 91久久精品一区| 亚洲国产欧美一区二区三区久久| 456国产精品| 欧美日韩国产成人在线观看| 亚洲精品美女免费| 疯狂做受xxxx高潮欧美日本| 中国人与牲禽动交精品| 在线视频欧美日韩精品| 欧美激情影音先锋| 亚洲欧美日韩天堂一区二区| 久久天天躁狠狠躁夜夜爽蜜月| 久久69精品久久久久久久电影好| 欧美激情在线狂野欧美精品| 亚洲欧美日韩精品久久奇米色影视| 亚洲成人av片在线观看| 尤物99国产成人精品视频| 美女999久久久精品视频| 日韩最新av在线| 久久久在线免费观看| 欧美激情视频网站| 亚洲色图欧美制服丝袜另类第一页| 精品视频久久久久久久| 欧美夫妻性生活视频| 日本久久久久久| 久久久免费观看视频| 精品久久久久久久久久久久| 成人妇女淫片aaaa视频| 成人做爰www免费看视频网站| 91在线观看免费高清完整版在线观看| 日本韩国在线不卡| 在线观看欧美日韩国产| 国模精品视频一区二区| 亚洲精品国产精品国自产在线| 国产欧美在线播放| 亚洲精品v欧美精品v日韩精品| 久久久久久午夜| 青青青国产精品一区二区| 91在线观看免费高清完整版在线观看| 日韩一区二区精品视频| 91精品在线播放| 国产精品一区二区久久| 欧美黄色片免费观看| 欧美色图在线视频| 国产偷国产偷亚洲清高网站| 精品久久久久久久久中文字幕| 国产成人亚洲综合青青| 国产日韩在线亚洲字幕中文| 日韩专区在线观看| 欧美激情视频一区| 国产日韩欧美中文在线播放| zzjj国产精品一区二区| 青青在线视频一区二区三区| 国产亚洲欧洲黄色| 亚洲视频在线观看视频| 亚洲成人av片| 日韩欧美在线看| 一区二区三区无码高清视频| 久久成人综合视频| 亚洲小视频在线观看| 欧美伦理91i| 国产精品视频精品视频| 日韩一二三在线视频播| 日韩在线免费高清视频| 最好看的2019的中文字幕视频| 97超级碰碰人国产在线观看| 国产v综合ⅴ日韩v欧美大片| 国模精品视频一区二区三区| 麻豆国产精品va在线观看不卡| 亚洲性生活视频在线观看| 欧美高跟鞋交xxxxhd| 国语自产精品视频在线看一大j8| 国产综合久久久久| 久久免费视频在线| 国产欧美一区二区三区四区| 欧洲精品久久久| 国产91精品久久久久| 91国产精品视频在线| 中文字幕精品一区二区精品| 国产精品∨欧美精品v日韩精品| 亚洲美女av网站| 欧美极品少妇xxxxx| 精品国内产的精品视频在线观看| 久久躁狠狠躁夜夜爽| 国产亚洲精品成人av久久ww| 亚洲精品网址在线观看| 成人国产精品一区二区| 国产有码一区二区| 国产日产亚洲精品| 日韩亚洲欧美成人| 欧美亚洲日本黄色| 69久久夜色精品国产69| 欧美激情va永久在线播放| 欧美诱惑福利视频| 久久久精品欧美| 国产精品热视频| 全亚洲最色的网站在线观看| 国产日韩一区在线| 欧美精品在线第一页| 精品视频在线播放免| 欧美日韩xxx| 精品国产欧美一区二区五十路| 国产精品久久久久久超碰| 亚洲最大福利网站| 国产玖玖精品视频| 国产自摸综合网| 欧美黑人一级爽快片淫片高清| 97香蕉久久夜色精品国产| 美女999久久久精品视频| 狠狠干狠狠久久| www.日韩系列| 欧美在线视频网站| 尤物yw午夜国产精品视频| 国产91ⅴ在线精品免费观看| 日韩一区二区三区在线播放| 亚洲成人av在线| 97视频在线观看亚洲| 91在线免费观看网站| 亚洲精品在线观看www| 欧美日韩视频免费播放| 亚洲自拍小视频| 中文字幕精品国产| 国产成人精品一区| 国产成人拍精品视频午夜网站| 欧美极品少妇xxxxⅹ喷水| 日本伊人精品一区二区三区介绍| 69**夜色精品国产69乱| 国产精品一区电影| 欧美老女人性视频| 高清一区二区三区四区五区| 亚洲精品国产综合久久| 国产精品欧美日韩久久| 最好看的2019年中文视频| 日韩av在线一区二区| 亚洲天堂色网站| 午夜精品99久久免费| 欧美日韩国产中文精品字幕自在自线| 日韩av电影在线免费播放| 国产va免费精品高清在线| 欧亚精品在线观看| 日韩精品极品视频| 91精品视频大全| 国产精品h片在线播放| 精品国产91久久久久久老师| 欧美一级在线亚洲天堂| 亚洲欧美日韩第一区| 欧美日韩亚洲一区二区| 欧美日韩成人在线观看| 欧美大尺度电影在线观看| 97国产suv精品一区二区62| 亚洲国产一区自拍| 国产精品6699| 国产成人精品免费久久久久|