J2EE乱码问题的解决方式

本文介绍了解决J2EE项目中乱码问题的方法。针对少量参数可通过特定转换解决,对于多个参数建议使用过滤器统一处理。通过配置web.xml文件和创建过滤类,可以为整个应用设置统一的字符编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乱码是j2ee中一个比较常见的问题。遇到一两个问题的情况下,可以用new String(request.getParameter(xxx).getBytes("ISO-8859-1"),"UTF-8")来解决。遇到多的情况下,就最好用过滤器。

过滤器只需要注意2个地方即可——类和web.xml

1.在web.xml上面的发布如下:

<fileter>
	<!-- 类名 -->
	<filter-name>SetCharsetEncodingFilter</filter-name>
	<!-- 类的路径 -->
	<filter-class>SetCharacter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>utf-8</param-value>
	</init-param>
	<filter-mapping>
		<filter-name>SetCharsetEncodingFilter</filter-name>
		<!-- 设置所有的文件遇到过滤器都要被拦截 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</fileter>

 

2、过滤类

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 SetCharacter implements Filter {
	protected String encoding = null;
	protected FilterConfig filterConfig = null;
	protected boolean ignore = true;
	public void init(FilterConfig arg0) throws ServletException {
		this.encoding = arg0.getInitParameter("encoding");
		String value = arg0.getInitParameter("imnore");
		if (value == null) {
			this.ignore = true;
		} else if (value.equalsIgnoreCase("true")) {
			this.ignore = true;
		} else if (value.equalsIgnoreCase("yes")) {
			this.ignore = true;
		}
	}

	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		if (ignore || (arg0.getCharacterEncoding() == null)) {
			String encoding = selectEncoding(arg0);
			if (encoding != null)
				arg0.setCharacterEncoding(encoding);
		}
		arg2.doFilter(arg0, arg1);
	}

	private String selectEncoding(ServletRequest arg0) {
		return (this.encoding);
	}

	public void destroy() {
		this.encoding = null;
		this.filterConfig = null;
	}

}

 

在web.xml文件中,以下语法用于定义映射:

1、以“/”开头和以“/*”结尾的是用来做路径映射。

2、以前缀“*.”开头的是用来做扩展映射。

3、以“/”是用来定义default servlet映射。

4、剩下的都是用来定义详细映射。比如:/aa/bb/cc.action

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值