【Servlet】5:详解响应对象 HttpServletResponse

目录

| 响应对象 HttpServletResponse接口

HttpServletResponse的基本概述

响应对象返回 String 给Browser & 中文乱码问题

响应对象返回 int 给Browser

响应对象 解析HTML标签后 返回给Browser


本文章属于后端全套笔记的第三部分

(更新中)【后端入门到入土!】Java+Servlet+JDBC+SSM+SpringBoot+SpringCloud 基础入门_m0_57265007的博客-CSDN博客一篇文章,后端入门到入土。包含 Java基础+高级、MySQL、JDBC、Servlet、SSM、SpringBoot、SpringCloud、项目 的笔记。https://blog.csdn.net/m0_57265007/article/details/127962617?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127962617%22%2C%22source%22%3A%22m0_57265007%22%7D

| 响应对象 HttpServletResponse接口


HttpServletResponse的基本概述

HttpServletResponse是什么?

  • HttpServletResponse来自于Servlet规范中,是一个接口

  • 实现类由 HTTP服务器(Tomcat)提供

  • HttpServletResponse的实现类对象被称为响应对象

主要功能?

  • 将doGet/doPost方法执行结果写入到【响应体】交给浏览器(即把执行结果以二进制形式写入到【响应体】)

  • 设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字,图片,视频,命令】

  • 设置响应头中【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求


<a name="响应对象输出不乱码中文"></a>

响应对象返回 String 给Browser & 中文乱码问题

语法

  • 若输出的内容包含中文,则必须对resp对象使用setContentType进行内容类别的指定、编码规则。且需要注意:必须在获取PrintWriter对象前设置!

  • 使用PrintWriter对象 out 进行输出

  • out的 write是按照字节输出,一般用于String。而对于int类型,则需要使用out的按字符输出的print方法。推荐使用print

resp.setContentType("text/html;charset=utf-8");  //设置content-Type中的字符规则为UTF-8,以保证显示到网页为中文
PrintWriter out = resp.getWriter();   //获取输出流
out.write("从前台收到的参数值为" +   strValue);   //write方法,是字节输出流的方法(输出int的时候会按照ASCII码输出)

示例

    <form action="/web3/test1" method="post">
      <input type="text" name="p1">
      <input type="submit" value="测试响应对象返回String">
    </form>

 

public class TestResponse extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //接收测试参数
        req.setCharacterEncoding("utf-8");  //对POST请求体进行UTF-8编码
        String strValue = (String)req.getParameter("p1");  //获取参数值

        //测试返回String
        resp.setContentType("text/html;charset=utf-8");  //设置content-Type中的字符规则,以保证显示到网页为中文
        PrintWriter out = resp.getWriter();
        out.write("从前台收到的参数值为" +   strValue);
    }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <servlet>
        <servlet-name>testWeb1</servlet-name>
        <servlet-class>TestResponse</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>testWeb1</servlet-name>
        <url-pattern>/test1</url-pattern>
    </servlet-mapping>

</web-app>

 


响应对象返回 int 给Browser

语法

  • out的 write是按照字节输出,一般用于String。而对于int类型,则需要使用out的按字符输出的print方法

  • 在实际开发过程中,都是通过out.print()将真实的数据写入响应体的

示例

web.xml、index.jsp等配置,和上小节一模一样。

public class TestResponse extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset=utf-8");  //设置content-Type中的字符规则,以保证显示到网页为中文
        PrintWriter out = resp.getWriter();

        //测试返回 int
        out.write("测试返回int");
        out.write(50);  //按字节输出,得到的是50的ASCII码对应的字符,输出的是2
        out.print(50);  //按字符输出,得到的是原本的50
    }
}

响应对象 解析HTML标签后 返回给Browser

语法

  • 如果输出语句内含有HTML标签,若直接输出,则由于在默认情况下,conten-type属性的值“text” content-type=“text”

    此时采用的是【文本编译器】对响应体的二进制数据进行解析,无法将其解析为HTML命令而导致原封不动地把HTML标签输出了出来

  • 若想让浏览器解析HTML标签后再显示出来,则可以使用 response.setContentType("text/html");

    指定浏览器采用【编译器】对【响应体中的二进制内容】进行编译处理

  • 这个语法在 响应对象输出不乱码中文 中也使用过

response.setContentType("text/html");

示例

public class TestResponse extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //测试返回String
        resp.setContentType("text/html;charset=utf-8");  //设置content-Type中的字符规则,以保证显示到网页为中文、按HTML标签和text文本编译
        
        //测试输出编译好的HTML标签
        out.print("第一行");
        out.print("</br>");
        out.print("第二行");
    }
}

猜你喜欢

转载自blog.csdn.net/m0_57265007/article/details/128005880