JSP+STRUTS+MSSQL的中文问题终于搞定了!!
这问题困扰了我两天了~~~做了很多测试,在网上找了很多资料,终于还是比较圆满的解决了~~~
问题的出现:
不做任何字符处理,JSP页面发送中文参数给STRUTS进行业务处理,STRUTS将参数写入到数据库(MSSQL)~此时再从数据库将刚写入的东西返回到JSP页面~~这时问题出现了……不论是写入数据库的东西,还是从数据库里读出来的东西全是乱码~~ @_@
测试的过程:
不经过数据库,直接从JSP页面读取参数后回显,仍然是乱码@_@。。
测试各种字符集,包括utf-8,iso-8859-1,gb2312,gbk,所得到的东西也全部是乱码@_@~@_@~@_@
开始从网上找资料,发现问题是出在tomcat对中文字符的没有很好的处理~网上介绍了好多种方法,其中一个也是我解决中文乱码问题的方法~~
解决方法:
自己实现一个filter放到开发包里面,然后在WEB.XML里注册,同时将数据库的访问字符格式设置成filter里定义好的格式(通用utf-8)~~就可以解决了~~~其中自己实现filter的话在TOMCAT里有现成的文章~搜索下SetCharacterEncodingFilter,就可以找到了,具体内容见下面:
[qutoe]
package cola;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;
public class SetCharacterEncodingFilter implements Filter {
protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable;
public SetCharacterEncodingFilter() {
this.encodingName = "utf-8";
this.enable = false;
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
loadConfigParams();
}
private void loadConfigParams()
{
//encoding
this.encodingName = this.filterConfig.getInitParameter("encoding");
//filter enable flag...
String strIgnoreFlag = this.filterConfig.getInitParameter("enable");
if (strIgnoreFlag.equalsIgnoreCase("true"))
{
this.enable = true;
}
else
{
this.enable = false;
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
{
if(this.enable)
{
request.setCharacterEncoding(this.encodingName);
}
chain.doFilter(request, response);
}
public void destroy()
{
}
} [/quote]
然后,在web.xml里注册,如下:<!--filter-class元素对应过滤类的包路径,这里我放在cola包下-->
<!--filter-mapping的name与filter的name属性相同,serlvet-name这个属性重要!它指定为servlet-mapping的name,这里我是用的struts,所以设置成action,即处理所有.do结尾的action-->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>cola.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name> 至此,JSP中文乱码问题可以告一段落了,相信以后应该不会碰到同样的问题了~~~
懒得去写几百年没写过的BLOG~~所以借个地方发东西~~~ |