Response响应方法详解

2023-11-20

Response:
  • 响应:服务器把请求的处理结果告知客户端。在B/S架构中,响应就是把结果带回浏览器。
  • 响应对象:在项目中用于发送响应的对象
常用状态码:
状态码 说明
200 执行成功
302 它和307一样,都是用于重定向的状态码。只是307目前已不再使用
304 请求资源未改变,使用缓存。
400 请求错误。最常见的就是请求参数有问题
404 请求资源未找到
405 请求方式不被支持
500 服务器运行内部错误

状态码首位含义:

状态码 说明
1xx 消息
2xx 成功
3xx 重定向
4xx 客户端错误
5xx 服务器错误
字节流响应消息&乱码:
返回值 方法名 说明
ServletOutputStream getOutputStream() 获取响应字节输出流对象
void setContentType(“text/html;charset=UTF-8”) 设置响应内容类型,解决中文乱码

演示:

@WebServlet("/ResponseDemo01")
public class ResponseDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // setContentType:相当于告诉浏览器你要使用这个编码才能解析我的内容
        resp.setContentType("text/html;charset=UTF-8");
        // getOutputStream()	获取响应字节输出流对象
        ServletOutputStream ops = resp.getOutputStream();

        // 定义消息
        String s = "测试会不会乱码";
        /**
         为什么有的时候没有处理乱码,但是浏览器不会乱码
         getBytes:在字符串转成字节的时候,如果没有传递参数(编码格式),它会根据系统的编码转换,这里的系统是电脑的,比如Windows的默认就是GBK
         那就会转换成GBK格式的,如果浏览器也是GBK就不会乱码,但是如果浏览器是其它的就会乱码
         */
        ops.write(s.getBytes("UTF-8"));
    }
}
字符流响应消息:
返回值 方法名 说明
PrintWriter getWriter() 获取响应字符输出流对象
void setContentType(“text/html;charset=UTF-8”) 设置响应内容类型,解决中文乱码

演示:

@WebServlet("/ResponseDemo02")
public class ResponseDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset=UTF-8");
        // getWriter()	获取响应字符输出流对象
        PrintWriter printWriter = resp.getWriter();

        String s = "我也呵呵了";
        printWriter.write(s);
    }
}
响应图片:

步骤:

  1. 创建字节输入流对象,关联读取的图片路径
  2. 通过响应对象获取字节输出流对象
  3. 循环读取和写出图片
@WebServlet("/ResponseDemo03")
public class ResponseDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 创建字节输入流对象,关联读取的图片路径
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/itzhuzhu/Desktop/WechatIMG27.JPG"));

        // 2. 通过响应对象获取字节输出流对象
        ServletOutputStream os = resp.getOutputStream();

        // 3. 循环读取和写出图片
        byte[] bytes = new byte[1024];
        int len;

        while ((len = bis.read(bytes)) != -1) {
            os.write(bytes, 0, len);
        }
    }
}
设置缓存:

对于不经常变化的数据,可以合理设置缓存时间,避免浏览器频繁请求服务器,可以提高效率

返回值 方法名 说明
void setDateHeader(String name,long time) 设置消息头添加缓存

演示:

如果开启了缓存是可以在电脑中找到这个缓存文件的,可以看到上次访问时间和过期时间,到了过期时间才会访问服务器

@WebServlet("/ResponseDemo04")
public class ResponseDemo04 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String s = "我是测试缓存内容";
        // 设置换缓存1小时,只有第一次请求会请求服务端,后面的请求是走的缓存
        resp.setDateHeader("Expires", System.currentTimeMillis() + 1 * 60 * 60 * 1000);
        // 设置编码格式
        resp.setContentType("text/html;charset=UTF-8");
        // 写出数据
        resp.getWriter().write(s);
        System.out.println("再次访问会走我吗");
    }
}
定时刷新:

过了指定时间,页面自动跳转

返回值 方法名 说明
void setHeader(String name,String value) 设置消息头定时刷新

演示:

@WebServlet("/ResponseDemo05")
public class ResponseDemo05 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String s = "计算机被黑客窃取,正在读取数据,读取完毕自动跳转";
        resp.setContentType("text/html; charset=UTF-8");

        // 写数据
        resp.getWriter().write(s);
        // 定时刷新
        resp.setHeader("Refresh", "3;URL=/regist.html");
    }
}
请求重定向:

请求重定向:客户端的一次请求到达后,发现要借助其他Servlet实现功能

