javaWeb之HttpServletResponse

本文是连接着上文的Servlet

如果没有上文的Servlet是无法清楚啥是HttpServletResponse
其实也没啥,这只不过是Servlet中的service方法中的两个参数(精华)之一.

首先HttpServletResponse是什么?

官方说明文档告诉我们:
  • 扩展 ServletResponse 接口以提供特定于 HTTP 的发送响应功能。例如,该接口拥有访问 HTTP 头和 cookie 的方法。
  • servlet 容器创建 HttpServletResponse 对象,并将该对象作为参数传递给 servlet 的 service 方法(doGet、doPost,等等)。

那么ServletResponse又是什么东西?

官方文档也告诉我们:
  • 定义辅助 servlet 将响应发送到客户端的对象。servlet 容器创建 ServletResponse 对象,并将它作为参数传递给 servlet 的 service 方法。
  • 要发送 MIME 正文响应中的二进制数据,请使用 #getOutputStream 返回的 ServletOutputStream。要发送字符数据,请使用 #getWriter 返回的 PrintWriter 对象。要混合二进制数据和文本数据,例如要创建 multipart 响应,请使用 ServletOutputStream 并手动管理字符部分。

  • 可使用 #setCharacterEncoding 和 #setContentType 显式指定 MIME 正文响应的 charset,或使用 #setLocale 方法隐式指定它。显式指定优先于隐式指定。如果未指定 charset,则将使用 ISO-8859-1。setCharacterEncoding、setContentType 或 setLocale 方法必须在调用 getWriter 之前,并且必须在提交采用要使用的字符编码的响应之前调用。

到这应该明白HttpServletResponse是什么了吧.

其实就是Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

那么HttpServletResponse有什么用呢?(其实对于高手们看看文档的方法就可以自学了)

  • 1,响应行

    • setStatus(int status);设置此响应的状态代码。
      例如:setStatus(302);//返回302,就是重定向.如果是404,就是访问的资源不存在.其实在HttpServletResponse中已经定义好这些值的了.
  • 2,响应头(很多都是HTML的头设置,所以要查看一下HTML的头的意义)

    • setHeader(String name, String value) 设置响应头信息
      用给定名称和值设置响应头。如果已经设置了头,则新值将重写以前的值。containsHeader 方法可用于测试在设置其值之前头是否存在。

      与addHeader(String name ,String value)是有区别的,addxxx()是可以一个name添加多个value.

    • sendRedirect(String location) 请求重定向

  • 3,响应正文

    • getWriter();//获取字符输出流
    • getOutputStream();//获取字节输出流.
    • setContentType(String type) ;//设置将发送到客户端的响应的内容类型.
    • **setCharacterEncoding(**String charset);// 告知服务器使用什么编码

以上的方法其实都是ServletResponse接口里定义好的,然HttpServletResponse是它的子接口,所以就有了它的所有的方法.

HttpServletResponse的使用实例.

1,模拟下载文件

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //将服务端和客户端的编码都是用UTF-8
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        //获取文件路径
        String filepath = this.getServletContext().getRealPath("/WEB-INF/classes/班花.jpg");//src目录下的文件
        FileInputStream fis = new FileInputStream(filepath);
        //获取输出字节流ServletOutputStream
        ServletOutputStream sos = response.getOutputStream();
        //格式化并获得对应编码的文件名.
        String filename = filepath.substring(filepath.lastIndexOf("\\")+1);//切记反斜杠的写法.

        filename = URLEncoder.encode(filename, "UTF-8");

        //告知浏览器下载文件
        response.setHeader("content-disposition", "attachment;filename="+filename);
        response.setHeader("content-type", "image/jpeg");

        byte[] b = new byte[1024];
        int len;
        while((len = fis.read(b))!=-1){

            sos.write(b, 0, len);//写到浏览器.
        }
        //关流
        sos.close();
        fis.close();


    }

2, 实现3秒后跳转到另外一个页面.

resp.setHeader("refresh",  "3;url=/ServletResponeDemo/Demo3");

3,告知浏览器不要缓存.

        //告知客户端不缓存
        response.setHeader("pragma", "no-cache");
        response.setHeader("cache-control", "no-cache");
        response.setDateHeader("expires", 0);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值