篆体字网 > 知识库

response对象

来源:篆体字网 2024-01-04 21:25:33 作者:篆字君

0|1一、response响应过程

在去发送一个请求时, 会找到tomcat引擎

引擎会找到对应的web应用,并且会创建request对象和response对象

找到应用后, 会执行应用的web.xml再去根据url-patten的内容创建Servlet对象

并且会调用Servlet对象的service方法,并且把创建的request对象和response对象传入到方法当中

拿到response对象后, 自己可以往响应当中写入一些自己给客户端的内容,通过response.getwrite().wirte("写的内容")方法进行写入

写的内容,是存到一个response缓冲区当中

当方法执行结束之后, tomcat就会从response缓冲区当中取出数据

取出你的数据同时,它自己还会自动的往里面添加一些服务器相关的信息进去,所以响应给浏览器时, 可以看到除了自己写的内容, 还会有一些服务器相关的信息

流程图:

0|1二、学习响应

学习通过response设置响应行,响应头 ,响应体。

1. 设置响应行response.setState(Int code)

2. 设置响应头

add 代表添加新的内容addHeader(String name,String value)addIntHeader(String name,int value)addDateHeader(String name,date)

示例:

添加两个相同的 nameprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.addHeader("name", "Lucy");response.addHeader("name", "Mark");}

set 代表设置已经存在的内容setHeader(String name,String value)setIntHeader(String name,int value)setDateHeader(String name,Date value)

重定向

1. 什么是重定向

到服务器当中去找servlet1

servlet1当中没有这个资源,告诉你去找servlet2

再去发送一个请求到servlet2

2. 状态码

302

3. 特点

要访问两次服务器

第一次访问是人为的去访问

第二次是自动的访问

浏览器地址栏已经发生变化

4. 设置重定向

设置响应码

设置响应头protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setStatus(302); response.setHeader("location", "/servlet/firstServlet");}

5. 封装的重写向

每次都要写状态码,和location比较麻烦

就给封装了一个方法response.sendRedirect("/servlet/firstServlet")

6. 定时刷新重定向response.setHeader("refresh","5;url=http://www.baidu.com")

5代表5秒

url的值为5秒后要去跳转的地址

3. 设置响应体

1. 通过write方法来写response.getWriter().wait("要写的内容");

默认情况下写的中文内容会乱码

把写的内容存到缓存区中使用的是ISO8859

ISO8859不支持中文,所以会乱码

在存之前设置可以设置存放的编码response.setCharacterEncoding("UTF-8")

主动告知浏览器使用的是utf-8编码response.setHeader("Content-Type", "text/html;charset=UTF-8");

示例

上面代码只需要写第二句就行,tom看到设置了为utf-8的编码,它在存的时候也会使用utf-8的编码。使用封装写法:response.setContentType("text/html;charset=UTF-8");

2. 通过OutPutStream来写

FileInputSteam

read()方法读取一个字节

read(byte[] b)

一次读取多个字节,并存放到数组b中

上面是一次一滴一滴给你,这种是一次装一水桶再给你

读取全部的数据FileInputStream in = new FileInputStream("a.txt");// 一次性读取多个字节放到数组当中byte[] buffer = new byte[5];// 每次取多少个字节int len = 0;while ((len = in.read(buffer)) >0) { System.out.println(len); System.out.println(Arrays.toString(buffer)); System.out.println(new String(buffer, 0, len));}in.close();

FileOutputSteam

write()

一次性写一个字符

write(buffer)

一个性写多个字符

write(buffer,0,len)

一次性写指定个数的字符protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //向浏览器写一张图片 String path = this.getServletContext().getRealPath("code.png"); //加载这张图片 FileInputStream in = new FileInputStream(path); //获取一个输出流 ServletOutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while((len = in.read(buffer)) != -1) { System.out.println(len); System.out.println(Arrays.toString(buffer)); out.write(buffer, 0, len); }}

response注意点

getWrite()和getOutputSteam不能同时调用

4. 下载功能

需求:把服务器当中的文件直接下载到电脑当中。

下载文件

1.直接使用a标签来去下载

有些内容会浏览器自动解析

浏览器不能解析的文件才会被下载

a文件下载 code.png

a.mp4

c.rar

function change(obj) { obj.src = "/Servlet/CheckCodeServlet?time=" + new Date().getTime();}

上一篇:fat32和ntfs的区别

下一篇:secretary-general

相关阅读