jsp传值到servlet中文编码乱码问题排查

通过前端模态框,进行插入中文的操作,发现传入数据库的值是乱码

jsp传值到servlet中文编码乱码问题排查_第1张图片

 

jsp传值到servlet中文编码乱码问题排查_第2张图片

 

jsp传值到servlet中文编码乱码问题排查_第3张图片

 

servlet源代码如下:

通过获取request域中的各个parameter,获得对应的值。

jsp传值到servlet中文编码乱码问题排查_第4张图片

经过排查后发现,问题出现在JSP传入值到servlet这段区间。

可能的问题出现在:

1.servlet接收值

2.JSP编码

3.tomcat编码

 

于是一个个进行排查

1.对servlet代码进行修改:

在doGet方法前几行加上:

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");

 

发现并不奏效

jsp传值到servlet中文编码乱码问题排查_第5张图片

 

2.对JSP的代码进行检查,将所有编码属性设置为UTF-8,并且进入eclipse,将对应的编码都改为UTF-8

jsp传值到servlet中文编码乱码问题排查_第6张图片

 

仍然不奏效,还是乱码

 

3.剩下的可能只有tomcat编码

于是通过在servlet  doGet方法中,进行编码转换:

jsp传值到servlet中文编码乱码问题排查_第7张图片

 

代码为:

            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编码。

发现有效:

jsp传值到servlet中文编码乱码问题排查_第8张图片

 

PS:想尝试通过修改tomcat安装目录的conf目录下的server.xml的属性:

jsp传值到servlet中文编码乱码问题排查_第9张图片

经尝试后发现无效。

所以暂定方案为servlet转换接收字符串编码。

你可能感兴趣的:(工作笔记,JavaWeb,JSP)