Servlet- Response

本文介绍了Servlet中的Response对象,包括其体系结构、常用API,重点讲解了如何设置字符数据和字节数据的响应体。通过ResponseDemo2和ResponseDemo3示例展示了如何操作字符响应和字节响应。
摘要由CSDN通过智能技术生成
一、预览

介绍完Servlet-Resquest的相关内容后,接下来就是Servlet- Response的内容。读者阅读完本篇文章后将可以自如地解析请求、设置响应,完成对客户端的响应。

二、Response体系结构

Response的体系结构与Request完全一样,其中ServletResponse与HttpServletResponse都是Java官方定义的接口,ResponseFacade是Web服务器(Tomcat)的实现类。

三、常用API

Response响应分为响应字符数据与响应字节数据。

(1)字符响应

package com.byhuang.response;

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;
import java.io.PrintWriter;

/**
 * 响应字符数据:设置字符数据的响应体
 */
@WebServlet("/res2")
public class ResponseDemo2 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("res2...");
        System.out.println(resp.getContentType());
        // 数据格式 以及 编码格式
        resp.setContentType("text/html;charset=utf-8");
        // 1 获取字符输出流
        PrintWriter writer = resp.getWriter();
        writer.write("<h1>aaa</h1>");

        // 流不需要关闭
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

(2)字节响应

package com.byhuang.response;

import org.apache.commons.io.IOUtils;

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.FileInputStream;
import java.io.IOException;

/**
 * 响应字节数据:设置字节数据的响应体
 */
@WebServlet("/res3")
public class ResponseDemo3 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("res3...");

        FileInputStream fileInputStream = new FileInputStream("/Users/huangbingyi/Desktop/pic.png");

        ServletOutputStream outputStream = resp.getOutputStream();

        IOUtils.copy(fileInputStream, outputStream);

        fileInputStream.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
您可以使用ServletResponse对象来直接返回一个文件并在浏览器上显示。以下是一个简单的示例代码: ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取文件路径 String filePath = "/path/to/your/file.pdf"; // 替换为您的文件路径 // 设置响应的内容类型 response.setContentType("application/pdf"); // 设置响应的头信息,指定文件名 response.setHeader("Content-Disposition", "inline; filename=file.pdf"); // 读取文件并写入响应输出流 try (InputStream inputStream = new FileInputStream(filePath); OutputStream outputStream = response.getOutputStream()) { byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } } catch (IOException e) { e.printStackTrace(); } } ``` 在上述示例中,`doGet`方法用于处理HTTP GET请求。首先,您需要设置正确的文件路径,将其替换为您的实际文件路径。然后,通过调用`setContentType`方法设置响应的内容类型,这里使用`application/pdf`表示PDF文件。接下来,通过调用`setHeader`方法设置响应的头信息,其中`Content-Disposition`指定文件名为`file.pdf`,并将`inline`作为参数表示在浏览器上直接显示。最后,通过读取文件并将其写入响应的输出流,实现将文件内容返回给浏览器。 请注意,上述代码中使用了try-with-resources语句,以确保在完成操作后正确关闭输入和输出流。此外,还应该处理可能发生的异常情况,例如文件不存在或读取失败等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值