使用filter过滤器解决编码问题

原创 2014年04月30日 11:04:20

         乱码问题在java开发中很是常见,出现场合有jsp页面显示,数据库存值取值,xml解析等。在开发中统一编码,遵守规范,是避开这些恼人问题的良方。

    一:保证页面支持中文

         页面编码建议使用UTF-8,  如在jsp页面统一使用以下文件头,这个依据具体情况使用合适的编码方式

   <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

    二:servlet

        对于POST请求可以在获取请求信息之前调用 request.setCharacterEncoding(charSet) 设置字符编码。设置的字符编码需要和页面设置的字符编码一致!如我们前面在页面中使用了utf-8,这里就应该为utf-8。

         对于GET 请求,默认情况下,request.setCharacterEncoding(charSet) 对其不适用。因为 request.setCharacterEncoding(charSet)  只能影响到请求体的编码。对于 Tomcat 服务器而言,需要修改 server.xml 文件的 Connector 节点,添加 URIEncoding 属性或 useBodyEncodingForURI 属性

	<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="80" 
	protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>

   三:过滤器

     将设置字符编码的代码放入一个过滤器中,具体实现如下:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodingFilter implements Filter {

    public EncodingFilter() {}

	public void destroy() {}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		ServletContext servletContext = filterConfig.getServletContext();
		String encoding = servletContext.getInitParameter("encoding");
		request.setCharacterEncoding(encoding);
		response.setCharacterEncoding(encoding);
		chain.doFilter(request, response);
	}

	private FilterConfig filterConfig;
	
	public void init(FilterConfig fConfig) throws ServletException {
		this.filterConfig = fConfig;
	}

}

之后需要在web.xml中配置一下

web.xml

 	<context-param>
	    <param-name>encoding</param-name>
	    <param-value>UTF-8</param-value>
	  </context-param>
	<filter>
	    <display-name>EncodingFilter</display-name>
	    <filter-name>EncodingFilter</filter-name>
	    <filter-class>com.test.filter.EncodingFilter</filter-class>
	  </filter>
	  <filter-mapping>
	    <filter-name>EncodingFilter</filter-name>
	    <url-pattern>/*</url-pattern>
	  </filter-mapping>

大部分的编码问题到以上也就结束了,但是如果碰到从别的地方接收请求,出现了乱码,又该怎么办呢?

可以用如下代码来转,

String content=new String(req.getParameter("education").getBytes("iso-8859-1"),"utf-8")
无论编码为iso-8859-1,gb2312、gbk、或是其他,getBytes("")相应的也得随着改变,可以将字符编码转成自己想要的格式


(附:微信手机端发信格式为gbk...)


过滤器解决中文编码问题

Servlet过滤器解决中文编码问题
  • jianyuerensheng
  • jianyuerensheng
  • 2015年12月28日 19:13
  • 2811

使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

前述:      在写这篇笔记之前,对笔记中的设计模式进行介绍:      本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式           (1)装饰(包装)设计模式口诀...
  • Molipc
  • Molipc
  • 2017年11月15日 12:45
  • 141

初识过滤器(Filter)-------简单的用法及用过滤器做设置编码模板

老样子,PPT先贴上,想看PPT,就看PPT,想看代码,就在下面(^-^)V   PPT内容 过虑器简介:     过虑器能对客户的请求进行预先处理,然后再将请求转发给其他web组件。     过虑器...
  • zuosixiaonengshou
  • zuosixiaonengshou
  • 2016年11月25日 21:37
  • 2344

用过滤器filter设置编码格式

代码如下: import Java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain...
  • culous
  • culous
  • 2016年10月16日 12:05
  • 981

JAVA中的使用Filter过滤器设置字符集

Filter是什么? Filter不是一个Servlet,它可以叫做Servlet链,它可以用来改变一个request,修改一个response。它虽然不能产生一个response,但可以在一个req...
  • u010066934
  • u010066934
  • 2015年07月20日 20:01
  • 3233

过滤器解决get和post方式提交的中文乱码

对于国内的程序员来说,在做项目时避免不了的问题是中文乱码问题。        如果不使用过滤器的话,在每个servlet中都要进行设置编码,如果是post请求还好,但是如果是get请求,就要手动进行...
  • hyn150
  • hyn150
  • 2017年04月19日 21:23
  • 1565

web项目中加入filter,仍然存在乱码的解决方法

做web,少不了要和乱码打交道,
  • shansusu
  • shansusu
  • 2014年09月22日 15:39
  • 830

Jsp乱码问题的基本解决方案,转码 + 过滤器 Filter

利用转码&过滤器的方式解决Jsp中常见的两种中文乱码情况.
  • hang_jian
  • hang_jian
  • 2015年09月21日 20:46
  • 1093

Servlet容器Filter的使用(Filter解决乱码问题实例)

这一切还要从乱码讲起....场景: 是这样子的,在做用户添加和修改模块的时候,做完了之后,在填写用户名的时候,如果我们输入中文的话,提交到数据库中, 发现数据库中的代码是乱码. 于是去网上查了查关于中...
  • lovesummerforever
  • lovesummerforever
  • 2013年08月12日 19:55
  • 5762

JavaWeb学习篇——使用过滤器及装饰器设计模式解决全站乱码问题

由于开发人员在Filter中可以得到代表用户请求和响应的request和response对象,因此在编程中可以使用Decorator(装饰器)模式对request、response对象进行包装,再把包...
  • empiresteven
  • empiresteven
  • 2015年11月10日 11:48
  • 969
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用filter过滤器解决编码问题
举报原因:
原因补充:

(最多只允许输入30个字)