通过前端模态框,进行插入中文的操作,发现传入数据库的值是乱码
servlet源代码如下:
通过获取request域中的各个parameter,获得对应的值。
经过排查后发现,问题出现在JSP传入值到servlet这段区间。
可能的问题出现在:
1.servlet接收值
2.JSP编码
3.tomcat编码
于是一个个进行排查
1.对servlet代码进行修改:
在doGet方法前几行加上:
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
发现并不奏效
2.对JSP的代码进行检查,将所有编码属性设置为UTF-8,并且进入eclipse,将对应的编码都改为UTF-8
仍然不奏效,还是乱码
3.剩下的可能只有tomcat编码
于是通过在servlet doGet方法中,进行编码转换:
代码为:
String name = new String(request.getParameter("qname").getBytes("ISO-8859-1"),"UTF-8");
System.out.println(name);
int question_type_id = Integer.parseInt(request.getParameter("qtype"));
System.out.println(question_type_id);
String content = new String(request.getParameter("qcontent").getBytes("ISO-8859-1"),"UTF-8");
System.out.println(content);
String answer = new String(request.getParameter("qanswer").getBytes("ISO-8859-1"),"UTF-8");
System.out.println(answer);
tomcat默认编码是ISO-8859-1,我们要通过String的有参构造函数,将其转换为UTF-8编码。
发现有效:
PS:想尝试通过修改tomcat安装目录的conf目录下的server.xml的属性:
经尝试后发现无效。
所以暂定方案为servlet转换接收字符串编码。