Servlet POST方法设置编码格式UTF-8(防止中文乱码,统一设置)

servlet的两个重要对象response和request分别代表返回客户的页面和接收来自客户的页面。这里面的字符内容往往涉及到不同的编码格式。

这里面编码格式的不同主要产生于如下几个地方:

1 js

2 jsp

3 Java source(编译器设置)

4 Web容器

5 HTML

上面每个地方都会有编码格式,为了支持中文字符,比较常见的做法就是都设置为UTF-8模式。

其中,response和request作为servlet对象的两个成员变量,其设置UTF-8是通过这两个对象的同名方法实现的。

setCharacterEncoding("UTF-8")

通常servlet在Web项目中jsp页面通过调用java类的方法来使用后台类提供的数据。这个在Struts2中用action表示,action就是一个java类,继承了BaseAction。 此类拥有request成员对象和response成员对象。

如果每个action类都要单独设置request和response对象的编码格式,是繁琐的。可以通过filter来统一设置。

filter接口有一个需要实现的方法doFilter,这个方法会拦截所有的servlet。从而可以对访问和反馈中的任何一个request和response进行设置。

步骤:

(1)实现filter

package 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;
import javax.servlet.http.HttpServletRequest;

public class PageEncodingFilter implements Filter {

    private String encoString = "UTF-8";
    protected FilterConfig filterConfig;

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        this.encoString = null;
    }

    @Override
    public void doFilter(ServletRequest srequset, ServletResponse sResponse,
            FilterChain filterChain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        HttpServletRequest request = (HttpServletRequest)srequset;
        request.setCharacterEncoding(this.encoString);
        sResponse.setCharacterEncoding(this.encoString);
        System.out.println("requset().getCharacterEncoding(======PageEncodingFilter()====="+srequset.getCharacterEncoding());
        System.out.println("response().getCharacterEncoding()======PageEncodingFilter()====="+sResponse.getCharacterEncoding());
        filterChain.doFilter(srequset,sResponse);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // TODO Auto-generated method stub
        this.filterConfig = filterConfig;
        if(filterConfig.getInitParameter("encoding")!=null)
        {
            this.encoString = filterConfig.getInitParameter("encoding");
        }
    }

}

(2)配置filter

在web.xml中添加filter的配置

    <!-- 编码UTF-8过滤器  袁伟伟加-->
    <filter>
        <filter-name>Encoding</filter-name>
        <filter-class>filter.PageEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
时间: 2024-10-21 23:12:01

Servlet POST方法设置编码格式UTF-8(防止中文乱码,统一设置)的相关文章

httpclient 4.3 psot方法上传文件与参数 中文乱码解决

废话不多说,直接上有码的! 1 package httpclient; 2 3 import java.io.File; 4 import java.nio.charset.Charset; 5 6 import org.apache.http.Consts; 7 import org.apache.http.Header; 8 import org.apache.http.HttpEntity; 9 import org.apache.http.client.methods.Closeable

InterliJ Idea 设置,解决读取配置文件中文乱码问题

InterliJ Idea 设置,解决读取配置文件中文乱码问题,简单粗暴有效 勾选最下面那个钩钩,这样在配置文件里写入中文的时候,实际保存的时候是经过转码的,这种方式能够兼容所有平台,包括Mac.windows .Linux

设置 Oracle,Sqlplus,Linux 设置为UTF8 专治中文乱码 ,查看表的创建过程

[本文谢绝转载原文来自http://990487026.blog.51cto.com] 思想: 1,设置Linux字符集 为UTF8编码 2,设置Oracle字符集 为UTF8编码 3,设置sqlplus客户端环境 为UTF8编码 4,如果是在Windows使用CRT/Xshell远程工具,请设置软件编码为UTF8[略...] 1,先设置oracle为UTF8 [[email protected] ~]$ sqlplus /nolog SQL> conn /as sysdba; SQL> sh

Netbeans8.1设置Consola字体并解决中文乱码问题

netbeans是php非常好用的ide,并且还是免费的!但是好多字体不支持中文,会显示如下乱码: 解决方法如下: 通过修改jre的配置文件成功解决了这个问题. 1. 进入jdk安装目录下/jre/lib文件夹,找到fontconfig.properties.src,拷贝为 fontconfig.properties ,修改此文件. sequence.monospaced.GBK=chinese-ms936,alphabetic,dingbats,symbol,chinese-ms936-ext

[转]Netbeans8.0设置Consola字体并解决中文乱码有关问题

在Netbeans8.0上开发php,设置字体为Consola后,发现中文显示是乱码的,经过修改jre的配置文件成功解决了这个问题. 1. 进入jdk安装目录下/jre/lib文件夹,找到fontconfig.properties.src,拷贝为fontconfig.properties,修改此文件. 找到: sequence.monospaced.GBK=chinese-ms936,alphabetic,dingbats,symbol,chinese-ms936-extb monospaced

CentOS6.5解决中文乱码与设置字符集

[ CleverCode发表在csdn博客中的原创作品,请勿转载,原创地址:http://blog.csdn.net/clevercode/article/details/46377577] 1)说明: Windows的默认编码为GBK,Linux的默认编码为UTF-8.在Windows下编辑的中文,在Linux下显示为乱码.为了解决此问题,修改Linux的默认编码为GBK. 2)查看支持的字符集: #  locale -a 3) 安装英文版默认的字符集配置为: # cat /etc/sysco

Codeblocks中文乱码解决方法。

Codeblocks中文乱码解决方法: 特别提示:出现中文乱码情况才执行以下操作,未出现请勿随意修改!!!! 打开Codeblocks -> 设置 -> 编辑器: 然后点击 Encoding settings -> 选择编码 -> 选择UTF-8 -> 确定: 点击设置 -> 编译器: 点击Other compiler options - > 在空白处输入 -finput-charset=UTF-8 -fexec-charset=GBK 点击确定 -> 随意

mysql使用utf8中文乱码解决方法

最近,我在做一个项目的部署,这个项目是已nginx为前端代理两个tomcat的节点,通过mysql-proxy代理访问两台主从的mysql数据库. 整个项目搭建部署完成,进行测试,发现打开网页出现中文乱码.好吧,我进行修改. 开始以为是mysql数据库配置有问题,查看mysql的配置文件my.conf,内容如下: [mysqld] datadir=/usr/local/mysql/data socket=/tmp/mysql.sock user=mysql skip-character-set-

idea 控制台输出 中文乱码 解决方法

1.tomcat输出到控制台(console)出现中文乱码,设置Run/Debug Configuration中设置environment variables 来解决. Idea=>Run=>Edit Configuration,弹出的对话框中,在Startup/Connection 中Run中添加environment variables JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8.如下图所示: 2.对于maven构建的项目,由于idea中maven的配置