青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

oyjpArt ACM/ICPC算法程序設計空間

// I am new in programming, welcome to my blog
I am oyjpart(alpc12, 四城)
posts - 224, comments - 694, trackbacks - 0, articles - 6

Tomcat JSP Web 開發中的亂碼問題小結

Posted on 2008-05-22 11:26 oyjpart 閱讀(1658) 評論(0)  編輯 收藏 引用 所屬分類: 程序設計
Tomcat JSP Web 開發中的亂碼問題小結
1. 靜態頁面的亂碼問題
文件的編碼和瀏覽器要顯示的編碼不一致。
1) 檢查文件原始的編碼, 可以用記事本打開, 然后選擇另存為來看;
2) 給當前頁面加入一個指令來建議瀏覽器用指定的編碼來顯示文件字符內容.
<meta http-equiv="content-type" content="text/html; charset=GBK">
3) 如果系統是英文XP,沒裝東亞字符集支持, 也會顯示亂碼.
2. JSP 頁面的亂碼問題
1) page 指令有個 pageEncoding="GBK" 這個會指定當前頁面保存的編碼, 如果寫成
ISO8859-1 就不能保存漢字;
2) page 指令的 contentType="text/html; charset=ISO8859-1" 也會像靜態頁面一樣讓
瀏覽器來優先選擇一種編碼.
如果JSP 亂碼的話,一般就顯示成?,而且不管你給瀏覽器選什么樣的編碼,它都不能正
確顯示
3. 表單提交的亂碼問題(Tomcat 特有)
1). POST 的亂碼
MyEclipse 6 Java 開發中文教程
157 劉長炯著
a. 首先瀏覽器提交表單的編碼是根據表單所在頁面來決定的, 而不是根據提交后的
JSP 頁面的編碼來決定的. 把所有的頁面的編碼都設置成一樣的,例如 GBK.
b. 處理方式就是在獲取參數之前設置編碼:
request.setCharacterEncoding("GBK");
c. 可以用過濾器的方式來解決, Tomcat 已經帶了一個現成的:
apache-tomcat-5.5.23\webapps\jsp-examples\WEB-INF\classes\filters\SetCharacter
EncodingFilter.java
web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2) GET 方式的亂碼
用 setCharacterEncoding() 不能解決. TOMCAT 的一個BUG, GET 方式傳送的表單參
數總是用的 ISO8859-1 編碼. 我們要把它轉成 GBK 方式.
String username = request.getParameter("username");
System.out.println(username);
// 轉碼, 先取得原始的二進制字節數組
byte[] data = username.getBytes("ISO8859-1");
// 根據新的字符集再構造新的字符串
username = new String(data, "GBK");
小結:
所有的頁面(除了最后的 GET 的亂碼問題)都用統一的編碼(GBK 或者UTF-8), 就不會出現
亂碼問題

以上內容為【轉】

下面是一個完整的過濾器例子:
package 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.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class TomcatFormFilter implements Filter {
    
/**
     * Request.java 對 HttpServletRequestWrapper 進行擴充, 不影響原來的功能并能提供所 有的
     * HttpServletRequest 接口中的功能. 它可以統一的對 Tomcat 默認設置下的中文問題進行解決而只 需要用新的 Request
     * 對象替換頁面中的 request 對象即可.
     
*/
    
class Request extends HttpServletRequestWrapper {
        
public Request(HttpServletRequest request) {
            
super(request);
        }

        
/**
         * 轉換由表單讀取的數據的內碼. 從 ISO 字符轉到 GBK.
         
*/
        
public String toChi(String input) {
            
try {
                
byte[] bytes = input.getBytes("ISO8859-1");
                
return new String(bytes, "utf-8");
            } 
catch (Exception ex) {
            }
            
return null;
        }

        
/**
         * Return the HttpServletRequest holded by this object.
         
*/
        
private HttpServletRequest getHttpServletRequest() {
            
return (HttpServletRequest) super.getRequest();
        }

        
/**
         * 讀取參數 -- 修正了中文問題.
         
*/
        
public String getParameter(String name) {
            
return toChi(getHttpServletRequest().getParameter(name));
        }

        
/**
         * 讀取參數列表 - 修正了中文問題.
         
*/
        
public String[] getParameterValues(String name) {
            String values[] 
= getHttpServletRequest().getParameterValues(name);
            
if (values != null) {
                
for (int i = 0; i < values.length; i++) {
                    values[i] 
= toChi(values[i]);
                }
            }
            
return values;
        }
    }

    
public void destroy() {
    }

    
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {
        HttpServletRequest httpreq 
= (HttpServletRequest) request;
        
if (httpreq.getMethod().equals("POST")) {
            request.setCharacterEncoding(
"utf-8");
        } 
else {
            request 
= new Request(httpreq);
        }
        response.setCharacterEncoding(
"utf-8");
        chain.doFilter(request, response);
    }

    
public void init(FilterConfig filterConfig) throws ServletException {
    }
}

