精华内容
下载资源
问答
  • HttpServletResponse

    2017-03-15 17:25:37
    HttpServletResponse
  • HttpServletResponse详解

    万次阅读 2019-05-16 20:56:58
    HttpServletResponse详解 Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对 象。 request和response对象即然代表请求和响应,那我们要获取客户机...

    HttpServletResponse详解

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对 象。
    request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。
    1.负责向客户端(浏览器)发送响应头的相关方法

    void addDateHeader(String name, long date) 添加指定名称的响应头和日期值
    void addHeader(String name, String value) 添加指定名称的响应头和值
    void addIntHeader(String name, int value) 添加指定名称的响应头和int值
    boolean containsHeader(String name) 返回指定的响应头是否存在
    void setHeader(String name, String value) 使用指定名称和值设置响应头的名称和内容
    void setIntHeader(String name, int value) 指定 int 类型的值到 name 标头
    void setDateHeader(String name, long date) 使用指定名称和值设置响应头的名称和内容

    2.负责向客户端(浏览器)发送响应状态码的相关方法

    void setStatus(int sc) 设置响应的状态码

    3.常见应用
    3.1:OutputStream流向客户端浏览器输出中文数据
    核心代码

          String data = "心若静,风奈何";
    		OutputStream outputStream = resp.getOutputStream();// 获取输出流
    		// 通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
    		resp.setHeader("content-type", "text/html;charset=UTF-8");
    		// 将字符转换成字节数组,指定以UTF-8编码进行转换
    		byte[] dataByteArr = data.getBytes("UTF-8");
    		//使用OutputStream流向客户端输出字节数组
    		outputStream.write(dataByteArr);
    		outputStream.flush();
    		outputStream.close();
    

    在这里插入图片描述
    3.2PrintWriter流向客户端浏览器输出中文数据
    核心代码:

           String data = "心若静,风奈何";
    		resp.setCharacterEncoding("UTF-8");// 设置将字符以"UTF-8"编码输出到客户端浏览器
    		PrintWriter out = resp.getWriter();// 获取输出流
    		// 将字符转换成字节数组,指定以UTF-8编码进行转换
    		  resp.setHeader("Content-type",  "text/html;charset=UTF-8");  
    		out.write(data);// 使用PrintWriter流向客户端输出字符
    		out.flush();
    		out.close();
    

    在这里插入图片描述
    3.3:OutputStream或者PrintWriter向客户端浏览器输出数字

         OutputStream  outputStream=resp.getOutputStream();
    		  resp.setHeader("Content-type",  "text/html;charset=UTF-8");  
    		outputStream.write("使用OutputStream流输出数字1:".getBytes("UTF-8"));
    		//outputStream.wait(1)如果木有转换就是下载
    		 outputStream.write((1+"").getBytes());
    		  outputStream.close();
    
          resp.setHeader("content-type", "text/html;charset=UTF-8");
    	 resp.setCharacterEncoding("UTF-8");
    	 PrintWriter out = resp.getWriter();//获取PrintWriter输出流
    	         out.write("使用PrintWriter流输出数字1:");
    		       out.write(1+"");
    

    解决浏览器乱码的问题:

         //这句话的意思,是让浏览器用utf8来解析返回的数据  
            resp.setHeader("Content-type",  "text/html;charset=UTF-8");  
            //servlet 使用UTF-8 而不是默认的
            resp.setCharacterEncoding("Utf-8");
    
    展开全文
  • HttpServletResponse接口

    2021-05-21 15:06:59
    1:HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar 可以看到HttpServletResponse接口继承于ServleResponse接口 2:HttpServletResponse接口实现类由Http服务器负责提供 3:...

    一.介绍

     1:HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar

    可以看到HttpServletResponse接口继承于ServleResponse接口

    2:HttpServletResponse接口实现类由Http服务器负责提供 

    3:HttpServletResponse接口负责将doGet/doPost方法执行结果以二进制的形式写入到【响应体】交给浏览器,即我们常说的服务器找到资源后放入http响应协议包中发给请求方

    4: 开发人员习惯于将HttpServletResponse接口修饰的对象称为【响应对象】,例如HttpServletResponse response,response为一个响应对象。

     二.主要功能

    1) 将执行结果以二进制形式写入到【响应体】

    2) 设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字,图片,视频,命令】

    3) 设置响应头中【location】属性,将一个请求地址赋值给location.放入响应协议包,当http响应协议包返回给浏览器后,从而控制浏览器向指定服务器发送请求,

    resp.sendRedirect方法内部的原理便是location 属性

    三.编程实战

    下面我们对HttpServletResponse接口进行编程实战:

    第一种情况:我们此时浏览器的请求发送到了后台,后台接收到了请求,想要返回给浏览器一个字符串,那么此时怎么将这个字符串写入到我们的响应体中呢?

    答:分为两步:

    第一步:首先通过我们的响应对象resp调用getWriter方法来向我们的Tomcat索要我们的输出流,代码如下所示:

    PrintWriter printwriter=resp.getWriter();

    第二步:通过输出流来将我们的数据以二进制的形式放入到我们的响应体中,注意此处我们所用的方法为print方法,括号中放入我们想要传给浏览器的字符串参数名即可,假定为name:

    printwriter.print("name");

    第二种情况:write方法与print方法的区别在哪里?

    下面先来看一段代码:思考最后代码的输出结果:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            int money = 97; 
            PrintWriter out = resp.getWriter();
            out.write(money);
    
        }

    最终我们会看到程序返回给前台的结果为a,这是为什么呢?原因是假如此时我们使用write方法的话,在它将数字写入响应体的时候会先将数字转变为ASCII码,然后再写入响应体中。

    而当我们使用print方法的时候,我们会看到程序返回给前台的结果为97了。

    总结:write方法一般会将【字符】,【字符串】,【ASCII码】写入到响应体,而在我们的实际开发中,用的最多的还是我们的print方法,它会将真实数据写入到响应体。


    第三种情况:既然聊到了我们的print方法,那么再来看下关于print方法的最常见的一个情况,下面先来看代码:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String name = "宋彪<br/>喜欢喝水<br/>";
    
            PrintWriter printWriter = resp.getWriter();
    
            printWriter.print(name);
        }

    前面我们说过,在开发的过程中我们最常见的是我们的print方法,那么思考上面的字符串最终返回给浏览器的时候会不会出现乱码的情况呢?

    答:答案当然是会了,前面我们提到过HttpServlet接口会为我们的响应头中的[content-type]属性值设置值,在我们没有使用任何设置手段的时候,默认的[content-type]属性的值为“text” ,即content-type="text",意为指定我们的浏览器使用文本编译器来解析我们http响应协议包中的响应体的二进制数据。但是此时解析的时候发现我们的二进制数据中不但有文本,还有html标签,文字,这些此时是不能够被浏览器解析的,浏览器会默认将<br/>和中文作为文本在浏览器窗口展示出来,并没有把<br/>和中文字符当做html标签命令和中文文字,那么此时便必须由我们的后台去指定新的[content-type]属性值,此时代码如下所示:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String name = "宋彪<br/>喜欢喝水<br/>";
    
            //定义新的content-type属性值
            resp.setContentType("text/html;charset=utf-8");
            //向Tomcat索要输出流
            PrintWriter printWriter = resp.getWriter();
            //通过输出流将结果写入响应体
            printWriter.print(name);
        }

    此时需要由我们的响应体对象resp去调用setContentType方法来定义新的[content-type]属性值。

    text意为文本编译器,html意为标签编译器,charset=utf-8意为文字编译器。

    注意:设置我们content-type属性值的位置必须在我们向tomcat索要输出流之前。


    第四种情况:这块我们来介绍下我们的location属性吧

    假如此时我们的服务器端想让我们的浏览器端去访问一个新的地址的话,便会用到location属性。

    举个例子,这里先提到一个重定向的概念,即我们的resp.sendRedirect方法,此时先来看一段代码:

     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
             String name="http://www.baidu.com?userName=mike";
             resp.sendRedirect(name);
        }

    此时我们当浏览器发送请求到后台服务器后,服务器此时执行了重定向方法,将我们想要浏览器待会访问的地址放入到我们的http响应协议包的响应头中的【location】属性中,然后当我们的http响应协议包返回给浏览器后,从而控制浏览器向指定服务器发送请求,这里我们指定向百度发送一个请求。

    为了方便大家的观看location的效果,此处我们使用Fiddler这个抓包工具来看下:

    可以看到当我们使用重定向方法后,这个地址就被放到了location属性值里。 

     

    展开全文
  • HttpServletResponse

    2020-11-25 20:20:18
    HttpServletResponse类的作用: HttpServletResponse类和HttpServletReguest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,...

    HttpServletResponse类的作用:

    HttpServletResponse类和HttpServletReguest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有的响应的信息。
    如果我们需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来设置。

    两个输出流的说明:

    字节流:getOutputStream(); 常用于下载
    字符流:getWriter(); 常用于回传字符串
    两个流只能同时使用一个。
    使用字节流,就不能使用字符流,反之亦然,否则就会报错

    解决响应的中文乱码:

    public class ResponseIOServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           //        //设置服务器字符集编码为UTF-8
    //        resp.setCharacterEncoding("UTF-8");
    //        //通过响应头,设置浏览器也使用UTF-8字符集
    //        resp.setHeader("Content-TYPE","text/html;charset=UTF-8");
            //同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
            //此方法一定要在获取流对象之前调用才有效
            resp.setContentType("text/html;charset=UTF-8");
            PrintWriter writer=resp.getWriter();
            writer.println("一样");
        }
    }
    

    请求重定向

    请求重定向是指:客户端给服务器发请求,然后服务器告诉客户端说,我给你一些地址,你去新地址访问,叫请求重定向(因为之前的地址可能被废弃)

    1. 浏览器地址栏会发生变化
    2. 两次请求
    3. 不共享Request域中的数据
    4. 不能访问WEB-INF下的资源
    5. 可以访问工程以外的资源
    展开全文
  • HttpServletResponse报错

    2015-11-23 03:04:18
    HttpServletResponse response = (HttpServletResponse) invocation.getInvocationContext().get(HTTP_RESPONSE); // String contentType = (String) // invocation.getStack().findValue(conditionalParse...
  • HttpServletResponse说明

    千次阅读 2016-01-01 18:14:18
    HttpServletResponse说明 基本概述  HttpServletResponse是用于将Servlet处理好的内容发送给浏览器的类,服务器通过对HttpServletResponse对象中的内容进行截取、拼接就能获得一个完整的HTTP响应信息。   常用...

    HttpServletResponse说明

    基本概述

        HttpServletResponse是用于将Servlet处理好的内容发送给浏览器的类,服务器通过对HttpServletResponse对象中的内容进行截取、拼接就能获得一个完整的HTTP响应信息。


    参考文档:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html

    依据http协议里面讲过的响应协议格式,response对象的功能分为以下四种:

    1. 响应首行:发送状态码;
    2. 响应头:设置响应头信息;
    3. 响应体:设置响应正文;
    4. 重定向;

    负责向客户端(浏览器)发送响应状态码的相关方法

    void

    setStatus(int sc)

    Sets the status code for this response.

    response.setStatus(200):设置状态码;


    void

    sendError(int sc)

    Sends an error response to the client using the specified status code and clears the buffer.

    void

    sendError(int sc, String msg)

    Sends an error response to the client using the specified status and clears the buffer.

    l  response.sendError(404, “您要查找的资源不存在”):当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。


    HttpServletResponse定义了很多状态码的常量(具体可以查看Servlet的API),当需要向客户端发送响应状态码时,可以使用这些常量,避免了直接写数字,常见的状态码对应的常量:

    状态码404对应的常量

    static int

    SC_NOT_FOUND

    Status code (404) indicating that the requested resource is not available.

    状态码200对应的常量

    static int

    SC_OK

    Status code (200) indicating the request succeeded normally.

    状态码500对应的常量

    static int

    SC_INTERNAL_SERVER_ERROR

    Status code (500) indicating an error inside the HTTP server which prevented it from fulfilling the request.


    负责向客户端(浏览器)发送响应头的相关方法

    当Servlet向客户端发送响应消息时,由于HTTP协议的响应头字段有很多种,为此,在HttpServletResponse接口中,定义了一系列设置HTTP响应头字段的方法,如表1-1所示。

    表1-1      设置响应消息头字段的方法

           方法声明

    功能描述

    void addHeader(String name, String value)

    这两个方法都是用来设置HTTP协议的响应头字段,

    其中,参数name用于指定响应头字段的名称,参数value用于指定响应头字段的值。

    不同的是,addHeader()方法可以增加同名的响应头字段,而setHeader()方法则会覆盖同名的头字段

    void setHeader(String name, String value)

    void addIntHeader(String name,

    int value)

    这两个方法专门用于设置包含整数值的响应头。避免了使用addHeader()与setHeader()方法时,

    需要将int类型的设置值转换为String类型的麻烦

    void setIntHeader(String name,

    int value)

    void setContentLength(int len)

    该方法用于设置响应消息的实体内容的大小,单位为字节。

    对于HTTP协议来说,这个方法就是设置Content-Length响应头字段的值

    void setContentType(String type)

    该方法用于设置Servlet输出内容的MIME类型,对于HTTP协议来说,就是设置Content-Type响应头字段的值。

    例如,如果发送到客户端的内容是jpeg格式的图像数据,就需要将响应头字段的类型设置为“image/jpeg”。

    需要注意的是,如果响应的内容为文本,setContentType()方法的还可以设置字符编码,如:text/html;charset=UTF-8

    void setCharacterEncoding(String charset)

    该方法用于设置输出内容使用的字符编码,对HTTP 协议来说,就是设置Content-Type头字段中的字符集编码部分。一般不使用。

     

    需要注意的是,在表1-1列举的一系列方法中,addHeader()、setHeader()、addIntHeader()、setIntHeader()方法都是用于设置各种头字段的,而setContetType() 和setCharacterEncoding()方法用于设置字符编码,这些设置字符编码的方法可以有效解决乱码问题。


    负责向客户端(浏览器)发送数据的相关方法

    由于在HTTP响应消息中,大量的数据都是通过响应消息体传递的,因此,ServletResponse遵循以IO流传递大量数据的设计理念。在发送响应消息体时,定义了两个与输出流相关的方法,具体如下。

    1.getOutputStream()方法

    l  ServletOutputStream out = response.getOutputStream():获取字节流

    该方法所获取的字节输出流对象为ServletOutputStream类型。由于ServletOutputStream是OutputStream的子类,它可以直接输出字节数组中的二进制数据。因此,要想输出二进制格式的响应正文,就需要使用getOutputStream()方法。比如文件下载

    2.getWriter()方法

    l  PrintWriter out = response.getWriter():获取字符流;

    该方法所获取的字符输出流对象为PrintWriter类型。由于PrintWriter类型的对象可以直接输出字符文本内容,因此,要想输出内容全为字符文本的网页文档,需要使用getWriter()方法。


    getWriter()getOutputStream()的区别

    getWriter() 用于向客户机回送字符数据

    getOutputStream() 返回的对象,可以回送字符数据,也可以回送字节数据(二进制数据)

    OutputStream os=response.getOutputStream();

    os.write("hello,world".getBytes());

    PS:通过该方法也能用getOutputStream()回送字符数据


    如何选择

    如果是回送字符数据,则使用  PrintWriter对象 ,效率高

    如果是回送字节数据(binary date) ,则只能使用 OutputStream

     

    注意事项

    PrintWriter,OutputStream 这两个流不能同时使用

    比如:

    OutputStream os=response.getOutputStream();

    os.write("hello,world".getBytes());

    PrintWriter out=response.getWriter();

    out.println("abc");

     

    会报错:

    java.lang.IllegalStateException: getOutputStream() has already been called for this response

     

    不能同时使用PrintWriterOutputStream的原因

    结论:Web服务器在完成一次service之后会自动关闭流,并销毁当前的requestresponse对象,故无法同时使用两个流。


    重定向

    参考:Servlet传递数据方式


    案例:

    package com.pc;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class Servlet7 extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		response.setContentType("text/html;charset=utf-8");
    		response.setCharacterEncoding("utf-8");
    		// 演示下载文件
    		response.setHeader("Content-Disposition", "attachment; filename=EVO_120G.jpg");	
    		// 打开文件
    		// 1.获取到要下载文件的全路径
    		String path = this.getServletContext().getRealPath("/EVO_120G.jpg");
    		// 测试
    		System.out.println("path=" + path);
    		// 2.创建文件输入流
    		FileInputStream fis = new FileInputStream(new File(path));
    		// 做一个缓冲字符数组
    		byte buff[] = new byte[1024];
    		int length = 0;
    		// 3.指向response的输出流
    		OutputStream os = response.getOutputStream();
    		// 4.循环读出
    		// length表示每次实际读入的字节数
    		while((length = fis.read(buff)) != -1){
    			os.write(buff, 0, length);
    		}
    		// 关闭
    		os.close();
    		fis.close();
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		this.doGet(request, response);
    	}
    }



    ----------参考《韩顺平.细说Servlet


    展开全文
  • HttpServletResponse总结

    2018-10-20 18:47:41
    response对象。 Request对象:获取客户端哪边传送过来的的数据 Response对象:向客户端输出数据. ...一、HttpServletResponse对象的介绍 Interface HttpServletResponse  public interface HttpS...
  • HttpServletResponse对象

    千次阅读 2016-09-15 11:24:21
    HttpServletResponse对象介绍    HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。查看HttpServletResponse的API,可以看到这些相关的方法。
  • 主要介绍了Java HttpServletResponse响应实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • HttpServletResponse响应

    2015-09-20 20:45:00
    一、HttpServletResponse详解  定义,response对象值想客户端作出的响应。  我们以例子来说明: 字符流输出UTF-8中文数据响应到客户端package com.dp.java.response; import java.io.IOException; import java...
  • 最近公司在用ssm框架做一个web项目,采用的前后端分离,本人负责后端接口的开发,期间要用到HttpServletResponse、HttpServletRequest对数据进行处理。于是找了相关资料对其进行了学习,在此分享一些比较好的博客。 ...
  • HttpServletResponse 讲解

    千次阅读 2014-12-31 00:47:33
    1、HttpServletResponse简介 •WEB服务器回送给WEB客户端的HTTP响应消息分为三个部分: 状态行 响应消息头 消息正文(也叫实体内容) •Servlet API中定义的ServletResponse接口类用于创建响应消息。 ...
  • HttpServletResponse下载文件

    千次阅读 2018-11-23 22:43:23
    HttpServletResponse对象代表服务器的响应,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。使用HttpServletResponse输出文件,浏览器会解析内容,完成下载。 核心代码如下: public static ...
  • java HttpServletRequest HttpServletResponse 源码 request response
  • #学习笔记#HttpServletResponse

    万次阅读 2020-06-17 16:53:51
    HttpServletResponse类 1、HttpServletResponse的作用 HttpServletResponse与HttpServletRequest一样,每次请求进来,tomcat服务器都会创建一个Response对象传递给servlet程序去使用,我们如果需要设置返回给客户端...
  • HttpServletResponse源码介绍

    千次阅读 2016-11-10 19:28:05
    HttpServletResponse源码 public interface HttpServletResponse extends ServletResponse { int SC_CONTINUE = 100; int SC_SWITCHING_PROTOCOLS = 101; int SC_OK = 200; int SC_CREATED = 201;
  • 一、HttpServletResponse类的作用 HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。HttpServletRequest 表示请求过来的...
  • 主要介绍了Java中HttpServletResponse响应中文出现乱码问题的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • Java中,引入javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServletResponse包的必备jar包:org.apache.commons.httpclient.jar

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 352,611
精华内容 141,044
关键字:

httpservletresponse