天天看点

中文过滤器

现在将常见的乱码问题分为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才能起作用。