HttpServletResponse接口

HttpServletResponse简介

Web服务器收到客户端的http请求,会针对每一次请求,创建一个用于代表响应的HttpServletResponse类型的response对象,开发者可以将要向客户端返回的数据封装到response对象中。

HttpServletResponse向客户端发送数据

ServletResponse 接口有一个方法 getWriter(),用于获取到一个输出流对象 PrintWriter,
该输出流对象是专门用于向客户端浏览器中输出字符数据的,称为标准输出流。

可以看下这个PrintWriter这个类 他继承了 Write类,所以我们也可以用Write类中的方法了!

下面是向客户端返回数据(注册成功) 那些要配的 自己配置:

 

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");    //设置指定编码来解析响应数据
        String user = request.getParameter("user");
        String[] hobby = request.getParameterValues("hobby");
        
    //-----------------------下面开始回传数据:
        PrintWriter out = response.getWriter();    //首先从response中取得PrintWriter对象
        out.print("您好: " + user + ", 恭喜您注册成功! <br>");        //往客户端输出数据
        out.print("感谢您的注册! 请登录!");                        //往客户端输出数据
        out.close();                    //关闭流
        
    }

允许上面代码后 会出现乱码:

??? 1346174610, ???????? <br>??????? ????
甚至 <br> 这个标签都没解析 ,那么怎么解决:

HttpServletResponse响应乱码的解决方案

响应时会产生乱码的原因是在 HTTP 协议中规定,默认响应体的字符编码为ISO-8859-1。所以,若要解决乱码问题,就需要修改响应体的默认编码。一般情况下,有两种方式可以修改:

  • 方法一:HttpServletResponse 的 setCharacterEncoding(“utf-8”)方法,将编码修改为utf-8,然后再通过setHead(“Content-type”,”text/html;charset=UTF-8″);方法告诉客户端浏览器的编码方式。
    代码:
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-type", "text/html;charset=UTF-8");
  • 方法二:为了简便操作,开发者可以直接使用HttpServletResponse 的 setContentType(“text/html;charset=utf-8”)方法,告诉浏览器的编码方式,该方法相当于方法一种的两条代码(方法1)。
    代码:
response. setContentType("text/html;charset=UTF-8");
  • 结局后的代码(两种方式 看注释!)
protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");    //设置指定编码来解析响应数据
        String user = request.getParameter("user");
        String[] hobby = request.getParameterValues("hobby");
        
    //-----------------------下面开始回传数据:
        
        response.setCharacterEncoding("utf-8");        //把响应体用指定的编码来指定 
//        response.setHeader("Content-type", "text/html;charset=UTF-8");    //跟浏览器将用UTF-8编码解析 一定别写错他的内容!! 
        response.setContentType("text/html;charset=UTF-8");            //这一句话顶setHeader的两句话!!
        
        //注意你设置编码时 一定要在取得PrintWriter对象之前!!!因为你取得PrintWriter对象了 在设置是没用的!
        
        
        
        PrintWriter out = response.getWriter();    //首先从response中取得PrintWriter对象
        out.print("您好: " + user + ", 恭喜您注册成功! <br>");        //往客户端输出数据 <br>也会被浏览器解析为换行的
        out.print("感谢您的注册! 请登录!");                        //往客户端输出数据
        out.close();                    //关闭流
        
    }

 注意:

  • 1.
//        response.setHeader("Content-type", "text/html;charset=UTF-8");    //跟浏览器将用UTF-8编码解析 一定别写错他的内容!! 
        response.setContentType("text/html;charset=UTF-8");            //这一句话顶setHeader的两句话!!
  • 2.
//注意你设置编码时 一定要在取得PrintWriter对象之前!!!因为你取得PrintWriter对象了 在设置是没用的!


作者:咸瑜​