特点:

  • 浏览器地址会改变
  • 两次请求
  • 请求域对象中不能共享数据
  • 可以重定向到其他服务器

实现原理:

  • 设置响应状态码302
  • 设置响应的资源路径(响应消息头指定响应到哪里)

重定向和请求转发用哪一个?

  • 需要共享数据就转发,不需要就重定向

重定向方法:

返回值 方法名 说明
void sendRedirect(String name) 设置重定向

演示:

@WebServlet("/ResponseDemo06")
public class ResponseDemo06 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        System.out.println("ResponseDemo06执行了");
        // 设置共享数据
        req.setAttribute("username","itzhuzhu");
        // 设置重定向
        resp.sendRedirect(req.getContextPath()+"/servletDemo15");
    }
@WebServlet("/ResponseDemo07")
public class ResponseDemo07 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ResponseDemo07执行了");
        // 获取共享数据,这里会丢失共享数据
        System.out.println(req.getAttribute("username"));
    }
文件下载:
@WebServlet("/ResponseDemo08")
public class ResponseDemo08 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 获取文件路径
        String realPath = getServletContext().getRealPath("/img/首页.png");

        // 2. 把文件读到字节输入流中
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));

        // 3. 告知浏览器,以下载的方式打开(告知浏览器下载文件的MIME类型)
        /**
          Content-type:消息头名称,支持的类型
          application/octet-stream:消息头参数,应用的类型为字节流
          Content-Disposition:消息头名称,处理的形式
          attachment;filename=首页.jpg:消息头参数,以附件的形式,指定下载文件名称
          */
        resp.setHeader("Content-type", "application/octet-stream");
        resp.setHeader("Content-Disposition", "attachment;filename=首页.jpg");

        // 4. 使用响应对象的字节输出流输出到浏览器上
        ServletOutputStream os = resp.getOutputStream();
        byte[] bytes = new byte[1024];
        int len;
        while ((len = bis.read(bytes)) != -1) {
            os.write(bytes, 0, len);
        }
        bis.close();
    }
}
Response方法详解:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Response响应方法详解 的相关文章

  • Symfony2 异常响应。将 404 状态代码替换为 200

    我在 symfony2 中有一个 404 处理程序 它是一个 EventListener 对于某些 404 我会进行重定向 效果很好 对于浏览器来说 不会抛出 404 错误 new RedirectResponse newURL 该行基本上
  • 是否有 java 实用程序可以生成 http 多部分响应?

    我正在构建一个返回多部分响应的网络服务 我知道构建多部分响应的格式 如果我找不到现有的工具 我将构建自己的工具 也许我只是需要有关我的 google foo 的帮助 我发现的所有内容都是关于发布或使用多部分消息 没有关于生成多部分响应的内容
  • Python Web 服务器:如何异步处理请求

    我需要创建一个 python 中间件来执行以下操作 a 接受来自多个客户端的http get post 请求 b 修改这些请求并将其分派到后端远程应用程序 通过套接字通信 我对此远程应用程序没有任何控制权 c 接收来自后端应用程序的处理结果
  • Redis生产环境最佳实践

    欢迎关注公众号 通过文章导读关注 11来了 及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景 中间件系列笔记 和 编程高频电子书 文章导读地址 点击查看文
  • 使用 GDataXML 获取 XML 响应值

    在 HTTP Post 之后 我检索如下 xml 响应
  • 【计算机毕业设计】汽车维修保养智能预约系统

    信息数据从传统到当代 是一直在变革当中 突如其来的互联网让传统的信息管理看到了革命性的曙光 因为传统信息管理从时效性 还是安全性 还是可操作性等各个方面来讲 遇到了互联网时代才发现能补上自古以来的短板 有效的提升管理的效率和业务水平 传统的
  • Django:关闭http响应消息的控制台输出

    所以我们用 django 制作了一个应用程序 每次收到请求时它都会在控制台上打印所有这些 http 响应消息 Date String GET urlpath blah blah 200 216 Date String DELETE anot
  • 如何在 PowerShell 中解析来自 Invoke-WebRequest 的 JSON?

    当向服务器发送 GET 请求时 使用自签名证书 add type using System Net using System Security Cryptography X509Certificates public class Trust
  • 【计算机毕业设计】电影播放平台

    电影播放平台采用B S架构 数据库是MySQL 网站的搭建与开发采用了先进的java进行编写 使用了springboot框架 该系统从两个对象 由管理员和用户来对系统进行设计构建 主要功能包括 个人信息修改 对用户 电影分类 电影信息等功能
  • 【计算机毕业设计】毕业生就业管理微信小程序_lm9q0

    腾讯公司在2017年1月19日发布了一款不需要下载 不需要卸载 不需要存储的软件叫微信小程序 受到了很多人的喜欢 微信小程序自2017年发布至今 依托微信的社交属性和庞大的用户基数 已经渗透到生活的方方面面 1 微信小程序可以将基于微信平台
  • 【计算机毕业设计】宝鸡文理学院学生成绩动态追踪系统

    研究开发宝鸡文理学院学生成绩动态追踪系统的目的是让使用者可以更方便的将人 设备和场景更立体的连接在一起 能让用户以更科幻的方式使用产品 体验高科技时代带给人们的方便 同时也能让用户体会到与以往常规产品不同的体验风格 与安卓 iOS相比较起来
  • Python Scrapy并不总是从网站下载数据

    Scrapy 用于解析 html 页面 我的问题是为什么有时scrapy返回我想要的响应 但有时不返回响应 是我的错吗 这是我的解析函数 class AmazonSpider BaseSpider name amazon allowed d
  • WebDAV 返回 401 - 如何进行身份验证?

    我在使用 WebDAV 时遇到问题 我必须获取文件列表 我有这样的要求
  • 发送http响应后继续处理php

    我的脚本由服务器调用 从服务器我会收到ID OF MESSAGE and TEXT OF MESSAGE 在我的脚本中 我将处理传入的文本并使用参数生成响应 ANSWER TO ID and RESPONSE MESSAGE 问题是我正在发
  • 从 C# 中的 WebClient 读取响应标头

    我正在尝试创建我的第一个 Windows 客户端 这是我第一次发布她的文章 它将与 Web 服务 进行通信 但是我在读取返回的响应标头时遇到了一些麻烦 在我的响应字符串中 我收到了一个不错的 JSON 文档 这是我的下一个问题 但我无法 查
  • response.sendRedirect() 和 request.getRequestDispatcher().forward(request,response) 有什么区别[重复]

    这个问题在这里已经有答案了 我使用JAVA时出现页面跳转的问题 如果我使用 response sendRedirect login jsp 然后我得到这个网址 http localhost 8080 login jsp 但如果我使用 req
  • Soap 响应,XML 格式不正确,未找到 XOP 部分,使用 WSE

    我正在使用一个 Web 服务 在该服务中我发送带有附件的请求 然后我们收到来自服务器的包含各种信息的响应 我已经在另一个问题中记录了将请求放在一起的一些问题向 SOAP 请求添加附件 https stackoverflow com ques
  • 使用 jQuery 的 MediaWiki API 没有响应

    我尝试从 Wikipedia 获取一些 JSON 内容 getJSON http en wikipedia org w api php action query prop revisions rvprop content titles ti
  • 在 Angular 中处理多部分响应主体

    我在 Angular 中收到多部分响应正文 但应用程序未正确处理响应 事实证明 Angular 中的 HttpClient 无法正确解析多部分响应主体 请参阅这个问题在 GitHub 上 https github com angular a
  • 200 响应但未返回 JSON 数据 - Restangular 问题?

    使用 reangular 和存根 hub api 我可以在 Firefox RestClient 上点击此 API 并获取包含所有 JSON 数据的响应正文 但在我的应用程序中 我收到 200 但没有响应正文 内容长度甚至表明存在某些内容

