zoukankan      html  css  js  c++  java
  • 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>
    
  • 相关阅读:
    我的知识库(4) java获取页面编码(Z)
    知识库(3)JAVA 正则表达式 (超详细)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts
    某人总结的《英语听力的技巧 》,挺搞的
    我的知识库(5)java单例模式详解
    构建可扩展程序
    SerialPort (RS232 Serial COM Port) in C# .NET
    Python学习笔记——String、Sequences
    UI题目我的答案
    jQuery学习系列学会操纵Form表单元素(1)
  • 原文地址:https://www.cnblogs.com/yu011/p/13727463.html
Copyright © 2011-2022 走看看