【Java寒假打卡】JavaWeb-响应对象response

概述

在这里插入图片描述

状态码

在这里插入图片描述

字节流响应消息

在这里插入图片描述

package com.hfut.servlet;

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
public class Servlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset=UTF-8");// 通过响应对象 设置编码格式

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

        // 定义一个消息
        String str = "你好";

        // 通过字节流输出对象  先将字符串转换为字节数组
        os.write(str.getBytes("UTF-8"));// 指定编码格式  浏览器一般都是gbk格式
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doPost(req, resp);
    }
}


字符流响应消息

在这里插入图片描述

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");// 通过响应对象 设置编码格式

        // 获取字符输出流对象
        PrintWriter writer = resp.getWriter();
        // 准备一个消息
        String str = "你好";
        // 通过字符流输出
        writer.write(str);

    }

响应图片-字节流

  • 创建字节输出流对象,关联读取的图片路径
  • 通过响应对象获取字节输出流对象
  • 循环读取和写出图片
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 通过context对象获取图片的绝对路径  通过相对路径获取绝对路径
        String realPath = getServletContext().getRealPath("/img/vue.png");
        System.out.println(realPath);

        // 创建字节输入流对象  关联图片路径  这里填写的是绝对路径 不是相对路径
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));

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

        // 循环读写
        byte[] arr = new byte[1024];
        int len;

        // 通过字节输入流读取字节到arr数组  然后通过字节输出流将字节数组写出去
        while((len = bis.read(arr)) != -1){
            os.write(arr,0,len);
        }

    }

设置缓存时间

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

在这里插入图片描述

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 通过context对象获取图片的绝对路径  通过相对路径获取绝对路径
        String news = "这是一条很火爆的新闻!";

        // 设置缓存时间  一个小时 之后的访问直接从缓存中进行访问
        resp.setDateHeader("Expires",System.currentTimeMillis() + 1 * 60 * 60 * 1000);

        // 设置编码格式
        resp.setContentType("text/html;charset=UTF-8");

        // 写出数据
        // 获取字符写出对象
        PrintWriter writer = resp.getWriter();
        writer.write(news);


    }

定时刷新技术

  • 定时刷新:过了指定时间之后,页面自动进行跳转

在这里插入图片描述

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String news = "您输入的用户名或者密码有误,3秒之后自动跳转到登录页面";

        // 设置编码格式
        resp.setContentType("text/html;charset=UTF-8");

        // 写出数据
        PrintWriter writer = resp.getWriter();
        writer.write(news);

        // 设置定时刷新  三秒之后自动进行跳转  前面需要添加虚拟目录
        resp.setHeader("Refresh","3;URL=/test/register.html");
    }

请求重定向

在这里插入图片描述

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet2执行");

        // 设置请求域共享数据
        req.setAttribute("uesrname","zhangsan");

        // 设置重定向  虚拟路径 + 资源路径  url地址栏会进行跳转
        resp.sendRedirect(req.getContextPath() + "/servlet1");
    }

文件下载

在这里插入图片描述

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 创建字节输入流对象 关联读取的文件  通过相对路径获取绝对路径
        String realPath = getServletContext().getRealPath("/img/vue.png");
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));// 获取字节输入流

        // 设置响应头支持的类型
        // content-type 消息头名称 支持的类型
        // application/octet-stream  消息头参数 应用的类型为字节流
        resp.setHeader("Content-Type","application/octet-stream");

        // 设置响应头以下载方式打开附件
        resp.setHeader("Content-Dispostion","attachment;filename=vue.png");

        // 获取字节输出流对象
        ServletOutputStream outputStream = resp.getOutputStream();

        // 循环读写
        byte[] arr = new byte[1024];
        int len;

        while((len = bis.read(arr)) != -1){
            outputStream.write(arr,0,len);
        }
        // 释放资源
        bis.close();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值