HttpServletResponse对象

Posted c.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpServletResponse对象相关的知识,希望对你有一定的参考价值。

HttpServletResponse对象


  • HttpServletResponse对象服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

response常见应用

  • 向客户端输出中文数据。
    分别以OutputStreamPrintWriter输出。

  • 文件下载。

  • 生成随机图片。

  • 发送http头,控制浏览器定时刷新网页(REFRESH)。

  • 发送http头,控制浏览器禁止缓存当前文档内容 。
    多学一招:使用HTML语言里面的<meta>标签来控制浏览器行为

  • 通过response实现请求重定向。

  • 请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。

  • 应用场景:用户注册。

  • 实现方式
    response.sendRedirect()
    实现原理:302状态码和location头即可实现重定向


请求重定向的运行流程

  1. 技术分享
  2. 技术分享
  3. 技术分享
  4. 技术分享
  5. 技术分享
  6. 技术分享
  7. 技术分享
  8. 技术分享
  9. 技术分享
  10. 技术分享
  11. 技术分享
  12. 技术分享
  13. 技术分享
  14. 技术分享
  15. 技术分享
  16. 技术分享

response细节

  • getOutputStreamgetWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStreamPrintwriter对象。

  • getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。

  • Servlet程序向ServletOutputStreamPrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。

  • Serlvet的service方法结束后,Servlet引擎将检查getWritergetOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。


在servlet中用outputStream输出数据的问题,以及输出中文的问题
代码示例:

package response;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//在servlet中用outputStream输出数据的问题,以及输出中文的问题
public class ResponseDemo1 extends HttpServlet {
//在servlet中用outputStream输出中文的问题
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        test1(response);
        test2(response);
        test3(response);
        test4(response);
    }


    private void test1(HttpServletResponse response) throws IOException,
            UnsupportedEncodingException {
        response.setHeader("Content-type", "text/html;charset=UTF-8");  //指定浏览器以什么码表打开
        //程序以什么码表输出了,程序就一定要控制浏览器以什么码表打开

        String data = "中国";

        OutputStream out = response.getOutputStream();
        out.write(data.getBytes());//写给response//乱码
        out.write(data.getBytes("UTF-8"));
    }

    //用html技术中的meta标签模拟了一个http响应头,来控制浏览器的行为
    private void test2(HttpServletResponse response) throws IOException,
            UnsupportedEncodingException {
        //html: <meta>标签:这个标签可以模拟http响应头

        //程序以什么码表输出了,程序就一定要控制浏览器以什么码表打开

        String data = "中国";

        OutputStream out = response.getOutputStream();
        out.write("<meta http-equiv=‘content-type‘ content=‘text/html;charset=UTF-8‘>".getBytes());
        //out.write(data.getBytes());//写给response
        out.write(data.getBytes("UTF-8"));//乱码
    }

    private void test3(HttpServletResponse response) throws IOException,
        UnsupportedEncodingException {
        //注意,下面写错了,浏览器会提示下载
        response.setHeader("content-type", "text/html,charset=UTF-8");  
        //程序以什么码表输出了,程序就一定要控制浏览器以什么码表打开

        String data = "中国";

        OutputStream out = response.getOutputStream();
        //out.write(data.getBytes());//写给response
        out.write(data.getBytes("UTF-8"));//乱码
    }

    private void test4(HttpServletResponse response) throws IOException,
        UnsupportedEncodingException {

            response.setHeader("Content-type", "text/html;charset=UTF-8");  
            //程序以什么码表输出了,程序就一定要控制浏览器以什么码表打开

            OutputStream out = response.getOutputStream();
            //out.write(1);
            out.write((1+" ").getBytes());//正常
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

测试test1方法,注释掉其他方法,在浏览器可以看到以下结果:
技术分享


测试test2方法,注释掉其他方法,在浏览器可以看到以下结果:
技术分享


测试test3方法,注释掉其他方法,浏览器会提示下载。


测试test4方法,注释掉其他方法,发现out.write((1+” “).getBytes());语句显示正常。








以上是关于HttpServletResponse对象的主要内容,如果未能解决你的问题,请参考以下文章

HttpServletResponse对象

HttpServletResponse对象

4,学习总结-HttpServletResponse

HttpServletResponse对象之常见应用

重新认识HttpServletResponse对象,你学会了吗?--乐字节

JavaWeb---总结HttpServletResponse对象