码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-19 22:50:54      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

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>

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

标签:

原文地址:http://blog.csdn.net/calmreason/article/details/45133311

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!