记一次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);