响应response 笔记记录

  • 一、响应
    • 1. 常见状态码
    • 2. 字节流响应消息&乱码问题解决
    • 3. 字符流响应消息
    • 4. 响应图片
    • 5. 设置缓存
    • 6. 定时刷新
    • 7. 请求重定向
    • 8. 文件下载

一、响应

1. 常见状态码

2. 字节流响应消息&乱码问题解决


乱码问题解决:resp.setContentType(“text/html;charset=UTF-8”);


import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 通过字节流响应消息**/
@WebServlet("/servletDemo01")
public class ServletDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");//1. 获取字节输出流ServletOutputStream os = resp.getOutputStream();//2. 定义一个消息String str="hello";//3. 通过字节流输出os.write(str.getBytes("UTF-8"));//os.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

3. 字符流响应消息


import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** 通过字符流响应消息**/
@WebServlet("/servletDemo02")
public class ServletDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");//1. 获取字节输出流PrintWriter os = resp.getWriter();//2. 定义一个消息String str="你好";//3. 通过字节流输出os.write(str);//os.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

4. 响应图片


import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;/*** 响应图片**/
@WebServlet("/servletDemo03")
public class ServletDemo03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//通过相对路径获取绝对路径String realPath = getServletContext().getRealPath("/img/java.png");System.out.println(realPath);//1.  创建字节输入流对象,关联图片路径BufferedInputStream bis=new BufferedInputStream(new FileInputStream(realPath));//2. 通过响应对象获取字节输出流对象ServletOutputStream os = resp.getOutputStream();//3.循环读写byte [] arr=new byte[1024];int len;while ((len=bis.read(arr))!=-1){os.write(arr,0,len);}//4. 释放资源bis.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);}
}

5. 设置缓存


import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;/*** 设置缓存**/
@WebServlet("/servletDemo04")
public class ServletDemo04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String news = "hot news";//设置编码格式resp.setContentType("text/html;charset=UTF-8");//设置缓存  1小时缓存时间//当前时间为基准 +1小时resp.setDateHeader("Expires",System.currentTimeMillis()+1*60*60*1000);//1. 写出数据resp.getWriter().write(news);System.out.println("缓存访问!!!!");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

6. 定时刷新



import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 定时刷新**/
@WebServlet("/servletDemo05")
public class ServletDemo05 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String str ="输入有误,3s后刷新";//设置编码格式resp.setContentType("text/html;charset=UTF-8");//写出数据resp.getWriter().write(str);//定时刷新resp.setHeader("Refresh","3;URL=/jou/login.html");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

7. 请求重定向

请求转发和请求重定向的区别:
请求转发地址栏不会发生变化,对象中不能共享数据;
1、请求转发是服务器行为、重定向是客户端浏览器行为
2、请求转发是request对象调用方法、重定向是response对象调用方法
3、请求转发只有一次请求所以可以实现request域对象中的数据共享,而重定向是多次请求、多次响应
4、请求转发的效率要高于重定向
5、请求转发url地址栏不变,而重定向会发生变化
6、既然请求转发是服务器内部的行为,所以只能访问服务器内部资源!而重定向既然是浏览器行为,地址栏会变,所以可以访问服务器外部资源!


实验 demo6重定向demo7 共享数据为null


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 请求重定向**/
@WebServlet("/servletDemo06")
public class ServletDemo06 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("servletDemo06 running");//设置请求域共享数据req.setAttribute("username","zhangsan");//设置重定向resp.sendRedirect(req.getContextPath()+"/servletDemo07");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** 请求重定向**/
@WebServlet("/servletDemo07")
public class ServletDemo07 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("servletDemo07 running");Object username = req.getAttribute("username");System.out.println(username);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

8. 文件下载

package com.example.demo0402;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;/*** 请求重定向**/
@WebServlet("/servletDemo08")
public class ServletDemo08 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.创建字节输入流对象 关联读取的文件String realPath = getServletContext().getRealPath("/img/java.png");BufferedInputStream  bis=new BufferedInputStream(new FileInputStream(realPath));//2.设置响应头支持的类型/***  Content-Type 消息头名称   支持的类型*  application/octet-stream 消息头参数 应用类型为字节流*/resp.setHeader("Content-Type","application/octet-stream");//3.设置响应头以下载方式打开文件/*** Content-Disposition 消息头名称  处理的形式* attachment;filename=java.png  消息头参数 附件形式进行处理  指定下载文件的名称*/resp.setHeader("Content-Disposition","attachment;filename=java.png");//4. 获取字节输出流ServletOutputStream os = resp.getOutputStream();//5.循环读写byte []arr=new byte[1024];int len;while ((len=bis.read(arr))!=-1){os.write(arr,0,len);}//释放资源bis.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

