icode icode
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

iqqcode

保持对技术的探索实践与热爱
首页
  • Android学习

    • 📁基础内容
    • 📺AndroidCore
    • 🎨Android-UI
    • 🏖️Components
    • 📊Fragment
    • 🔗网络操作
    • 🔏异步机制
    • 📦数据存储
    • 🗃️Gradle
  • 学习笔记

    • 『框架』笔记
    • 『Kotlin』笔记
    • 《Vue》笔记
    • 《Git》学习笔记
    • 『Bug踩坑记录』
  • ListView
  • RecyclerView
  • ViewPager
  • Java笔记

    • 🟠JavaSE
    • 🟢JavaWeb
    • 🔴JavaEE
    • ⚪JavaTopic
    • 🍳设计模式
  • 计算机基础

    • 📌计算机网络
    • 🔍数据结构
    • 📦数据库
    • 💻OS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 关于

    • 📫关于我
  • 收藏

    • 网站
    • 资源
    • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaSE

  • JavaWeb

    • BootStrap

    • Cookie和Session

    • JavaScript

    • JDBC

    • JQuery

    • JSON

    • JSP

    • Maven

    • Servlet

      • Servlet执行原理
      • Servlet生命周期
      • Servlet体系结构
      • Servlet之HTTP请求
      • Request对象
      • 登录案例
      • BeanUtils
      • Response响应
        • ServletContext对象
        • IDEA导入Eclipse SSM项目参考
      • Tomcat

      • XML

    • JavaEE

    • JavaTopic

    • 设计模式

    • 计算机基础

    • Java后端
    • JavaWeb
    • Servlet
    iqqcode
    2021-06-17
    目录

    Response响应

    【Request对象回顾 (opens new window)】

    # 1.Http响应消息

    响应消息:服务器端发送给客户端的数据

    数据格式:

    • 响应行

    • 响应头

    • 响应空行

    • 响应体

    响应字符串格式

    HTTP/1.1 200 OK

    Content-Type:text/html;charset=UTF-8

    Content-Length:101

    Date:Wed,06 Jun 2019 07:08:42 GMT




    <html>  
     <head>  
     <title>Servlet</title>  
     </head>  
     <body>  
     <h1>Hello Servlet</h1>  
     </body>  
    </html>
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 响应行

    1.组成:协议/版本响应状态码状态码描述

    2.响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态

    • 状态码都是3位数字

    下面是常见的HTTP状态码:

    • 200 - 请求成功
    • 301 - 资源(网页等)被永久转移到其它URL
    • 404 - 请求的资源(网页等)不存在
    • 500 - 内部服务器错误

    HTTP状态码分类

    HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。

    HTTP状态码共分为5种类型:

    分类 分类描述
    1xx 服务器收到客户端请求,需要请求者继续执行操作,发送1xx状态码
    2xx 成功,操作被成功接收并处理
    3xx 重定向,需要进一步的操作以完成请求
    4xx 客户端错误,请求路径没有对应的资源
    5xx 服务器错误,服务器在处理请求的过程中发生了错误

    代表:

    • 404(请求路径没有对应的资源)
    • 405:请求方式没有对应的doXxx方法
    • 500:服务器错误,服务器在处理请求的过程中发生了错误

    1581412423766

    菜鸟教程:HTTP状态码 (opens new window)

    # 响应头

    1.格式:

    头名称:值

    2.常见的响应头:

    • Content-Type:服务器告诉客户端本次响应体数据格式,以及编码格式

    • Content-disposition:服务器告诉客户端以什么格式打开响应体数据

      • n-line:默认值,在当前页面内打开
      • attachment;filename=xxx:以附件形式打开响应体,文件下载

    # 响应空行

    起分隔作用

    # 响应体

    服务器给客户端传输的的数据

    # 2.Response对象

    Response功能:设置响应消息

    设置响应行

    格式:HTTP/1.1 200 OK

    设置状态码

    setStatus(int sc)

    设置响应头

    setHeader(string name,string value)

    设置响应体

    1.获取输出流

    • 字符输出流:Printuriter getwriter()

    • 字节输出流:``Servletoutputstream getoutputstream()`

    2.使用输出流,将数据输出到客户端浏览器

    # 重定向

    1. 重定向Demo

    Tomcat虚拟路径设置/ServletResponse

    1581431735418

    ServletRedirect

    package com.iqqcode.web.servlet;
    
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @Author: Mr.Q
     * @Date: 2020-02-11 20:57
     * @Description:重定向
     * 访问ServletRedirect会自动跳转到ServletRedirect_Test
     */
    @WebServlet("/ServletRedirect")
    public class ServletRedirect extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
            response.setCharacterEncoding("UTF-8");
            System.out.println("访问ServletRedirect...");
            //1.设置状态码为302
            //response.setStatus(302);
            //2.设置头为location
            //response.setHeader("location","/ServletRedirect_Test");
    
            //动态获取虚拟目录
            String contextPath = request.getContextPath();
            
            //简单的重定向方法
            response.sendRedirect(contextPath + "ServletRedirect_Test");
    
            //共享数据测试
            request.setAttribute("msg","Test response");
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40

    ServletRedirect_Test

    package com.iqqcode.web.servlet;
    
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @Author: Mr.Q
     * @Date: 2020-02-11 20:57
     * @Description:重定向
     */
    @WebServlet("/ServletRedirect_Test")
    public class ServletRedirect_Test extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
            response.setCharacterEncoding("UTF-8");
            System.out.println("访问ServletRedirect_Test...");
    
            //共享数据测试
            Object object = request.getAttribute("msg");
            System.out.println(object);
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    1581427012203

    2. 重定向的特点

    forward 和 redirect 区别

    重定向(redirect ):

    • 地址栏==发生==变化(自动跳转到重定向的资源路径)
    • 重定向可以访问==其他==站点(服务器)的资源(自定义任意资源站点)
    • 重定向是两次请求(不能使用request对象来共享数据)

    请求转发的特点(forward ):

    • 浏览器地址栏路径==不发生==变化(仍在当前请求路径)
    • 只能转发到==当前==服务器内部资源中
    • 转发是一次请求(请求范围是在一个request域中)

    ServletRedirect

    ​ //共享数据测试 ​ request.setAttribute("msg","Test response");

    ServletRedirect_Test Object object = request.getAttribute("msg"); System.out.println(object);

    不能使用request对象来共享数据,两次请求,为null

    1581431429352

    3.虚拟路径设置

    规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出

    • 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
      • 建议虚拟目录动态获取:request.getcontextPath()
    • 给服务器使用:不需要加虚拟目录
      • 转发路径

    # 获取字符输出流

    乱码产生原因:服务器和客户端编解码格式不一致

    设置编码,防止中文乱码

    (ISO-8859-1)设置流的默认编码为GBK

    ​ response.setCharacterEncoding("UTF-8");

    告诉浏览器,服务器发送的消息体数据的编码,建议浏览器使用该编码解码

    ​ response.setHeader("content-type","text/html;charset=UTF-8");

    简化形式设置编码

    ​ response.setContentType("text/html;charset=UTF-8");

    1.获取字符输出流

    ​ PrintWriter out = response.getWriter();

    2.输出数据

    ​ out.write("

    你好 Response

    ");

    1581475033945

    # 获取字节输出流

    设置编码,防止中文乱码

    ​ response.setContentType("text/html;charset=UTF-8");

    1.获取字节输出流

    ​ ServletOutputStream out = response.getOutputStream();

    2.输出数据

    ​ out.write("

    你好 Response

    ".getBytes());

    编辑 (opens new window)
    上次更新: 2021/06/27, 10:49:09
    BeanUtils
    ServletContext对象

    ← BeanUtils ServletContext对象→

    最近更新
    01
    匿名内部类
    10-08
    02
    函数式接口
    10-08
    03
    ARouter-Kotlin踩坑
    10-05
    更多文章>
    Theme by Vdoing | Copyright © 2021-2023 iqqcode | MIT License | 备案号-京ICP备2021028793号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×