JavaWeb核心---Response

HttpServletResponse

HttpServletResponse概述

我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。
service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大

HttpServletResponse对象介绍这里写图片描述

HttpServletResponse对象代表服务器的响应,该封装了向客户端发送数据、发送响应头,发送响应状态码的方法

response的运行过程图

这里写图片描述

response设置响应行

设置响应行的状态码
setStatus(int sc)
如:response.setStatus(302);

response设置响应头

addHeader(String name, String value)
addIntHeader(String name, int value)
addDateHeader(String name, long date)
setHeader(String name, String value)
setDateHeader(String name, long date)
setIntHeader(String name, int value)

设置响应头的几个应用

1. 重定向
1)设置location值重定向
这里写图片描述
2)利用sendRedirect(String location)直接重定向(效果同上)
这里写图片描述
3)设置refresh对应的值实现倒计时刷新
这里写图片描述
2. 设置文件的类型
1)利用setHeader(“Content-type”,”文件类型“)方法。eg:
这里写图片描述
2)利用setContentType(String type)方法(效果同上,更方便) eg:
这里写图片描述
3. 文件的打开方式是下载
这里写图片描述

response设置响应体

1.PrintWriter getWriter()

获得字符流,通过字符流的write(String s)方法可以将字符串设置到response缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。

关于设置中文的乱码问题
response缓冲区的默认编码是ISO-8859-1,此码表中没有中文,可以通过
response.setCharacterEncoding(”UTF-8“) 设置response的编码

但我们发现客户端还是不能正常显示文字
因为我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,我们可以手动修改浏览器的编码是UTF-8。

然而上面的方法未免太麻烦,我们还可以在代码中指定浏览器解析页面的编码方式,
通过response.setContentType(String type)方法指定页面解析时的编码是UTF-8
response.setContentType(“text/html;charset=UTF-8”);

上面的代码不仅可以指定浏览器解析页面时的编码,同时也内含setCharacterEncoding的功能,所以在实际开发中只要编写response.setContentType(“text/html;charset=UTF-8”);就可以解决页面输出中文乱码问题。
这里写图片描述

2.ServletOutputStream getOutputStream()
获得字节流,通过该字节流的write(byte[] bytes)可以向response缓冲区中写入字节(写入的就是字节),在由Tomcat服务器将字节内容组成Http响应返回给浏览器。
这里写图片描述
PS:无论是字节流还是字符流,只要编码和解码是同一个码表就不会出乱码。

文件下载案例

文件下载的实质就是文件拷贝,将文件从服务器端拷贝到浏览器端。所以文件下载需要IO技术将服务器端的文件使用InputStream读取到,在使用 ServletOutputStream写到response缓冲区中
文件位置和html代码如下:
这里写图片描述
java代码如下:
这里写图片描述
但是,如果下载中文名文件,页面在下载时会出现中文乱码或不能显示文件名的情况
原因是不同的浏览器默认对下载文件的编码方式不同,ie是UTF-8编码方式,而火狐 浏览器是Base64编码方式。所里这里需要解决浏览器兼容性问题,解决浏览器兼容 性问题的首要任务是要辨别访问者是ie还是火狐(其他),通过Http请求体中的一个属性User-Agent可以辨别
这里写图片描述这里写图片描述

猜你喜欢

转载自blog.csdn.net/PNGYUL/article/details/79971186
今日推荐