[JAVAEE笔记]05.HttpServletResponse

HttpServletResponse是Servlet响应接口的子接口,用于向客户端发送数据。它提供了设置响应行(状态码)、响应头(如Content-Type和Content-disposition)和响应体的方法。在处理中文乱码问题时,需注意response的默认编码ISO8859-1不包含中文,可以通过设置为UTF-8并调整浏览器编码来解决。读取GBK编码的txt文件时,需要先按GBK解码再用UTF-8编码以避免乱码。
摘要由CSDN通过智能技术生成

HttpServletResponse

HttpServletResponse概述

客户端发送给服务器端的数据。

我们在创建Servlet时会覆盖service()⽅法,或doGet()/doPost(),这些⽅法都有两个参数,

代表请求的request和代表响应response。

HttpServletResponse是ServletResponse的⼦接⼝,功能和⽅法更加强⼤.

通过response设置响应行

  • 响应状态码:服务器告诉客户端浏览器本次请求和响应的⼀个状态。

  • 设置响应⾏的状态码

    setStatus(int sc)

状态码代表作用
1xx服务器就收客户端消息,但没有接受完成,等待⼀段时间后,发送1xx多状态码
2xx200成功
3xx302302(重定向),304(访问缓存)
4xx404客户端错误
5xx500服务器端错误

通过response设置响应头

  1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
  2. 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();
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值