0
点赞
收藏
分享

微信扫一扫

HttpServletResponse概述、常见状态码、发送状态码的方法、设置缓存时间及文件下载


目录

​​一、HttpServletResponse概述​​

​​二、常见状态码​​

​​三、发送状态码、发送响应头的方法​​

​​发送状态码的方法:​​

​​发送响应头的方法:​​

​​四、发送响应消息体的方法及请求重定向​​

​​发送响应消息体的方法​​

​​请求重定向​​

​​五、设置缓存时间及设置定时刷新​​

​​设置缓存时间​​

​​设置定时刷新​​

​​六、文件下载​​

一、HttpServletResponse概述

● HttpServletResponse接口继承自ServletResponse接口
● 用于封装HTTP响应消息
● HTTP响应消息分为响应行,响应头,响应体三部分,所以HttpServletResponse中定义了向客户端发送响应状态码、响应消息头、响应消息体等方法

二、常见状态码

状态码

说明

200

成功

302

重定向

304

请求资源未改变,使用缓存

400

请求错误,常见于请求参数错误

404

请求资源未找到

405

请求方式不支持

500

服务器错误

三、发送状态码、发送响应头的方法

发送状态码的方法:

void setStatus(int status) ,设置响应消息的状态码,并生成响应状态行
void sendError(int sc) ,发送表示错误信息的状态码
void sendError(int sc,String message) ,设置表示错误的状态码外还向客户端发送一条错
误信息,其中包含message的内容

发送响应头的方法:

1、void addHeader(String name,String value) ,设置响应头指定名称字段的值,会覆盖掉原来该名称字段的值
2、void setHeader(String name,String value) ,与addHeader()方法功能相同,但是不会覆盖原来的值而是添加一个值
3、void setContentLength(int len) ,设置响应头的实体内容的大小,单位是字节
4、void setContentType(String type)

四、发送响应消息体的方法及请求重定向

发送响应消息体的方法

1、ServletOutputStream getOutputStream() ,用于获取字节输出流对象
2、PrintWriter getWriter() ,用于获取输出流对象
3、注意:在使用这些输出流时可能会出现乱码的情况,所以在使用输出流时可以使用
resp.setContentType("text/html;UTF-8");

请求重定向

● 请求重定向是指服务器接收到客户端请求后,可能由于某些条件限制,不能访问请求指定的资源,让客户端去访问另一个指定的资源
● HttpServletResponse定义了一个sendRedirect()方法,用于生成304响应状态码和Location响应
头,从而通知客户端重新访问Location响应头中指定的URL
● 方法: void sendRedirect(String location)
● location可以使用相对路径重定向到同一个Web服务器的其他Servlet,也可以绝对路径重定向到其他Web服务器
● 注意:重定向时会重新生成另一个HttpServletRequest对象,所以不能实现Servlet的共享数据,如果需要共享数据那么可以使用请求转发

五、设置缓存时间及设置定时刷新

设置缓存时间

● 对于不经常变化的数据,可以设置缓存时间减少频繁访问服务器,提高效率
● 使用 void setDateHeader(String name,long time) 方法来设置响应头
● 范例: resp.setDateHeader("Expires",System.currentTimeMills+1*60*60*1000) ,设置缓
存时间为1个小时

设置定时刷新

定时刷新是指设置经过某个时间后自动跳转到某个页面
使用 void setHeader(String name,String value) 方法
范例: resp.setHeader("Refresh","3;URL=/虚拟目录/demo.html");

六、文件下载

实现在浏览器中下载文件的功能,步骤如下:

1、创建字节输入流,关联读取的文件

2、设置响应消息头支持的类型

3、设置响应消息头以下载方式打开资源

4、通过响应对象获取字节输出流对象

5、循环读写

6、释放资源

范例:

@WebServlet("/ServletDownloadDemo")
public class ServletDownloadDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse
resp) throws ServletException, IOException {
//1. 创建字节输入流,关联读取的文件
String realPath = getServletContext().getRealPath("/img/ServletLive.png");
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));

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

//3. 设置响应消息头以下载方式打开资源
//Content-Disposition是消息头名称,表示处理形式
//attachment;filename=ServletLive.png是消息头参数,表示附件形式处理,
filename表示文件名称
resp.setHeader("Content-Disposition","attachment;filename=ServletLive.png");

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

//5. 循环读写
byte[] bytes = new byte[1024];
int len;
while((len = bis.read(bytes)) != -1){
outputStream.write(bytes,0,len);
}

//6. 释放资源
bis.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse
resp) throws ServletException, IOException {
doGet(req, resp);
}
}

举报

相关推荐

0 条评论