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) ,设置响应内容的类型,即Content-Type的值,并且响应内容为文本类型时还能指定字符集编码,如text/html;charset=UTF-8


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


发送响应消息体的方法


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);
    }
}
目录
相关文章
|
3月前
|
缓存 安全 UED
网站图片缓存设置不当可能会导致哪些问题?
【10月更文挑战第18天】网站图片缓存的合理设置至关重要,需要综合考虑图片的性质、更新频率、用户体验、服务器性能等多方面因素,以避免出现上述各种问题,确保网站的正常运行和用户信息的安全。
|
3月前
|
缓存 监控 定位技术
|
9天前
|
缓存 NoSQL Java
springboot怎么使用rides缓存方法的返回值 完整例子
通过上述步骤,我们成功地在 Spring Boot 项目中集成了 Redis 缓存,并通过注解的方式实现了方法返回值的缓存。这种方式不仅提高了系统的性能,还简化了缓存管理的复杂度。使用 Spring Boot 的缓存注解和 Redis,可以轻松地实现高效、可靠的缓存机制。
46 23
|
4月前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
116 15
Android 系统缓存扫描与清理方法分析
|
3月前
|
存储 缓存 监控
网站的图片资源是否需要设置缓存?
【10月更文挑战第18天】网站的图片资源一般是需要设置缓存的,但要根据图片的具体特点和网站的需求,合理设置缓存时间和缓存策略,在提高网站性能和用户体验的同时,确保用户能够获取到准确、及时的图片信息。
|
3月前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
89 10
|
3月前
|
Web App开发 缓存 UED
如何设置浏览器的缓存策略?
【10月更文挑战第23天】通过合理地设置浏览器的缓存策略,可以在提高网页性能、减少网络流量的同时,确保用户能够获取到最新的内容,从而提升用户体验和网站的性能优化效果。
203 4
|
3月前
|
缓存 监控 NoSQL
Redis 缓存穿透的检测方法与分析
【10月更文挑战第23天】通过以上对 Redis 缓存穿透检测方法的深入探讨,我们对如何及时发现和处理这一问题有了更全面的认识。在实际应用中,我们需要综合运用多种检测手段,并结合业务场景和实际情况进行分析,以确保能够准确、及时地检测到缓存穿透现象,并采取有效的措施加以解决。同时,要不断优化和改进检测方法,提高检测的准确性和效率,为系统的稳定运行提供有力保障。
75 5
|
4月前
|
缓存 NoSQL 算法
解决Redis缓存雪崩问题的有效方法
解决Redis缓存雪崩问题的有效方法
64 1
|
5月前
|
存储 缓存 NoSQL
解决Redis缓存击穿问题的技术方法
解决Redis缓存击穿问题的技术方法
95 2