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方法关闭该输出流对象。

  

时间: 2024-10-09 20:42:04

HttpServletResponse对象(一)的相关文章

servlet中的HttpServletRequest,HttpServletResponse对象以及service 和 doXX方法区别

一:HttpServletRequest对象作用是用于获取请求数据. 核心的API: 请求行: request.getMethod(); 请求方式 request.getRequetURI() / request.getRequetURL() 请求资源 request.getProtocol() 请求http协议版本 请求头: request.getHeader("名称") 根据请求头获取请求值 request.getHeaderNames() 获取所有的请求头名称 实体内容: req

javaweb学习总结(七)——HttpServletResponse对象(一)

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了.要向客户机输出数据,只需要找response对象就行了. 一.HttpServletResponse对象介绍 HttpServletResponse对象代表服务器的响应.这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法.查

javaweb学习总结(七)——HttpServletResponse对象(一)(转)

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了.要向客户机输出数据,只需要找response对象就行了. 一.HttpServletResponse对象介绍 HttpServletResponse对象代表服务器的响应.这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法.

HttpServletRequest对象请求转发和HttpServletResponse对象请求重定向之间的区别

HttpServletRequest对象request代表浏览器请求对象,HttpServletResponse对象代表服务器响应对象,当用浏览器访问web服务器,发出请求时,Servlet调用service方法并传入该两个对象,然后通过请求转发或者重定向到下一个jsp页面或者Servlet,下面是request对象请求转发和response对象请求重定向的区别: 区别一.RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件:而HttpServletRe

javaweb(七)——HttpServletResponse对象(一)

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了.要向客户机输出数据,只需要找response对象就行了. 一.HttpServletResponse对象介绍 HttpServletResponse对象代表服务器的响应.这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法.查

HttpServletRequest和HttpServletResponse对象

HttpServletRequest对象详解 javax.servlet.http.HttpServletRequest是SUN制定的Servlet规范,是一个接口.表示请求,"HTTP请求协议"的完整内容都被封装到request对象中,HttpServletRequest接口的父接口是javax.servlet.ServletRequest. Apache软件基金会开发的"Tomcat容器"对javax.servlet.http.HttpServletReques

JavaWeb---总结(七)HttpServletResponse对象(一)

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了.要向客户机输出数据,只需要找response对象就行了. 一.HttpServletResponse对象介绍 HttpServletResponse对象代表服务器的响应.这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法.

HttpServletResponse对象(一)

首先声明:本文转载自:@孤傲苍狼 https://home.cnblogs.com/u/xdp-gacl/ Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了.要向客户机输出数据,只需要找response对象就行了. 一.HttpServletResponse对象介绍 HttpServlet

HttpServletResponse对象实现文件下载

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了.要向客户机输出数据,只需要找response对象就行了. 一.HttpServletResponse对象介绍 HttpServletResponse对象代表服务器的响应.这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法.