从jsp界面的表单form中获取输入信息,然后经servlet插入数据库,这时候在servlet输出测试时发现中文无乱码,而插入数据库中的数据却是乱码,烦了一上午,终于解决了,现将解决方法写下来备忘。
1、写一个过滤器:
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 CharacterEncodingFilter implements Filter {
private FilterConfig config;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
String encoding = config.getInitParameter("encoding");
if (encoding != null && !encoding.equals("")) {
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
}
2 在web.xml中添加下面语句
<!-- 定义一个过滤器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>com.adhd.filter.CharacterEncodingFilter</filter-class>
<!-- 配置初始化参数 -->
<init-param>
<param-name>encoding</param-name>
<!-- 设置encoding的值为gb2312 -->
<param-value>gb2312</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
重新部署下工程,就OK了。原因是编码类型不一致,jsp与servlet之间,servlet与sqlserver之间等,该过滤器的作用就是将所有编码格式都设置成gb2312