JSP解决中文乱码问题
一、程序说明
1.数据库:mysql
2.开发环境:tomcat7.0+windows7+myeclipse9.0
3.解决问题:解决jsp中文乱码问题
二、基本流程
三、运行界面
1.用户注册界面
2.JQuery表单验证
3.提交post信息
4.数据库信息
四、程序的主要代码
1.字符过滤器(CharacterFilter.java)
1 public class CharacterFilter implements Filter { 2 String encoding = null ; // 声明字符编码 3 @Override 4 public void destroy() { 5 encoding = null ; // 销毁过滤器对象时,同时将字符编码值变为空 6 } 7 @Override 8 public void doFilter(ServletRequest request, ServletResponse response, 9 FilterChain chain) throws IOException, ServletException { 10 if (encoding != null ){ 11 request.setCharacterEncoding(encoding); // 设置request的编码格式 12 response.setContentType( " text/html; charset= " + encoding); // 设置response字符编码 13 } 14 chain.doFilter(request, response); 15 } 16 @Override 17 public void init(FilterConfig filterConfig) throws ServletException { 18 encoding = filterConfig.getInitParameter( " encoding " ); // 获取初始化参数 19 } 20 } 2.web.xml配置
1 < filter > 2 < filter-name > CharacterFilter </ filter-name > 3 < filter-class > com.swyma.md5.filter.CharacterFilter </ filter-class > 4 < init-param > 5 < param-name > encoding </ param-name > 6 < param-value > UTF-8 </ param-value > 7 </ init-param > 8 </ filter > 9 < filter-mapping > 10 < filter-name > CharacterFilter </ filter-name > 11 < url-pattern > /* </ url-pattern > 12 </ filter-mapping > 3.数据库连接类(请特别注意下url)
1 public class DBCon { 2 private static Connection conn = null ; 3 public static Connection getConn(){ 4 try { 5 Class.forName( " com.mysql.jdbc.Driver " ); // 加载数据库连接驱动 6 String user = " root " ; // 用户名 7 String pwd = " 123 " ; // 密码 8 String url = " jdbc:mysql://localhost:3306/md5?useUnicode=true&characterEncoding=utf-8 " ; // 数据库连接url 9 conn = DriverManager.getConnection(url, user, pwd); // 获取连接 10 } catch (Exception e) { 11 e.printStackTrace(); 12 } 13 return conn; 14 } 15 } 4.数据库mysql
DROP TABLE IF EXISTS `md5`.`tb_user`; CREATE TABLE `md5`.`tb_user` ( `id` int ( 11 ) NOT NULL AUTO_INCREMENT, `name` varchar ( 20 ) NOT NULL , `pwd` varchar ( 40 ) NOT NULL , `sex` varchar ( 5 ) NOT NULL , `age` int ( 11 ) NOT NULL , `createTime` datetime NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8; 五、个人总结
1.首先我想说说我的一些感悟吧:
其实这个中文乱码问题早在去年暑假学jsp的时候就解决过,但是由于没有及时总结,程序又不知道什么给我删除掉了,结果呢,我花了一天多时间才把它重新整回来,代
价太惨了,所以总结很重要。如果朋友你看到,请现在开始学会总结吧。
2.这个是简单的jsp解决中文乱码问题。
3.解决关键:一是CharacterFilter.java,字符过滤器,将jsp页面编码统一为utf-8;
二是DBCon.java中url的useUnicode=true&characterEncoding=utf-8这句话,一定要加上,不然也一样会出现乱码的。
4.解决过程:
1)一开始我只是加了个字符过滤器,然后以为就可以了,然后不管我怎么调试,结果还是乱码。然后我在网上找了些材料,感觉characterFilter又不会错啊,但是事与愿
违啊,无奈又得一步步的调试。
2)可能是由于自己的搜索能力不强,我查了好多资料,但是基本上都是加个CharacterFilter就可以的,但是我这系统它就是不行。
3)最后就靠自己的回忆吧,想起了这个url,有点幸运解决问题吧。
5.问题是解决了,但是还是感觉不是很完善一样,因为我在部署的时候有时会出现java.lang.NoClassDefFoundError: Filter这个错误,我就觉得奇怪了。如果有网友和我遇到的问题一样或者有好的解决方案,希望能指导一下。