HttpServletResponse对象(一)
web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象。
request和response对象既然代表请求和响应,那么我获取客户机提交过来的数据,找request对象,向客户机输出数据,只需要找response对象。
一:HttpServletResponse对象介绍
HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据,发送响应头,发送响应状态码的方法。
1.1:负责向客户端(浏览器)发送数据的相关方法
1.2:发送响应头的相关方法
1.3:发送响应状态码的相关方法
1.4:响应状态码的常量
HttpServletResponse定义了很多状态码的常量,具体查看API
常见的:404
200:
500:
二:HttpServletResponse对象常见应用
2.1使用outputStream流向客户端输出中文数据
范例:public class ResponseDemo01 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data="中国";
OutputStream op=response.getOutputStream();
response.setHeader("content-type", "text/html;charse=GBK");
byte[] dataByteArr=data.getBytes("GBK");
op.write(dataByteArr);
}
}
2.2:使用printwriter流向客户端输出中文数据
public class ResponseDemo01 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data="中国";
response.setHeader("content-type", "text/html;charset=GBK");
response.setCharacterEncoding("GBK");
PrintWriter out=response.getWriter();
out.print(data);
}
}
使用printwriter没有将字符串转换成字节数组那一步。
2.3:文件下载
实现的思路::
1.获取要下载的文件的绝对路径
2.获取要下载的文件名
3.设置content-disposition响应头控制浏览器以下载的形式打开文件
4.获取要下载的文件输入流
5.创建数据缓冲区
6.通过response对象获取OutputStream流
7.将FileInputStream流写入到buffer缓冲区
8.使用OutputStream将缓冲区的数据输出到客户端浏览器
代码:
public class ResponseDemo02 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1:获取下载文件的绝对路径
String realPath=this.getServletContext().getRealPath("/download/2.jpg");
//2获取下载的文件名
String fileName=realPath.substring(realPath.lastIndexOf("\\")+1);
//3设置content-disposition响应头控制浏览器以下载的形式打开文件
中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
response.setHeader("content-disposition", "attachment;filename="+fileName);
//4:获取要下载的文件输入流
InputStream in=new FileInputStream(realPath);
int len=0;
//5:创建数据缓冲区
byte[] buffer=new byte[1024];
//6通过response对象获取outputStream流
OutputStream out=response.getOutputStream();
//7将fileInputStream流写入到buffer缓冲区
while((len=in.read(buffer))>0){
//8使用outputStream将缓冲区的数据输出到客户端浏览器
out.write(buffer,0,len);
}
in.close();
}
}
第三步是以下载的形式打开文件,然后inputsteam是把内容写入到路径中,然后outputstream输出到客户端展示出来。
文件下载注意事项:编写文件下载功能时推荐使用OutputStream流,避免使用PrintWriter流,因为OutputStream流是字节流,可以处理任意类型的数据,而PrintWriter流是字符流,只能处理字符数据,如果用字符流处理字节数据,会导致数据丢失。
response实现细节:
getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。
getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。
Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。
转载于:https://www.cnblogs.com/bulrush/p/5667662.html
HttpServletResponse对象(一)相关推荐
- Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法
在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得H ...
- Struts2 - 在Action类中获得HttpServletResponse对象
Struts2 - 在Action类中获得HttpServletResponse对象 在struts1.x Action类的execute方法中,有四个参数,其中两个就是 response和reque ...
- javaweb学习总结(七)——HttpServletResponse对象(一)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...
- HttpServletResponse对象介绍
一.HttpServletResponse对象介绍 HttpServletResponse对象代表服务器的响应.这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法.查看HttpServ ...
- javaweb学习总结(七):HttpServletResponse对象(一)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...
- 在Action类中获得HttpServletResponse对象的四种方法
Struts2:在Action类中获得HttpServletResponse对象的四种方法 在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和req ...
- Java Web学习总结(4)——HttpServletResponse对象入门
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...
- HttpServletResponse对象实现文件下载
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...
- HttpServletResponse对象、HttpServletResponse应用、请求重定向
HttpServletResponse对象 1.HttpServletResponse接口定义的状态码方法 当Servlet向客户端回送响应消息时,需要在响应消息中设置状态码,状态码代表着客户端请求服 ...
最新文章
- 【 Vivado 】输出延迟约束实例
- WINCE6.0+S3C6410主要时钟控制
- 运行命令对电脑的操作(Windows + R)
- static关键字(修饰函数、局部变量、全局变量)
- python中thread的setDaemon、join的用法
- 使用Jenkins+Sonarqueb进行自动化测试和代码质量检测
- 查看.Net Framework版本的方法
- [唐诗]正月十五日夜-苏味道
- python解析response的json_python:解析requests返回的response(json格式)说明
- Qt使用QPainter绘图的缩放问题
- mysql文件扩展名查询_如何通过MySQL查询获取文件的文件扩展名?
- Ubuntu中使用dnw工具:没有找到/dev/secbulk0
- 开发者需要了解的 WebKit
- 360浏览器访问跨域问题
- 关于音频芯片MICIN和LINEIN,HPOUT和OUT的区别
- 桌面我的计算机图标,让桌面显示我的电脑或者我的计算机图标
- Chromium内核和Webkit的关系到底是什么?
- Python while语句2021-08-27
- 脊髓炎起病急 该做好哪些治疗呢?
- 企业为什么做不好生产计划?