02.Response

Response介绍

HttpServletResponse对象,通过它的方法可以设置HTTP响应消息的内容
在Servlet API中,定义了一个HttpServletResponse接口,它继承自ServletResponse接口,专门用来封装HTTP响应消息。由于,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。
通俗来说,Response对象通过设置响应码,响应头,响应体等这些东西,可以向客户端返回数据,如:文件,图片,文件等;

一个HTTP响应包括哪些东西

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Response设置响应行

setStatus(int status);  200  302  304
sendError(int sc);  	404  500

sendError方法有tomcat默认的错误提示页面,setStatus只是设置状态码,没有提示页面;

Response设置响应头

响应头是一组键值对,可以通过response对象的setHeader(String s,String s1)方法设置响应头。

resp.setHeader("Content-Type","text/html;charset=UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Refresh", "5;url=/login/index.html");//5秒后跳转index页面

Response的重定向:

  1. 通过设置响应头完成
response.setStatus(302);
response.setHeader("Location","/javaweb/login");
  1. 通过sendRedirect方法
response.sendRedirect("/Location/login");

Response设置响应体

Response响应文字及乱码

getWriter()
response通过getWriter方法可以获得字符流,向response的缓冲区写数据。然后tomcat将response缓冲区中的字符返回给浏览器

resp.getWriter().println("第" + number + "访问该网站的人");

如果输出的字符是中文的话,前台页面展示会出现乱码,原因是response缓存区的编码是ios-8859-1,通过response的setCharacterEncoding()方法可以将response缓存区的编码设置为想要的编码格式

resp.setCharacterEncoding("utf-8");

结果发现仍然为乱码,那是因为很多浏览器默认的编码格式是GBK,除了可以手动的修改浏览器的编码格式之外,还可以指定浏览器解析页面所用的格式

response.setContentType("text/html;charset=UTF-8");
resp.setHeader("Content-Type","text/html;charset=UTF-8");

这两种方法都可以,setContentType()方法也包含setCharacterEncoding()方法的功能,所以只需设置response.setContentType(“text/html;charset=UTF-8”)即可

Response响应文件数据

response除了可以响应文字以外,还可以响应图片,音频,视频等二进制文件。因为这些不能用字符流进行处理,所以我们需要用字节流。

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

该方法可以获得一个输往response缓冲区的字节输出流,可以往里输入文字和文件数据

Response字节流输出文字

字节流输出中文文字可以不必考虑字符编码,不会出现乱码

ServletOutputStream outputStream = response.getOutputStream();
byte[] bytes = "中国".getBytes();
outputStream.write(bytes);
outputStream.close();

Response字节流输出文件数据

输出文件数据需要一个输入流,如何获取文件的输入流在上一节已经讲了,用ServletContext或类加载器获取,然后将输入流中的数据拷贝到输出流,以图片输出为例:
1.web/img目录下有一张a.jpg图片
在这里插入图片描述
2.在servlet中编写代码

//获取输入流  在web目录下的采用ServletContext对象获取
        InputStream is = this.getServletContext().getResourceAsStream("img/a.jgp");
        //获取输出流
        ServletOutputStream os = resp.getOutputStream();
        //设置缓存的传输数组
        byte[] bytes = new byte[1024];
        //偏移量
        int len;
        //进行拷贝
        while ((len= is.read(bytes))!=-1){
    
    
            os.write(bytes,0,len);
        }
        is.close();
        os.close();

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lglglglglgui/article/details/108483912
02