Java-ServletResponse-ServletResponseWrapper
/**
* Defines an object to assist a servlet in sending a response to the client.
* The servlet container creates a <code>ServletResponse</code> object and
* passes it as an argument to the servlet's <code>service</code> method.
*
* <p>To send binary data in a MIME body response, use
* the {@link ServletOutputStream} returned by {@link #getOutputStream}.
* To send character data, use the <code>PrintWriter</code> object
* returned by {@link #getWriter}. To mix binary and text data,
* for example, to create a multipart response, use a
* <code>ServletOutputStream</code> and manage the character sections
* manually.
*
* <p>The charset for the MIME body response can be specified
* explicitly using the {@link #setCharacterEncoding} and
* {@link #setContentType} methods, or implicitly
* using the {@link #setLocale} method.
* Explicit specifications take precedence over
* implicit specifications. If no charset is specified, ISO-8859-1 will be
* used. The <code>setCharacterEncoding</code>,
* <code>setContentType</code>, or <code>setLocale</code> method must
* be called before <code>getWriter</code> and before committing
* the response for the character encoding to be used.
* <p>See the Internet RFCs such as
* <a href="http://www.ietf.org/rfc/rfc2045.txt">
* RFC 2045</a> for more information on MIME. Protocols such as SMTP
* and HTTP define profiles of MIME, and those standards
* are still evolving.
* @author Various
* @version $Version$
*
* @see ServletOutputStream
*
*/
public interface ServletResponse {
/**
* Returns the name of the character encoding (MIME charset)
* used for the body sent in this response.
* The character encoding may have been specified explicitly
* using the {@link #setCharacterEncoding} or
* {@link #setContentType} methods, or implicitly using the
* {@link #setLocale} method. Explicit specifications take
* precedence over implicit specifications. Calls made
* to these methods after <code>getWriter</code> has been
* called or after the response has been committed have no
* effect on the character encoding. If no character encoding
* has been specified, <code>ISO-8859-1</code> is returned.
* <p>See RFC 2047 (http://www.ietf.org/rfc/rfc2047.txt)
* for more information about character encoding and MIME.
* @return a <code>String</code> specifying the
* name of the character encoding, for
* example, <code>UTF-8</code>
*/
//获得返回body的字符类型
public String getCharacterEncoding();
/**
* Returns the content type used for the MIME body
* sent in this response. The content type proper must
* have been specified using {@link #setContentType}
* before the response is committed. If no content type
* has been specified, this method returns null.
* If a content type has been specified and a
* character encoding has been explicitly or implicitly
* specified as described in {@link #getCharacterEncoding},
* the charset parameter is included in the string returned.
* If no character encoding has been specified, the
* charset parameter is omitted.
*
* @return a <code>String</code> specifying the
* content type, for example,
* <code>text/html; charset=UTF-8</code>,
* or null
*
* @since 2.4
*/
//body中的文件类型
public String getContentType();
/**
* Returns a {@link ServletOutputStream} suitable for writing binary
* data in the response. The servlet container does not encode the
* binary data.
* <p> Calling flush() on the ServletOutputStream commits the response.
* Either this method or {@link #getWriter} may
* be called to write the body, not both.
* @return a {@link ServletOutputStream} for writing binary data
* @exception IllegalStateException if the <code>getWriter</code> method has been called on this response
* @exception IOException if an input or output exception occurred
* @see #getWriter
*/
//
public ServletOutputStream getOutputStream() throws IOException;
/**
* Returns a <code>PrintWriter</code> object that
* can send character text to the client.
* The <code>PrintWriter</code> uses the character
* encoding returned by {@link #getCharacterEncoding}.
* If the response's character encoding has not been
* specified as described in <code>getCharacterEncoding</code>
* (i.e., the method just returns the default value
* <code>ISO-8859-1</code>), <code>getWriter</code>
* updates it to <code>ISO-8859-1</code>.
* <p>Calling flush() on the <code>PrintWriter</code>
* commits the response.
* <p>Either this method or {@link #getOutputStream} may be called
* to write the body, not both.
* @return a <code>PrintWriter</code> object that
* can return character data to the client
* @exception UnsupportedEncodingException
* if the character encoding returned
* by <code>getCharacterEncoding</code> cannot be used
* @exception IllegalStateException
* if the <code>getOutputStream</code>
* method has already been called for this
* response object
* @exception IOException
* if an input or output exception occurred
* @see #getOutputStream
* @see #setCharacterEncoding
*
*/
//
public PrintWriter getWriter() throws IOException;
/**
* Sets the character encoding (MIME charset) of the response
* being sent to the client, for example, to UTF-8.
* If the character encoding has already been set by
* {@link #setContentType} or {@link #setLocale},
* this method overrides it.
* Calling {@link #setContentType} with the <code>String</code>
* of <code>text/html</code> and calling
* this method with the <code>String</code> of <code>UTF-8</code>
* is equivalent with calling
* <code>setContentType</code> with the <code>String</code> of
* <code>text/html; charset=UTF-8</code>.
* <p>This method can be called repeatedly to change the character
* encoding.
* This method has no effect if it is called after
* <code>getWriter</code> has been
* called or after the response has been committed.
* <p>Containers must communicate the character encoding used for
* the servlet response's writer to the client if the protocol
* provides a way for doing so. In the case of HTTP, the character
* encoding is communicated as part of the <code>Content-Type</code>
* header for text media types. Note that the character encoding
* cannot be communicated via HTTP headers if the servlet does not
* specify a content type; however, it is still used to encode text
* written via the servlet response's writer.
* @param charset a String specifying only the character set
* defined by IANA Character Sets
* (http://www.iana.org/assignments/character-sets)
* @see #setContentType
* #setLocale
* @since 2.4
*
*/
//设置字符类型
public void setCharacterEncoding(String charset);
/**
* Sets the length of the content body in the response
* In HTTP servlets, this method sets the HTTP Content-Length header.
* @param len an integer specifying the length of the
* content being returned to the client; sets the Content-Length header
*/
//设置response body中内容的长度
public void setContentLength(int len);
/**
* Sets the content type of the response being sent to
* the client, if the response has not been committed yet.
* The given content type may include a character encoding
* specification, for example, <code>text/html;charset=UTF-8</code>.
* The response's character encoding is only set from the given
* content type if this method is called before <code>getWriter</code>
* is called.
* <p>This method may be called repeatedly to change content type and
* character encoding.
* This method has no effect if called after the response
* has been committed. It does not set the response's character
* encoding if it is called after <code>getWriter</code>
* has been called or after the response has been committed.
* <p>Containers must communicate the content type and the character
* encoding used for the servlet response's writer to the client if
* the protocol provides a way for doing so. In the case of HTTP,
* the <code>Content-Type</code> header is used.
* @param type a <code>String</code> specifying the MIME
* type of the content
* @see #setLocale
* @see #setCharacterEncoding
* @see #getOutputStream
* @see #getWriter
*
*/
//返回给客户端的内容类型,text/html;charset=UTF-8
public void setContentType(String type);
/**
* Sets the preferred buffer size for the body of the response.
* The servlet container will use a buffer at least as large as
* the size requested. The actual buffer size used can be found
* using <code>getBufferSize</code>.
* <p>A larger buffer allows more content to be written before anything is
* actually sent, thus providing the servlet with more time to set
* appropriate status codes and headers. A smaller buffer decreases
* server memory load and allows the client to start receiving data more
* quickly.
* <p>This method must be called before any response body content is
* written; if content has been written or the response object has
* been committed, this method throws an
* <code>IllegalStateException</code>.
* @param size the preferred buffer size
* @exception IllegalStateException if this method is called after
* content has been written
* @see #getBufferSize
* @see #flushBuffer
* @see #isCommitted
* @see #reset
*
*/
//response body缓冲区大小
public void setBufferSize(int size);
/**
* Returns the actual buffer size used for the response. If no buffering
* is used, this method returns 0.
* @return the actual buffer size used
* @see #setBufferSize
* @see #flushBuffer
* @see #isCommitted
* @see #reset
*/
//获得response使用的真是的缓冲区大小
public int getBufferSize();
/**
* Forces any content in the buffer to be written to the client. A call
* to this method automatically commits the response, meaning the status
* code and headers will be written.
* @see #setBufferSize
* @see #getBufferSize
* @see #isCommitted
* @see #reset
*/
//刷新缓冲区内容到客户端
public void flushBuffer() throws IOException;
/**
* Clears the content of the underlying buffer in the response without
* clearing headers or status code. If the
* response has been committed, this method throws an
* <code>IllegalStateException</code>.
* @see #setBufferSize
* @see #getBufferSize
* @see #isCommitted
* @see #reset
*
* @since 2.3
*/
//
public void resetBuffer();
/**
* Returns a boolean indicating if the response has been
* committed. A committed response has already had its status
* code and headers written.
* @return a boolean indicating if the response has been
* committed
* @see #setBufferSize
* @see #getBufferSize
* @see #flushBuffer
* @see #reset
*
*/
//
public boolean isCommitted();
/**
* Clears any data that exists in the buffer as well as the status code and
* headers. If the response has been committed, this method throws an
* <code>IllegalStateException</code>.
*
* @exception IllegalStateException if the response has already been
* committed
* @see #setBufferSize
* @see #getBufferSize
* @see #flushBuffer
* @see #isCommitted
*/
public void reset();
/**
* Sets the locale of the response, if the response has not been
* committed yet. It also sets the response's character encoding
* appropriately for the locale, if the character encoding has not
* been explicitly set using {@link #setContentType} or
* {@link #setCharacterEncoding}, <code>getWriter</code> hasn't
* been called yet, and the response hasn't been committed yet.
* If the deployment descriptor contains a
* <code>locale-encoding-mapping-list</code> element, and that
* element provides a mapping for the given locale, that mapping
* is used. Otherwise, the mapping from locale to character
* encoding is container dependent.
* <p>This method may be called repeatedly to change locale and
* character encoding. The method has no effect if called after the
* response has been committed. It does not set the response's
* character encoding if it is called after {@link #setContentType}
* has been called with a charset specification, after
* {@link #setCharacterEncoding} has been called, after
* <code>getWriter</code> has been called, or after the response
* has been committed.
* <p>Containers must communicate the locale and the character encoding
* used for the servlet response's writer to the client if the protocol
* provides a way for doing so. In the case of HTTP, the locale is
* communicated via the <code>Content-Language</code> header,
* the character encoding as part of the <code>Content-Type</code>
* header for text media types. Note that the character encoding
* cannot be communicated via HTTP headers if the servlet does not
* specify a content type; however, it is still used to encode text
* written via the servlet response's writer.
* @param loc the locale of the response
* @see #getLocale
* @see #setContentType
* @see #setCharacterEncoding
*/
public void setLocale(Locale loc);
/**
* Returns the locale specified for this response
* using the {@link #setLocale} method. Calls made to
* <code>setLocale</code> after the response is committed
* have no effect. If no locale has been specified,
* the container's default locale is returned.
* @see #setLocale
*/
public Locale getLocale();
}
/**
*
* Provides a convenient implementation of the ServletResponse interface that
* can be subclassed by developers wishing to adapt the response from a Servlet.
* This class implements the Wrapper or Decorator pattern. Methods default to
* calling through to the wrapped response object.
*
* @author Various
* @version $Version$
* @since v 2.3
*
* @see javax.servlet.ServletResponse
*
*/
public class ServletResponseWrapper implements ServletResponse {
private ServletResponse response;
/**
* Creates a ServletResponse adaptor wrapping the given response object.
* @throws java.lang.IllegalArgumentException if the response is null.
*/
public ServletResponseWrapper(ServletResponse response) {
if (response == null) {
throw new IllegalArgumentException("Response cannot be null");
}
this.response = response;
}
/**
* Return the wrapped ServletResponse object.
*/
public ServletResponse getResponse() {
return this.response;
}
/**
* Sets the response being wrapped.
* @throws java.lang.IllegalArgumentException if the response is null.
*/
public void setResponse(ServletResponse response) {
if (response == null) {
throw new IllegalArgumentException("Response cannot be null");
}
this.response = response;
}
/**
* The default behavior of this method is to call setCharacterEncoding(String charset)
* on the wrapped response object.
*
* @since 2.4
*/
public void setCharacterEncoding(String charset) {
this.response.setCharacterEncoding(charset);
}
/**
* The default behavior of this method is to return getCharacterEncoding()
* on the wrapped response object.
*/
public String getCharacterEncoding() {
return this.response.getCharacterEncoding();
}
/**
* The default behavior of this method is to return getOutputStream()
* on the wrapped response object.
*/
public ServletOutputStream getOutputStream() throws IOException {
return this.response.getOutputStream();
}
/**
* The default behavior of this method is to return getWriter()
* on the wrapped response object.
*/
public PrintWriter getWriter() throws IOException {
return this.response.getWriter();
}
/**
* The default behavior of this method is to call setContentLength(int len)
* on the wrapped response object.
*/
public void setContentLength(int len) {
this.response.setContentLength(len);
}
/**
* The default behavior of this method is to call setContentType(String type)
* on the wrapped response object.
*/
public void setContentType(String type) {
this.response.setContentType(type);
}
/**
* The default behavior of this method is to return getContentType()
* on the wrapped response object.
*
* @since 2.4
*/
public String getContentType() {
return this.response.getContentType();
}
/**
* The default behavior of this method is to call setBufferSize(int size)
* on the wrapped response object.
*/
public void setBufferSize(int size) {
this.response.setBufferSize(size);
}
/**
* The default behavior of this method is to return getBufferSize()
* on the wrapped response object.
*/
public int getBufferSize() {
return this.response.getBufferSize();
}
/**
* The default behavior of this method is to call flushBuffer()
* on the wrapped response object.
*/
public void flushBuffer() throws IOException {
this.response.flushBuffer();
}
/**
* The default behavior of this method is to return isCommitted()
* on the wrapped response object.
*/
public boolean isCommitted() {
return this.response.isCommitted();
}
/**
* The default behavior of this method is to call reset()
* on the wrapped response object.
*/
public void reset() {
this.response.reset();
}
/**
* The default behavior of this method is to call resetBuffer()
* on the wrapped response object.
*/
public void resetBuffer() {
this.response.resetBuffer();
}
/**
* The default behavior of this method is to call setLocale(Locale loc)
* on the wrapped response object.
*/
public void setLocale(Locale loc) {
this.response.setLocale(loc);
}
/**
* The default behavior of this method is to return getLocale()
* on the wrapped response object.
*/
public Locale getLocale() {
return this.response.getLocale();
}
}
Java-ServletResponse-ServletResponseWrapper的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java Servlet(四):Servlet接口service工作(ServletRequest,ServletResponse对象)(jdk7+tomcat7+eclipse)
本篇将会记录,Servlet接收客户端传递来的参数信息,并返回信息使用的对象,及这些对象的函数相关用法. 还是在java ee工程中进行操作,在WebContent目录下创建一个login.jsp文件 ...
- [原创]java WEB学习笔记09:ServletResponse & HttpServletResponse
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Java EE javax.servlet中的ServletResponse接口
ServletResponse接口 public interface ServletResponse 子接口:HttpServletResponse 实现类:HttpServletResponseWr ...
- java web servlet
一.什么是Servlet Servlet是一种小型的Java程序,它扩展了Web服务器的功能.作为一种服务器端的应用,他是运行在Servlet容器当中,例如Tomcat就是一种流行的Servlet容器 ...
- java HttpServletRequest和HttpServletResponse詳解
這篇文章主要介紹瞭java HttpServletRequest和HttpServletResponse詳解的相關資料,需要的朋友可以參考下 java HttpServletRequest和HttpS ...
- Java精选笔记_Servlet技术
Servlet技术 Servlet开发入门 Servlet接口 针对Servlet技术的开发,SUN公司提供了一系列接口和类,其中最重要的是javax.servlet.Servlet接口. Servl ...
- 《Tomcat与Java Web开发技术详解》思维导图
越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...
- [原创]java WEB学习笔记15:域对象的属性操作(pageContext,request,session,application) 及 请求的重定向和转发
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Java HttpServletRequest中getAttribute()方法和getParameter()区别
一.ServletRequest接口 HttpServletRequest接口继承了ServletRequest接口,实现类通常代表一个实际的Http Request. Servlet容器负责创建一个 ...
随机推荐
- ObjectOutputStream 和 ObjectInputStream的使用
一.看一下API文档 ObjectOutputStream : ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInp ...
- ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS下使用传感器和执行器
ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS使用传感器和执行器 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第四 ...
- SpriteKit中的共享动作(Sharing Actions)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在SpriteKit中某些动作需要一些额外的延时,如果每次都重 ...
- 使用Fresco实现简单的显示一张图片
使用Fresco实现显示一张图片 仅仅是下载一张图片,在下载完之前,先显示一张站位图 效果图 源码 下载地址(Android Studio工程):http://download.csdn.net/de ...
- Linux--Web应用服务和MySQL数据库
(1) WWW是一种交互式图形界面的Internet服务,具有强大的信息连接功能,是 人们在网上查找.浏览信息的主要手段.它使得成千上万的用户通过简单的 图形界面就可以获取各个大学.组织.公司 ...
- 创建银行API
DECLARE lc_output VARCHAR2(3000); lc_msg_dummy VARCHAR2(3000); lc_return_status VARCHAR2(3000); lc_m ...
- linux真正使用shell脚本做定时任务 关键的Nohup
网上有很多的文章教大家使用定时任务,所以别的废话我就不多说了 我这里直接有SH来做定时,只是有一点大家不知道,一定要用Nohup,否则用户退出终端以后,SH任务会被自动终止掉 假设有一 tash.sh ...
- love~LBJ,奥布莱恩神杯3
时间:2016年6月20日8:00:地点:美国金州甲骨文(Oracle)球馆:事件:G7大战,又一次见证伟大赛季奥布莱恩神杯得主--金州勇士VS克利夫兰骑士...... 可以说,这是NBA以来 ...
- Android 导入v7包常见错误,以及项目引用v7包错误解决
android下v4 v7 v21等包是android系统的扩展支持包,就想windows的系统补丁一个道理. android的扩展包主要是用来兼容低版本的,比如android3.0以后出现 ...
- 【如何快速的开发一个简单的iOS直播app】(代码篇)
开篇([如何快速的开发一个完整的iOS直播app](原理篇)) 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金量 ...