zoukankan      html  css  js  c++  java
  • Servlet第五篇【Response总结】

    一、Response概述

    response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象。response对象是用来对客户端进行响应的,这说明在HttpServletResponse的doXXX()方法中使用response对象可以完成对客户端的响应工作。

    二、Response主要功能介绍

    1、发送状态码;
    2、设置响应头信息;
    3、设置响应正文;
    4、重定向;

    三、HttpServletResponse的常用方法

    (一)发送状态码
    setStatus(状态码)
    sendError(状态码, 状态码相关信息)
    
    (二)设置响应头
    setHeader(String name, int value):设置响应头,只有一个值时
    addHeader(String name, int value):设置响应头,有多个值时
    void setIntHeader(String name, int value):设置响应头
    void setDateHeader(String name, long date):设置响应头      
    
    (三)设置响应正文
    ServletOutputStream getOutputStream():用来向客户端响应字节数据;
    PrintWriter getWriter():用来向客户端响应字符数据;
    
    (四)getWriter和getOutputStream细节

    1、getWriter()和getOutputStream()两个方法不能同时调用。如同时调用就会出现异常
    2、Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
    3、Servlet的serice()方法结束后【也就是doPost()或者doGet()结束后】,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象.

    4、response字符流缓冲区大小为8KB,当向字符流中写入数据后,数据可能只在缓冲区中,而没有发送到浏览器。
    可以调用response.flushBuffer()或response.getWriter().flush()方法刷新缓冲区,把数据发送到浏览器。

    (五)重定向
    //方法一:
    response.sendStatus(302);
    repsonse.setHeader("Location", "http://www.baidu.com");
    
    //方法二:快捷的方法重定向:
    response.sendRedirect("http://www.baidu.com");
    

    四、HttpServletResponse应用

    1、使用Refresh头进行定时刷新

    2、禁用浏览器缓存

    /**
    	Cache-Control: no-cache;
    	Pragma: no-cache;
    	Expires: -1;
    */
    public class FServlet extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		response.setHeader("Cache-Control", "no-cache");
    		response.setHeader("Pragma", "no-cache");
    		response.setDateHeader("Expires", -1);
    	}
    }
    

    3、响应图片

    /**
    *  响应图片
    * 1、获取字节数组(使用CommonsIO)
    * 2、获取OutputStream
    * 3、写出数据
    */
    public class GServlet extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		//获取字节数组(使用CommonsIO)
    		String path = "C:/Users/ASUS/Desktop/壁纸/35.jpg";
    		FileInputStream is = new FileInputStream(path);
    		byte[] datas = IOUtils.toByteArray(is);
    		//获取OutputStream
    		ServletOutputStream os = response.getOutputStream();
    		//写出数据
    		os.write(datas);
    
    }
    

    Java新手,若有错误,欢迎指正!

  • 相关阅读:
    Android应用程序与SurfaceFlinger服务的关系概述和学习计划【转】
    Linux内核的LED设备驱动框架【转】
    电源管理-4种休眠方式状态
    linux 管道,输出重定向,后端执行
    find 和grep的区别
    linux启动脚本
    linux启动介绍
    sudo的使用
    ps aux|grep *** 解释
    php图片防盗链
  • 原文地址:https://www.cnblogs.com/Java-biao/p/12724644.html
Copyright © 2011-2022 走看看