get请求中出现乱码问题
测试条件:
myservlet代码:
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用的是post方法");
response.getWriter().write("你看不出来我在测试你吗?");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用的是get方法");
String name = request.getParameter("name");
System.out.println(name);
response.getWriter().write(name);
}
}
HTML代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="test" method="get">
<input type="text" name="name" value="">
<input type="submit" value="login">
</form>
</body>
</html>
在输入框中输入中文:
提交后页面显示和控制台显示:
解决办法:
1、获取字符串之后使用new String(name.getBytes(“iso-8859-1”),“utf-8”)
实现代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用的是get方法");
String name = request.getParameter("name");
String str = new String(name.getBytes("iso-8859-1"),"utf-8");
System.out.println(str);
}
实现效果:
2、设置request的编码格式,同时在server.xml中添加useBodyEncodingForURI=true的属性
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用的是get方法");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("gbk");
String name = request.getParameter("name");
System.out.println(name);
response.getWriter().write(name);
}
还需要在tomcat目录下的conf下的server.xml进行修改,修改配置如下
添加useBodyEncodingForURI="true"
实现效果:
3、在server.xml中添加URIEncoding="utf-8"
修改server.xml为如下配置:
添加代码URIEncoding="utf-8"
代码实现:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用的是get方法");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("gbk");
String name = request.getParameter("name");
System.out.println(name);
response.getWriter().write(name);
}
实现效果:
post请求中出现乱码问题
测试前提:
Myservlet代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用的是post方法");
response.getWriter().write("你看不出来我在测试你吗?");
}
HTML代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="test" method="post">
<input type="text" name="name" value="">
<input type="submit" value="login">
</form>
</body>
</html>
测试效果:
解决办法:
修改为如下代码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("调用的是post方法");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("gbk");
response.getWriter().write("你看不出来我在测试你吗?");
}
实现效果: