记一次javaweb中乱码问题的解决

 

在编写登陆案例的时候,出现乱码问题,总结现在学习到的关于javaweb中编码处理的知识。

1. jsp页面编码

  <%@page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" %>

  * pageEncoding : JSP页面的字符编码,默认值:iso-8859-1。

  * contentType : 源文件本身和响应正文的字符编码。

  * pageEncoding存在的话,以它为主,不存在寻找contentType,两者都不存在,采用默认值。

 注意:在我们使用<form>表单提交数据的时候,表单中的数据也采用了utf-8编码

2.servlet获取jsp编码问题

  对于post请求:

  * request.setCharacterEncoding("utf-8"); : 服务器端servlet采用utf-8编码接受数据(如果form采用post请求,但是servlet不调用该方法,会导致表单数据是utf-8编码,但是servlet会使用iso-8859-1对其进行编码,导致乱码现象)

  对于get请求:

  * 调用request.setCharacterEncoding()无效。需要手动转换:

   > String newStr = new String(request.getParameter("userName").getBytes("iso-8859-1"), "utf-8");

3.登陆案例乱码问题原因:

  JSP页面采用UTF-8编码,但是doPost()获取参数时并没有采用utf-8,而是采用iso-8859-1编码,导致乱码。

  两种解决方法:

  * Servlet -> doPost() -> request.setCharacterEncoding("utf-8");

  * UserDao.java -> void add(User user) -> String userName = new String(user.getUserName().getBytes("iso-8859-1"), "utf-8");

                    > ele.addAttribute("userName", userName);

 

posted @ 2019-06-22 11:21  gogoog  阅读(181)  评论(0编辑  收藏  举报