关于jsp页面乱码的问题
目录
今天写代码的时候发现几个乱码问题,有两个比较麻烦(对于我这种小白而言),于是看了一些资料和别人的经验,顺利解决了乱码的问题。
一、jsp提交表单后数据库乱码
1.乱码问题
很简单的一个实操作业,只有三张jsp页面:
index.jsp:显示数据库信息,通过链接跳转到edit.jsp对信息进行更改
edit.jsp:更改数据库信息,并将信息提交给save.jsp
save.jsp:将更改后的数据库信息录入数据库,重定向到index.jsp
当在edit.jsp更新数据库信息后提交给save.jsp,发现数据库的中文信息全部变成???
2.解决方法
首先我们要了解jsp页面到浏览器的编码过程
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<meta content=”text/html;charset=utf-8″ />
这里的编码格式都有,不会有问题,此时考虑数据库的编码问题,在数据库中执行下面sql语句:
SHOW VARIABLES LIKE '%colla%';
发现collation_server的value值不是utf8,于是更改为utf8,问题解决!
二、模糊查询乱码
1.乱码问题
一个信息管理系统,执行模糊查询时出现乱码
2.解决方法
首先要明白request.setCharacterEncoding()是对从request中取得的值或从数据库中取出的值进行编码,指定后可以通过getParameter()直接获得对应编码下的字符串,如果不指定,则默认使用ISO-8859-1编码。分析原因,应该是在执行第一个getParameter()的时候,Java将会按照编码分析所有的提交内容,而后续的getParameter()不再进行分析,所以setCharacterEncoding()无效。而对于get方法提交表单是,提交的内容在url中,一开始就已经按照编码分析提交内容,setCharacterEncoding()自然就无效。在Tomcat的server.xml写入URIEncoding="utf-8",解决get请求乱码问题!<Connector port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8" />
注意:在执行setCharacterEncoding()之前,不能执行任何getParameter(),并且该指定只对POST方法有效,对GET方法无效。