【07 响应(response) 学习笔记】相关推荐

  1. 机械振动学习笔记1-3章

    Überblick 机械振动学习笔记 第1章 概论 1.1 机械振动研究的基本问题 研究振动的三要素 机械振动研究的三个基本问题 1.2 机械振动系统的力学模型与数学模型 1.3 机械振动的分类 第2 ...

  2. JavaWeb黑马旅游网-学习笔记07【旅游线路查询】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  3. Severlet、Tomcat以及前端请求响应学习笔记

    Severlet.Tomcat以及前端请求响应学习笔记 一:概念 1.什么是Severlet和Tomcat? Severlet是Sun公司制定的一套标准.是使用java语言编写的服务器端程序,用于处理 ...

  4. SilverLight学习笔记--如何解决Button不响应MouseLeftButtonDown与MouseLeftButtonUp事件的问题...

    在Silverlight 2 中的按钮不能响应MouseLeftButtonDown 和 MouseLeftButtonUp 事件,为解决此问题,我们可通过创建自定义按钮控件加以解决, 1.创建自定义 ...

  5. JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】

    Java后端 学习路线 笔记汇总表[黑马程序员] w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符. ...

  6. MySQL学习笔记07【事务、用户管理和权限管理】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  7. 【EF学习笔记07】----------加载关联表的数据 贪婪加载

    [EF学习笔记07]----------加载关联表的数据 贪婪加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entitie ...

  8. 安卓学习笔记07:事件处理、窗口跳转与传递数据

    文章目录 零.学习目标 一.三个基本控件 1.标签控件(TextView) 2.编辑框控件(EditText) 3.按钮控件(Button) 二.安卓事件处理机制 (一)安卓事件处理概述 (二)安卓事 ...

  9. 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)

    强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...

最新文章

  1. Visual Studio 2017最新版正式发布!适用于任何开发人员、平台及APP丨附下载
  2. markdown语法中的空格_Markdown语法简明教程
  3. mybatis中,collection配置后查询只显示一条记录
  4. vlookup练习_那个vlookup,我总是学不会啊
  5. 售货员的难题(codevs 2596)
  6. 深度神经网络—超参数调试
  7. python创建一个文本文件_利用python如何实现创建一个文本文件
  8. html 取色器插件,jQuery拾色器插件bigcolorpicker
  9. octobercms mysql_在Ubuntu 18.04/Debian 9上安装October CMS
  10. DAC数模转换/ADC模数转换
  11. win10控制面板快捷键_你没玩过的全新版本 Win10这些操作你知多少
  12. mtk-disp开篇:名词扫盲
  13. 前端 获取 扫码枪等扫码设备输入内容:2种方式
  14. 2022年度回忆录我在 CSDN 的这一年
  15. Linux系统中删除虚拟机,要删除利用虚拟机安装的linux操作系统,下面哪种方法不能实现删除虚拟系统?...
  16. python将列表平分
  17. GCC编译器安装与下载
  18. 达梦数据库更新License
  19. 图灵在布莱切利园的女朋友_极客参观布莱切利公园
  20. 网络协议 一 网络层( 版本、首部长度、区分服务、总长度、 标识、标志、片偏移生存时间、协议、首部校验和)

热门文章

  1. 联想集团财报:收入持续下滑,联想集团财务前景已恶化
  2. c语言读写文件 eof,C语言文件操作之EOF解析
  3. 未备案域名使用Cloudflare进行301重定向
  4. 大脑将会代替开发者的键盘!人类和 AI 能够“双向奔赴”吗? | 近匠
  5. 爬虫实战系列(十一):Win10下手机爬虫工具appium的安装与测试
  6. 1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数。
  7. java 接收表情_怎样有java socket实现发送接受表情类似QQ详细点代码
  8. 什么是JavaScript
  9. 《曾国藩传》 董丛林 (做人要学曾国藩, 做事要学张居正)
  10. 如果AIGC继续发展,你相信哪个世界?