• Servlet之HttpServletResponse


    概述

    1、HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar。
    2、HttpServletResponse接口实现类由Http服务器负责提供。
    3、HttpServletResponse接口负责将doGet/doPost方法执行结果写入到【响应体】交给浏览器。
    4、开发人员习惯于将HttpServletResponse接口修饰的对象称为【响应对象】。

    主要功能:

    1、将执行结果以二进制形式写入到【响应体】。
    2、设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字、图片、视频、命令】。
    3、设置响应头中【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求。

    代码示例

    package com.zyh.contrller;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.PrintWriter;
    
    public class OneServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
            //执行结果
            String result = "Hello world!";
            /*响应对象将结果写入到响应体*/
            //1、通过响应对象,向Tomcat索要输出流
            PrintWriter out = response.getWriter();
            //2、通过输出流,将执行结果以二进制形式写入到响应体
            out.write(result);
            /*---至此doGet执行完毕,Tomcat将响应包推送给浏览器*/
    
        }
    }
    

    在这里插入图片描述

    package com.zyh.contrller;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class TwoServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            int i = 50;
            PrintWriter out = response.getWriter();
            /*out.write(i);*/
            /*------浏览器显示2,而不是50------*/
            /*
            * 问题描述:
            * 浏览器接收到数据是2,不是50。
            * 问题原因:
            * out.writer方法可以将【字符、字符串、ASCII码】写入到响应体。
            * 50对应的ASCII码是2。
            * 解决方案:
            * 通过out.print()将真实数据写入到响应体
            */
            out.println(i);
        }
    }
    

    在这里插入图片描述

    package com.zyh.contrller;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class ThreeServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //既有文字信息,又有HTML
            String result = "aaa</br>bbb</br>ccc</br>";
            //包含中文,要设置charset=UTF-8
            String result2 = "烧烤</br>火锅</br>啤酒</br>";
            //设置响应头
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            out.println(result);
            out.println(result2);
            /*
            * String result = "aaa</br>bbb</br>ccc</br>";
              PrintWriter out = response.getWriter();
              out.println(result);
            * 响应结果依然是:
            * aaa</br>bbb</br>ccc</br>
            * 没有执行HTML命令。
            *
            * 原因:
            * 浏览器在接收到响应包之后,根据响应头中(content-type)属性的值,
            * 来采用对应编译器对响应体中二进制内容进行编译处理。
            * 默认的情况下,content-type属性的值为"text"
            * (content-type="text")。
            * 此时浏览器将会采用文本编译器对响应体二进制数据进行解析。
            *
            * 解决办法:
            * 在得到输出流之前,通过响应对象对响应头中
            * content-type属性进行重新赋值,
            * 指定浏览器采用正确编译器。
            */
        }
    }
    

    在这里插入图片描述

    package com.zyh.contrller;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class FourServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*
            * 浏览器在接收到响应包之后,
            * 如果发现响应头中存在Location属性,
            * 自动通过地址栏向Location指定网站发送请求。
            * sendRedirect方法远程控制浏览器请求行为。
            * 请求行为:请求地址、请求方式、请求参数。
            */
            String result = "http://www.baidu.com";
            //通过响应对象,将地址赋值给响应头中Location属性
            response.sendRedirect(result);
        }
    }
    

    在这里插入图片描述
    跳转到百度首页:
    在这里插入图片描述

    <?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>OneServlet</servlet-name>
            <servlet-class>com.zyh.contrller.OneServlet</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>TwoServlet</servlet-name>
            <servlet-class>com.zyh.contrller.TwoServlet</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>ThreeServlet</servlet-name>
            <servlet-class>com.zyh.contrller.ThreeServlet</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>FourServlet</servlet-name>
            <servlet-class>com.zyh.contrller.FourServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>OneServlet</servlet-name>
            <url-pattern>/one</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>TwoServlet</servlet-name>
            <url-pattern>/two</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>ThreeServlet</servlet-name>
            <url-pattern>/three</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>FourServlet</servlet-name>
            <url-pattern>/four</url-pattern>
        </servlet-mapping>
    </web-app>
    
  • 相关阅读:
    接口测试框架——第五篇-测试用例和运行用例
    接口测试框架——第四篇-url、excel内容等
    flex布局
    JSON 对象 与 字符串 互转
    nginx 拒绝本地ip访问
    supervisord
    工作中小玩意
    nginx 反向代理
    php获取当月天数及当月第一天及最后一天
    Homebrew 备忘
  • 原文地址:https://www.cnblogs.com/yu011/p/13727463.html
Copyright © 2020-2023  润新知