HttpServletResponse
HttpServletResponse概述
客户端发送给服务器端的数据。
我们在创建Servlet时会覆盖service()⽅法,或doGet()/doPost(),这些⽅法都有两个参数,
代表请求的request和代表响应response。
HttpServletResponse是ServletResponse的⼦接⼝,功能和⽅法更加强⼤.
通过response设置响应行
-
响应状态码:服务器告诉客户端浏览器本次请求和响应的⼀个状态。
-
设置响应⾏的状态码
setStatus(int sc)
状态码 | 代表 | 作用 |
---|---|---|
1xx | 服务器就收客户端消息,但没有接受完成,等待⼀段时间后,发送1xx多状态码 | |
2xx | 200 | 成功 |
3xx | 302 | 302(重定向),304(访问缓存) |
4xx | 404 | 客户端错误 |
5xx | 500 | 服务器端错误 |
通过response设置响应头
- Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
- Content-disposition:服务器告诉客户端以什么格式打开响应体数据
- in-line:默认值,在当前⻚⾯内打开
- attachment;filename=xxx:以附件形式打开响应体。⽂件下载
常用API:
方法(参数) | 作用 |
---|---|
addHeader(String name, String value) | |
addIntHeader(String name, int value) | |
addDateHeader(String name, long date) | |
setHeader(String name, String value) | |
setIntHeader(String name, int value) | |
setDateHeader(String name, long date) |
其中,add表示添加,⽽set表示设置
//1.解决文件后缀缺失/错误现象
String type = this.getServletContext().getMimeType(filename);
resp.setContentType(type);
//2.解决中文名字缺失问题
String agent = req.getHeader("user-agent");
String fileName = DownLoadUtils.getFileName(agent, filename);
//3.解决部分文件无法下载的问题
resp.setHeader("Content-Disposition","attachment;filename="+fileName);
通过response设置响应体
获得输出流:
ServletOutputStream getOutputStream()(字节)
PrintWriter getWriter()(字符)
- 关于设置中⽂的乱码问题
response缓冲区的默认编码是ISO8859-1,此码表中没有中⽂。
解决方法:
req.setCharacterEncoding("UTF-8");
- 但我们发现客户端还是不能正常显示⽂字
我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系统的编码,
客户端浏览器的默认编码是GBK,我们要把浏览器的编码修改成UTF-8。
解决方法:
resp.setContentType("text/html;charset=utf-8");
- 关于读取txt文件的时候发现乱码的情况
txt文件的本地编码默认是GBK,我们在读取的时候,需要将他们按照GBK解码,再重新
按照UTF-8进行编码,从而获得正确的数据.
private List<String> words = new ArrayList<String>();
String path = this.getServletContext().getRealPath("/WEB-INF/new_words.txt");
try {
BufferedReader reader = new BufferedReader(new FileReader(path));
String line;
while ((line = reader.readLine()) != null) {
line = new String(line.getBytes("GBK"), "UTF-8");//转换的过程
words.add(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}