随机推荐

  • 处理大并发之一 对异步非阻塞的理解

    处理大并发之一 对异步非阻塞的理解 在研究nginx和node js的时候常会遇到异步 非阻塞等 之前自己也经常使用epoll 对其同步与阻塞 异步与非阻塞有了一定的认识 现对参考资料总结下 首先讨论下使用事件驱动 异步编程的优点 充分利用
  • 记一次Elasticsearch节点状态red的整改过程

    文章目录 问题起因 Round 1 Round 2 Round 3 Round 4 总结 问题起因 自己负责审计日志模块的管理功能 同事突然对我说 写入的日志数据全部不能用了 我立即答复 回怼 不可能 说罢 还是去登录系统查看 能查出数据
  • 基于self-attention的BIGRU时间序列预测Python程序

    基于self attention的BIGRU时间序列预测Python程序 特色 1 单变量 多变量输入 自由切换 2 单步预测 多步预测 自动切换 3 基于Pytorch架构 4 多个评估指标 MAE MSE R2 MAPE等 5 数据从e
  • paddlepaddle(四)训练与预测验证

    目录 1 内置高级API封装训练 1 1使用paddle Model 封装模型 1 2用Model prepare 配置模型 1 3用Model fit 训练模型 1 4用Model evaluate 评估模型 1 5用Model pred
  • vue父子组件通信方式哪几种

    第一种 props和 emit parent vue
  • Unity打开工程时卡住的问题

    自从Unity升级了一个版本后 Unity打开工程卡住的问题越来越严重了 具体表现为 选择工程后 Unity窗口消失 但进程还在 有时候等个几分钟能出来 有时候等10分钟都不见得能出来 直观感受上看 似乎是Unity加载工程的时候某一步卡了
  • C++抽象工厂模式:Abstract Factory Pattern

    抽象工厂模式是工厂方法模式的升级版本 工厂方法模式只有一个抽象产品类 而抽象工厂模式有多个 工厂方法模式的具体工厂类只能创建一个具体产品类的实例 而抽象工厂模式可以创建多个 案例 在上一章节工厂方法模式的基础上 将披萨的各种原料生产抽象成一
  • Object-C Cocoapods

    已安装Cocoapods 为项目自动更新配置第三方SDK 在终端中操作如下 1 一般cd到 xcodeproj文件所在目录 cd 空格 路径回车 2 创建Podfile文件 pod init 3 打开Podfile文件并输入 target
  • EnableAutoConfiguration Attributes should be specified via @SpringBootApplic

    在排除数据源加载时 发现这个注解 EnableAutoConfiguration exclude DataSourceAutoConfiguration class 会飘红 这是因为在 SpringBootApplication中已经有 E
  • Qt开发入门教程-创建项目

    入门Qt开发教程 版本 QT 5 15 2 创建项目 1 工程类型选择 Qt Widgets Application 传统的c 不适合移动端开发 QtWidgets 使用QPainter依次为每个界面元素渲染 不断地重复渲染状态 每次打开都
  • 面经-Bosch博世无锡&UL美华

    工作总算有所眉目了 太多的总结暂时还没有太多心情来理清楚 先来两个面经 给可能现在或以后需要的人们1 Bosch 博世无锡柴油系统博世公司 业内的人都知道 汽车部件的巨无霸 最近几年才来到中国 虽然比起德尔福有些稍晚 但发展前景值得期待 无
  • R语言读取Excel的神器——openxlsx

    作为非程序猿的各位同志们 可能最擅长的数据整理软件或者统计软件就是 嗯 没有错 它就是集万千宠爱于一身的E X O 咳咳咳 好了 隆重推出我们的主角 Excel 事实上 Excel是个super强大的软件 基本上用它已经能完成大量的统计分析
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • 软件工程实验:银行储蓄系统

  • Eclipse 导入Maven项目,提示Project .. already exists Add a version or custom suffix using “Name template“

    今天从svn 上检出项目至本地的Eclipse workspace 工作空间 提示如下截图错误 Project already exists Add a version or custom suffix using Name templat
  • 解决方案不显示分类的

    解决方案无法显示头文件 源文件等分类 现象 正常显示 错误显示 原因 对应解决方案的filters文件里有不匹配的标签
  • 题目描述001

    题目描述001 入职后 导师会请你吃饭 你选择了火锅 火锅里会在不同时间下很多菜 不同食材要煮不同的时间 才能变得刚好合适 你希望吃到最多的刚好合适的菜 但你的手速不够快 用m代表手速 每次下手捞菜后至少要过m庙才能在捞 每次只能捞一个 那
  • 基于TensorFlow2实现的宠物识别系统(爬虫、模型训练和调优、模型部署)

    目录 开发环境 0 项目准备 1 数据集准备 2 数据预处理 3 构建模型 4 模型训练及验证 5 模型部署 6 项目地址 开发环境 作者 嘟粥yyds 时间 2023年8月25日 集成开发工具 PyCharm Professional 2
  • 关于vue.config.js中配置前端代理

    写在前边 注意开发环境的本地代理或者测试环境的代理 在部署到正式上时 一定要换成线上的IP地址 不然 数据拿不到哦 代理配置 esay mock新地址 模拟接口地址 就以第一个进行说明怎么配置和使用了 只说代理配置部分 其它不再说明 新建项
  • Response响应方法详解

    Response 响应 服务器把请求的处理结果告知客户端 在B S架构中 响应就是把结果带回浏览器 响应对象 在项目中用于发送响应的对象 常用状态码 状态码 说明 200 执行成功 302 它和307一样 都是用于重定向的状态码 只是307