首页 > 其他分享 >Response对象-响应字符数据

Response对象-响应字符数据

时间:2023-04-21 19:22:11浏览次数:34  
标签:字符 字节 fis writer request Response 响应 response

Response响应数据

1. response将字符数据返回到浏览器

需要两步:
1.通过response对象获取字符输出流PrintWriter writer = resp.getWriter();
2.通过字符输出流写数据:writer.writer(“aaa”);

案例
浏览器中打印出字符

/**
 * 响应字符数据:设置字符数据的响应体
 */
@WebServlet("/resp3")
public class ResponseDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //1. 获取字符输出流
        PrintWriter writer = response.getWriter();
		 writer.write("aaa");
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

还可以返回html字符串,并且浏览器能解析出来,如下:

PrintWriter writer = response.getWriter();
//content-type,告诉浏览器返回的数据类型是HTML类型数据,这样浏览器才会解析HTML标签
response.setHeader("content-type","text/html");
writer.write("<h1>aaa</h1>");

注意: 一次请求响应结束后,response对象就会被销毁,所以不要手动关闭流

提醒 如果要返回一个中文字符串你好,需要设置响应数据编码为utf-8

//设置响应的数据格式及数据的编码
response.setContentType("text/html;charset=utf-8");
writer.write("你好");

2. response响应字节数据

需要将字节数据写回到浏览器,我们需要两个步骤:
通过response对象获取字节输出流:servletOutputStream outputStream = resp.getOutputStream();
通过字节输出流写数据:outputStream。write(字节数据);
1.返回一个图片文件到浏览器,如下:

/**
 * 响应字节数据:设置字节数据的响应体
 */
@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 读取文件
        FileInputStream fis = new FileInputStream("d://a.jpg");
        //2. 获取response字节输出流
        ServletOutputStream os = response.getOutputStream();
        //3. 完成流的copy
        byte[] buff = new byte[1024];
        int len = 0;
        while ((len = fis.read(buff))!= -1){
            os.write(buff,0,len);
        }
        fis.close();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

上述代码中,对于流的copy的代码还是比较复杂的,所以我们可以使用别人提供好的方法来简化代码的开发,具体的步骤如下:
pom.xml添加依赖

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

调用工具类方法

//fis:输入流
//os:输出流
IOUtils.copy(fis,os);

优化代码之后:

/**
 * 响应字节数据:设置字节数据的响应体
 */
@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 读取文件
        FileInputStream fis = new FileInputStream("d://a.jpg");
        //2. 获取response字节输出流
        ServletOutputStream os = response.getOutputStream();
        //3. 完成流的copy
      	IOUtils.copy(fis,os);
        fis.close();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

标签:字符,字节,fis,writer,request,Response,响应,response
From: https://www.cnblogs.com/yzx-sir/p/17341489.html

相关文章

  • java 字符串切割
    1、根据特定的字符,切割整个字符串放置到数组中。1Stringstr="这是,一个,数字,1234567";2String[]split=str.split(",");3for(inti=0;i<split.length;i++){4System.out.println(split[i]);5} 2、字符串......
  • win32api添加按钮与响应
    #ifdefined(UNICODE)&&!defined(_UNICODE)#define_UNICODE#elifdefined(_UNICODE)&&!defined(UNICODE)#defineUNICODE#endif#include<tchar.h>#include<windows.h>#defineIDB_ONE3301#defineIDB_TWO3......
  • 字符串插值替换器,替换字符串中的插值表达式(简单实现,仅用于短文本)
    packagecom.geostar.geoonline.tools.config_write.util;importlombok.Builder;importlombok.Getter;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.regex.Pattern;/***字符串插值替换器,......
  • Response
    1.HttpServletResponse概述:在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpSe......
  • C# 数组输出拼接字符串以及拼接字符串转数组
    staticvoidTest(){int[]arr=newint[]{1,2,3,4,5,6};stringstr=string.Join(",",arr);//数组转拼接字符串int[]arr_new=Array.ConvertAll(str.Split(','),p=>Convert.ToInt32(p));......
  • .NET实现解析字符串表达式
    一、引子·功能需求我们创建了一个School对象,其中包含了教师列表和学生列表。现在,我们需要计算教师平均年龄和学生平均年龄。//创建对象Schoolschool=newSchool(){Name="小菜学园",Teachers=newList<Teacher>(){newTeacher(){Name="波老......
  • 正则表达式获取字符串中电话号码的方式
    我一开始是想找数字1然后切出11位数字这样但是newbing给了一个简单了当的方法正则表达式直接切11位数字分享出来以供参考/***@Description:正则表达式寻找字符串中的电话号码*@paramstring有11位电话存在的字段*@author:@NewBing**/......
  • iOS:响应链的原理
    iOS中不是所有的对象都能响应的,只有继承UIResponder的对象才能进行响应处理事件,称之为响应者对象。常见的响应者对象有:UIView,UIViewController,UIApplication响应链的流程:1.当产生某一个触摸事件的时候,这个触摸事件回添加到UIApplication管理的事件队列中。2.UIAppli......
  • 【前端可视化】ECharts 实现响应式图表
    响应式图片的实现步骤:1.图表只设置高度,宽度设置为100%或不设置。2.监听窗口的resize事件,即监听窗口尺寸的变化(需节流)。3.当窗口大小改变时,然后调用echartsInstance.resize改变图表的大小。另外需要注意的是:在容器节点被销毁时,可以调用echartsInstance.dispose以销毁e......
  • js 实现字符串反转
    1.情景展示在JavaScript当中,如何实现字符串倒转(倒置、反转)?2.具体分析数组Array实现元素倒转,有专门的函数reserve(),我们直接调用即可。为了使用这个功能,我们可以把字符串先拆分成数组,然后,再调用反转函数,最后再拼成字符串。3.解决方案以字符串:Marydon的博客园为例进行说明。......