response对象

本文详细介绍了HTTP响应消息的组成,包括响应行、响应头和响应体,并着重讲解了Response对象的使用,如设置状态码、响应头以及如何进行重定向。此外,还讨论了ServletContext对象的概念、获取及功能,包括共享数据和获取文件真实路径。最后,通过案例分析展示了如何将文件以附件形式打开,涉及到Content-Disposition响应头的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

        本篇博客主要说明的是关于服务器响应数据发送到客户端用到的response对象。首先会从http的响应消息说起,然后就是response对象;最后是ServletContext对象。


一、Http的响应消息

        响应消息指的是服务器发送数据给客户端。在http的响应消息中,主要分为四个部分。和请求头还是比较对应的上的。

        响应行:格式->http/1.1 200 ok -> 协议名称/版本1 状态码 状态码描述

                对于状态码,根据开头即可以猜到它的功能:

                1xx:这种是服务器问客户端你的数据发送完成了么?

                2xx:代表发送成功;

                3xx:主要看两个比较经常使用的。

                        302:代表重定向,使用setStute可以设置。但是重定向有更好的方法;

                        304:代表本地缓存,可以减小服务器压力;

                4xx:代表客户端出现了错误。

                        404:访问的资源路径出错;

                        405:访问的方式没有对应的方法,比如我的<form>标签action为post,但是我没写doPost就会出现405错误。

                        500:代表服务器端出现错误,通常是

        响应头:

                格式:头名称:值

                比较典型的几个响应头:

                        Content-Type:一般这里面的写的是:"text/html;charset=utf-8";text/html代表响应消息的格式Mime是text/html;charset=utf-8代表将浏览器解码方式设置为utf-8;服务器告诉客户端本次响应体数据格式以及编码格式

                        Content-disposition:两个参数:

                                in-line:默认值,代表直接解析;

                                attachment,filename=xxx:设置为这个之后,内容将会以附件的形式打开,也就是有一个下载提示框提示你下载;       

        响应空行:分隔响应头与响应体

        响应体:响应体中可以包含很多标签元素,他就是服务器传过来的数据;

二、response对象

1.功能

        response的功能主要就是设置响应消息。在此处提到的响应消息一看就懂了吧。不算响应空行,有三种消息需要设置。

        1.响应行

               HTTP/1.1 200 OK

                一看响应头就只能设置状态码:setStatu(int num);

        2.响应头

                Content-Type: text/html;charset=UTF-8
                Content-Length: 101
                Date: Wed, 06 Jun 2018 07:08:42 GMT

                一般来说,响应头就长这样,在响应头中,设置的方法时

                resp.setHeader(String name,String value),name就是上面那三个,value就自己看着办吧。

        3.响应体

                设置响应体,就需要使用输入输出流了。步骤:

                1.获取输出流对象;

                        字符输出流:PrintWriter getWriter()

                      字节输出流:ServletOutputStream getOutputStream()

                2.输出数据;

int len = 0;Byte[] bytes = new Byte[1024];while((...)){pw.write(bytes,0.len);}

                上面这一行纯粹是属于不知道怎么删除这个代码段才写的。

2.几个案例以及补充内容

1.重定向

        正常来说,重定向就是客户端请求数据,服务器没有;服务器跟你说哪个url有发给你,然后客户端再去找。需要进行的操作有,设置状态码为302,发送目标url给你。但是有一个重定向的方法;

        response.sendRedirect("/day15/responseDemo2");

        单词不会写,是复制过来的,但是就是这个意思。

        这里面提一下关于重定向与转发的区别;

        转发(forward):1.地址栏的url不会发生变化;2.他是一次请求;3.只能访问当前服务器的资源;

        重定向(rederic):1.地址栏的url会发生变化,并且是人家告诉你的;2.两次请求;(不能通过request共享数据)3。能访问别的服务器上的数据,只要你敢给网址;

        然后提一下文件路径的写法:分为绝对路径和相对路径,一般来说推荐写绝对路径。

                绝对路径:能获得唯一资源。如:http://localhost/day15/responseDemo2 /day15/responseDemo2;

                规则:看清楚是给谁用的:如果是服务器内部自己使用的,那么就是/a.txt,不需要添加虚拟目录;如果是传给客户端的,那么就需要加上虚拟目录:/day16/a.txt;使用虚拟目录的话,别给写死了,使用request.getContextPath()动态获取虚拟目录。

                相对路径:通过相对路径,不一定能获取到唯一资源;

                 一般使用.开头:./代表当前目录下;../代表上一级目录,因此需要分辨出来目录结构比较复杂。

2.服务器发送字节流到客户端

        这个案例比较简单,就不分析了。但是在这里面需要补充一些关于乱码的问题。

        resp.setContentType("text/html';charset=utf-8");相当于setheader();

3.写验证码

        验证码写出来不难,但是也没必要记住。

三、ServletContext对象

1.概念

        ServletContext,代表整个web应用,与服务器程序(Tomcat)之间进行通信。他的概念很大的,就算是共享数据都是全部都能获取。

2.获取

        1.通过request获取:request.getServletContext();

        2.通过HttpServlet获取:this.getServletContext();

3.功能

        1.获取MIME格式:mime格式:text/html;大格式/小格式;-> String getMimeType(String file);

        2.共享数据:这个共享数据就很厉害,大于一次请求,也大于一次会话,他是全部,卡密。

        3.获取文件的真实路径

                1.直接在web目录下的,就是直接:/day16/a.txt;2.WEB-INF下的文件,就是:/day16/WEB-INF/b.txt;3.在src下的文件,使用:/day16/WEB-INF/c.txt;

四.案例分析

1.将文件以附件形式打开

        1.设置响应头的 content-disposition = attachment;filename=xxx就好了;

        2.创建一个.jsp文件,用超链接绑定一下,传递资源路径与文件名称;

        3.获取请求的消息,拿到filename,然后获取mime类型;

        4.将对应的图片加载进输入流,然后输出。

        5。可能会出现提示框乱码问题,这里使用人家一个工具修正就好。


总结

        对于最后那个案例,我竟然看起来比较陌生了。让我现在在做一次的话,我绝对会忘记设计mime类型的。然后兼容中文我可能也不会。对于这个寒假的java学习,就到此为止吧。目前的进度是cookie与session做完了。他们俩是会话技术。还是比较麻烦的。可能需要在仔细看看。然后开学之后,从JSP开始,EL也要重新看。对于JSTL,我突然忘记路径咋写的。待会就看一下视频。然后是明天写论文,就是看剩下那一片论文然后照着写出来实验部分以及结论部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值