servlet乱码问题

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("你看不出来我在测试你吗?");
    }

实现效果:
在这里插入图片描述

发布了48 篇原创文章 · 获赞 0 · 访问量 677

猜你喜欢

转载自blog.csdn.net/weixin_44943485/article/details/105046335