Hibernate3 中一个不能查询与插入中文字符的问题解决办法

Hibernate3 中发现了一个不能查询与插入中文字符的问题 , 通过网上查阅资源 , 原来是 Hibernate3 中的一个 Bug, 最后没有办法 ,JSP2.0 技术手册中看到可以通过 Filter 来解决中文问题 , 将其代码摘录下来 , 结果发现 , 不仅 HTML 传过来的表单没有了任何中文问题 , 而且 Hibernate 的中文问题也解决了 . 下面就将整个过程描述如下 :
因为 Filter 的是起过滤的作用 , 它运行于 Servlet Service() 之前 , 所以 , 在表单还没有到达 Service() 之前会执行 Filter. 添加 Filter 的方法和我们添加 Servlet 的方法是一样的 . 都要配置 Web.xml, 下面是解决中文问题的 Web.xml 配置 :
< filter >
< filter-name > setCharacterEncoding </ filter-name >
< filter-class > wills.servlet.SetCharacterEncodingFilter </ filter-class >
< init-param >
< param-name > encoding </ param-name >
< param-value > gb2312 </ param-value >
</ init-param >
</ filter >
< filter-mapping >
< filter-name > setCharacterEncoding </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
上面的配置说明了 : 1. 定义了一个 FiltersetCharacterEncoding 它的执行路径是 : wills.servlet.SetCharaterEncodingFilter 初始化参数是 : encoding gb2312 等下我们来看它们是什么意思 . 2. 定义了对于哪些文件通过的时候执行 setCharacterEncoding 上面我们可以看出所有的相关 Jsp 也好 ,Serlet 也好等等 , 都执行 setCharacterEncoding. 下面是 setCharacterEncoding.java
package wills.servlet;
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 SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
此方法基本解决了通讯中的中文问题 , 但是在 JavaScriptXML 中行不通 , 解决的办法是 : Servlet 的第一行添加语句 request.setCharacterEncoding("utf-8"); 原因可能是 FilterStream 流的信息也进行了编码 , 所以必须将编码变成 UTF-8.
Structs-config.xmlforward 的配置中添加 redirect=”true” 要注意 , redirect 中重新定位 , 将会清除本页面范围以内的所有的变量的值. 而不用redirect则将造成表单重复递交,解决的办法是,可以在后台将表单清除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值