public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 告诉浏览器,返回的是html页面,而且是以utf-8编码的response.setContentType("text/html;charset=utf-8");//request.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();String name = request.getParameter("name");/**其实servlet默认是以ISO-8859-1解码中文,这个肯定会出现乱码,因为浏览器就是以utf-8编码后传给服务器的;*name.getBytes("ISO-8859-1")这是以ISO-8859-1对错误的Unicode编码进行编码,重新获得utf-8编码,即字节数组;*new String(name.getBytes("ISO-8859-1"), "utf-8")这步是以utf-8重新解码得到正确的Unicode编码*正确的Unicode编码才能输出正确的中文字符*/String name2 = new String(name.getBytes("ISO-8859-1"), "utf-8");double salary = Double.parseDouble(request.getParameter("salary"));int age = Integer.parseInt(request.getParameter("age"));System.out.println("name:"+name2);System.out.println("salary:"+salary);System.out.println("age:"+age);
}
当然也可以这样子:
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");//这就是让servlet以utf-8解码参数值,那么就可以直接得到正确的中文值了request.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();String name = request.getParameter("name");double salary = Double.parseDouble(request.getParameter("salary"));int age = Integer.parseInt(request.getParameter("age"));System.out.println("name:"+name);System.out.println("salary:"+salary);System.out.println("age:"+age);
}