Response

功能

一、设置响应行

设置状态码

setStatus(int sc)

二、设置响应头

setHeader(String name,String value)

三、设置响应体

如何设置响应体?

1、获取输出流
① 字符输出流PrintWriter getWriter()
② 字节输出流ServletOutputStream getOutputStream( )

2、使用输出流将数据输出到客户端浏览器上


案例

1、重定向案例

在这里插入图片描述

重定向的特点

  1. 地址栏发生变化
  2. 重定向可以访问其他服务器的资源
  3. 重定向是两次请求

路径的写法:

① 相对路径通过相对路径不可以确定唯一的资源,如./index.html,我们姑且可以认为以点开头的就是相对路经
规则:找到当前资源和目标资源之间的相对位置关系

./代表当前目录下,不写的话默认代表当前目录下
…/代表向上退一级目录

② 绝对路径:通过绝对路径可以确定唯一资源,如https://blog.csdn.net,我们可以姑且认为以斜杠/开头的路径就是绝对路径就像
规则:判断定义的路径是给谁用的?判断请求将来从哪里发出
给客户端浏览器用的:需要去加虚拟目录(项目的访问路径),建议虚拟目录动态获取,通过request.getContextPath()方法
给服务器用的:就不需要加虚拟目录

当我们给客户端浏览器用的目录特别多的时候,如果我们一不小心改动了虚拟目录,那么我们就需要把我们写给客户端浏览器用的目录都改一遍,十分的麻烦!
为了避免这种情况我们使用request中的getContextPath方法获取当前的虚拟目录,来设置为动态的目录,举例说明
在这里插入图片描述

2、服务器输出字符数据到浏览器案例

在这里插入图片描述
成功显示
在这里插入图片描述
这里我们要注意
我们可以不用刷新该流的缓冲,因为这个流对象是我们通过response对象得到的,而这个response对象是tomcat创建的,他在结束响应的时候会自动刷新缓冲,所以我们不需要使用print方法也可以成功显示

但是但我们打印输出中文的话会乱码
在这里插入图片描述
然后的到的结果是这样子的乱码
在这里插入图片描述
注意
浏览器会根据响应头中规定的编码来进行解析,如果响应头中没有规定的话那么他会按照电脑系统的默认码表进行解析,那么问题就来了,因为这个字符流是response对象创建的,而response对象是tomcat服务器创建的,但是tomact服务器是外国人写的,他们使用的编码表是ISO-8859-1,而我们系统默认的码表是GBK,两种码表不一样自然会产生乱码的情况

我们可以这样解决
在这里插入图片描述
这样子我们得到的就是正常的结果了
在这里插入图片描述
注意
这时候会产生一个问题,我们并不能保证浏览器解析的码表一直保持是GBK,所以当我们浏览器的默认解析码表改变还是会乱码

我们这样解决刚刚这个问题
在这里插入图片描述
text/html是一种文本类型,不用管他。然后我们就解决了乱码的问题
在这里插入图片描述

但是我们总是这样子设置会很不方便,然后response对象提供给了我们一个很方便的设置编码集的方法,我们可以使用如下的方法
在这里插入图片描述
得到的结果同样是正确的,建议使用这种方式设置编码
在这里插入图片描述

3、验证码案例

在这里插入图片描述
得到的效果如下
在这里插入图片描述
每刷新一次都是随机的。

posted @ 2020-11-14 17:18  谢海川  阅读(361)  评论(0)    收藏  举报