web.xml中加入如下配置信息
    <filter>
        
<filter-name>TomcatFormFilter</filter-name>
        
<filter-class>filters.TomcatFormFilter</filter-class>
    
</filter>
    
<filter-mapping>
        
<filter-name>TomcatFormFilter</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>


上述都是使用統一的GBK編碼,如果想用utf-8編碼的話,稍作修改就可以了。
在解決了JSP亂碼問題之后,還有一個問題,就是數據庫亂碼問題。
我使用的數據庫是mysql
在hibernate的配置文件中加入
    <property name="connection.useUnicode">true</property>
    <property name="connection.characterEncoding">UTF-8</property>
就算是一整套的中文解決方案了。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲高清视频一区二区| 亚洲制服av| 亚洲一区二区三区在线观看视频| 国产麻豆综合| 国产日韩亚洲欧美精品| 国产精品一区在线观看你懂的| 国产精品久久国产三级国电话系列 | 在线一区二区三区四区| 亚洲毛片网站| 国产精品99久久久久久久久 | 99视频在线观看一区三区| 99re8这里有精品热视频免费| 在线视频你懂得一区| 亚洲综合电影| 久久这里有精品15一区二区三区| 欧美激情免费在线| 亚洲欧美中文另类| 夜夜嗨av一区二区三区| 欧美国产日韩一二三区| 另类国产ts人妖高潮视频| 亚洲国产日韩欧美| 正在播放亚洲| 久久一区二区三区四区| 亚洲国产婷婷综合在线精品| 亚洲高清久久网| 亚洲女人小视频在线观看| 久久精品一本| 欧美性天天影院| 亚洲第一精品福利| 亚洲欧美日韩国产一区二区| 牛牛影视久久网| 久久久久久久久久久成人| 亚洲欧洲日夜超级视频| 亚洲欧美在线x视频| 免费在线观看一区二区| 国产乱码精品一区二区三| 亚洲美女色禁图| 久久久久久久成人| 亚洲视频 欧洲视频| 欧美成人小视频| 黑丝一区二区| 欧美亚洲综合久久| 亚洲另类视频| 欧美成人自拍视频| 一区在线视频| 久久久久久久久伊人| 亚洲视频电影在线| 亚洲视频在线一区| 欧美丰满高潮xxxx喷水动漫| 国产在线精品一区二区夜色| 亚洲欧美日韩系列| 亚洲乱码视频| 欧美日韩国产色视频| 亚洲人成网站精品片在线观看| 久久久激情视频| 午夜在线电影亚洲一区| 午夜一区二区三区不卡视频| 亚洲欧美一区二区三区极速播放| 亚洲伦理一区| 久久午夜视频| 欧美一区二区三区久久精品茉莉花| 欧美日韩午夜剧场| 夜夜嗨av一区二区三区四季av| 欧美成人中文| 美日韩精品视频| 亚洲第一主播视频| 欧美不卡在线| 欧美顶级艳妇交换群宴| 亚洲国产精品一区制服丝袜| 久久裸体视频| 久久综合久久综合九色| 在线精品国产欧美| 亚洲视频网站在线观看| 99精品国产在热久久婷婷| 欧美精品一区三区| 一区二区免费看| 亚洲无人区一区| 国产欧美一区二区精品性| 校园激情久久| 欧美尤物一区| 久久成人综合网| 国产一区二区福利| 亚洲国产精品第一区二区| 亚洲欧美精品suv| 99视频超级精品| 国产精品v欧美精品∨日韩| 亚洲视频每日更新| 一区二区三区欧美成人| 国产精品久久久久999| 欧美影院久久久| 久久久夜夜夜| av成人免费在线观看| 亚洲一区在线观看免费观看电影高清| 国产精品视频免费观看www| 欧美一级免费视频| 欧美主播一区二区三区| 亚洲国产成人在线视频| 一本一本久久a久久精品牛牛影视| 欧美午夜www高清视频| 久久久91精品国产一区二区精品| 老司机免费视频久久| 亚洲在线免费观看| 久久久www成人免费毛片麻豆| 一本大道久久精品懂色aⅴ| 午夜精品福利在线| 亚洲精品影院在线观看| 香港久久久电影| aa成人免费视频| 蜜臀va亚洲va欧美va天堂 | 在线亚洲精品福利网址导航| 国产亚洲精品美女| 嫩草国产精品入口| 国产精品v日韩精品| 久久裸体视频| 国产精品免费电影| 91久久黄色| 国产一区在线视频| 亚洲日本视频| 亚洲第一页在线| 欧美一级二区| 欧美视频日韩| 亚洲日本在线观看| 黄色国产精品一区二区三区| 亚欧成人在线| 欧美精品色网| 久久婷婷av| 国产精品久久久久久久浪潮网站 | 亚洲国产乱码最新视频 | 国产一区在线观看视频| 日韩午夜一区| 亚洲欧洲三级| 亚洲综合视频网| 亚洲一区精品视频| 欧美/亚洲一区| 久久夜色精品一区| 国产精品一区二区男女羞羞无遮挡| 欧美电影在线| 亚洲精品视频在线观看免费| 欧美伊久线香蕉线新在线| 亚洲在线播放电影| 欧美日韩一区综合| 亚洲精品乱码久久久久久按摩观 | 欧美亚洲一级片| 欧美日韩在线观看一区二区三区 | 蜜桃久久av一区| 国产精品一区毛片| 亚洲日本成人网| 亚洲国产精品一区二区www在线 | 亚洲精品小视频| 一区二区三区精品视频| 狼人社综合社区| 久久久噜久噜久久综合| 国产日韩欧美a| 亚洲男人第一av网站| 久久精品人人做人人爽电影蜜月| 欧美午夜在线一二页| 99精品99久久久久久宅男| 日韩系列在线| 欧美日韩精品一区二区天天拍小说| 久久午夜精品| 亚洲第一视频网站| 蜜臀av性久久久久蜜臀aⅴ| 美女精品国产| 91久久国产自产拍夜夜嗨| 亚洲女女女同性video| 久久亚洲精品视频| 一区二区三区无毛| 最新亚洲电影| 欧美日韩国产在线看| 日韩视频在线观看国产| 夜夜嗨网站十八久久 | 久久综合中文| 亚洲高清在线视频| 一本色道久久综合一区| 欧美成人在线免费视频| 99视频精品在线| 欧美亚洲综合网| 韩日成人在线| 欧美成人久久| 欧美一区二区三区在线观看视频 | 日韩午夜精品| 免费看av成人| 宅男66日本亚洲欧美视频| 国产精品亚洲综合| 久久人人九九| 亚洲国产欧美一区二区三区同亚洲| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美ab在线视频| 亚洲视频在线观看三级| 欧美xx69| 午夜国产一区| 国产精品综合不卡av| 久久婷婷国产综合尤物精品| 亚洲国内在线| 久久精品中文字幕一区| 日韩一级欧洲| 亚洲伦理精品| 激情综合亚洲| 国产精品亚洲一区| 欧美激情国产日韩|