天天看點

中文過濾器

現在将常見的亂碼問題分為jsp頁面顯示中文亂碼、表單送出亂碼兩類。 

     1)jsp頁面中顯示中文亂碼

      在jsp檔案中使用page指令指定響應結果的mime類型,如<%@ page language="java" contenttype="text/html;charset=gb2312" %> 

     2)表單送出亂碼      

      表單送出時(post和get方法),使用request.getparameter方法得到亂碼 ,這是因為tomcat處理送出的參數時預設的是iso-8859-1,表單送出get和post處理亂碼問題不同,下面分别說明。 

     (1)post處理 

     對post送出的表單通過編寫一個過濾器的方法來解決,過濾器在使用者送出的資料被處理之前被調用,可以在這裡改變參數的編碼方式,過濾器的代碼如下:

package org.lxh.myzngt.filter;

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;

public class encodingfilter implements filter {

    private string charset = null;

    public void destroy() {

    }

    public void dofilter(servletrequest req, servletresponse resp,

            filterchain chain) throws ioexception, servletexception {

        req.setcharacterencoding(this.charset);

        chain.dofilter(req, resp);

    public void init(filterconfig arg0) throws servletexception {

        this.charset = arg0.getinitparameter("charset");

}

web.xml加入

    <filter>

        <filter-name>encoding</filter-name>

        <filter-class>

            org.lxh.myzngt.filter.encodingfilter

        </filter-class>

        <init-param>

            <param-name>charset</param-name>

            <param-value>utf-8</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

<filter>

        <filter-name>spring charseter encoding filter</filter-name>

            org.springframework.web.filter.charseterencodingfilter

            <param-name>encoding </param-name>

(2) get方法的處理 

tomcat對post和get的處理方法不一樣,是以過濾器不能解決get的亂碼問題 ,它需要在其他地方設定。 

打開<tomcat_home>\conf目錄下server.xml檔案,找到對8080端口進行服務的connector元件的設定部分,給這個元件添加一個屬性:uriencoding="gbk"。修改後的connector設定為: 

java代碼 

                enablelookups="false" redirectport="8443" acceptcount="100" 

                connectiontimeout="20000" disableuploadtimeout="true" 

               uriencoding="gbk" /> 

* 注意修改後重新啟動tomcat才能起作用。