第5章 响应
response对象封装所有从服务器要返回给客户端的所有信息。在HTTP协议中,这些信息从服务器传输给客户端,可以是HTTP header,也可以请求消息体。
5.1 缓冲
允许但不要求servlet容器出于效率考虑对发送给客户端的输出进行缓冲。通常进行缓冲的服务器会默认,但是允许servlet指定缓冲参数。
ServletResponse接口的下列方法允许servlet访问和设置缓冲信息:
• getBufferSize
• setBufferSize
• isCommitted
• reset
• resetBuffer
• flushBuffer
ServletResponse接口提供的这些方法允许执行缓冲操作,无论servlet是使用ServletOutputStream还是Writer。
getBufferSize方法返回正在使用的底层缓冲大小。如果没有正在使用的缓冲,该方法必须返回int值0。
servlet可以使用setBufferSize方法来请求一个希望的缓冲大小。分配的缓冲不要求是servlet请求的大小,但是不能比所请求的小。这使得容器可以使用一组规定大小的缓冲,如果合适的话提供更大的缓冲。该方法必须在使用ServletOutputStream或Writer输出内容之前调用。如果已经有内容输出,该方法将抛出IllegalStateException异常。
isCommitted方法返回一布尔值,指出是否已经有响应字节返回给客户端。flushBuffer方法强制缓冲中的内容输出到客户端。
reset方法在响应未被提交时清空缓冲中的数据,并且在reset调用之前,必须同时清空由servlet设置的header和状态码。resetBuffer方法则只在响应未被提交时清空缓冲内容,而不清空header和状态码。
如果响应已提交,并且调用了reset或resetBuffer方法,则必须抛出IllegalStateException异常。响应和相关缓冲不作修改。
当使用缓冲时,一旦缓冲填满,容器必须立即将缓冲内容刷新给客户端。如果这是发送给客户端的第一批数据,响应就被认为已提交。
5.2 Header
servlet可以通过HttpServletResponse接口的下列方法设置HTTP响应的header:
• setHeader
• addHeader
setHeader方法使用指定名称和值来设置header,原header被新header所替换。如果存在该名称的一组header值,那么这些值被清空,并用新值来替换。
addHeader方法使用指定的名称向集合中添加header值。如果还没有该名称的header,则创建一组新的。
header可以包含表示int或者Date对象的数据。HttpServletResponse接口的下列便捷方法允许servlet使用对应数据类型的正确格式来设置header:
• setIntHeader
• setDateHeader
• addIntHeader
• addDateHeader
要成功地传送回客户端,必须在响应提交之前设置header。在提交之后设置header会被servlet容器忽略。
servlet编程人员负责确保servlet生成内容时,response对象中正确设置了Content-Type header。HTTP 1.1规范不要求在HTTP响应中设置header。如果servlet编程人员没有设置该类型,servlet容器不可以设置默认内容类型。
5.3 便捷方法
HttpServletResponse接口提供下列便捷方法:
• sendRedirect
• sendError
sendRedirect方法将设置合适的header与内容体,将客户端重定向到另一个URL。使用相对URL路径调用该方法是合法的,不过底层容器必须将相对路径转换成全限定URL,返回给客户端。如果给出的是URL片段,并且因为某种原因不能转换成有效的URL,那么该方法必须抛出IllegalArgumentException异常。
sendError方法将设置合适的header与错误信息内容体,返回给客户端。可以给sendError方法提供一个可选的字符串参数,用于显示错误内容体。
如果响应还没有提交的话,这两个方法将提交响应,并且终止响应。在这些方法调用之后servlet不会再向客户端输出。如果有数据在这些方法调用之后输出到响应,那么将忽略这些数据。
如果数据已经被输出到响应缓冲,但是还没有返回给客户端(也就是响应未提交),那么响应缓冲中的数据必须被清空,用这些方法所设置的数据来替换。如果响应已提交,那么这些方法必须抛出IllegalStateException异常。
5.4 国际化
当客户端以特定语言请求一个文档,或者设置了语言偏好时,servlet将使用ServletResponse接口的setLocale方法设置响应的语言属性。该方法必须正确地设置Content-Language header(和HTTP/1.1规范描述的其他机制一样),以准确地将Locale通知给客户端。
开发人员最好是在调用ServletResponse接口的getWriter方法之前,调用setLocale方法。这将确保返回的PrintWriter已经正确地配置了目标Locale。
注意如果使用一个指定内容类型的charset组件调用setContentType,将在调用setLocale之前重写该组值。
如果servlet程序员未指定,响应编码默认为“ISO-8859-1”
5.5 Response对象的关闭
当响应关闭后,容器必须立即刷新客户端响应缓冲中保留的所有数据。下列事件表示servlet已经满足请求,并且响应对象将被关闭:
• servlet的service方法终止。
• response的setContentLength方法指定的内容大小已经输出到响应。
• 调用了sendError方法。
• 调用了sendRedirect方法。
5.6 Response对象的生命周期
每一个response对象只在servlet的service方法作用域,或者filter的doFilter方法作用域内有效。容器通常循环response对象以避免response对象创建所引起的性能开销。开发人员必须认识到在上述的作用域之外对response对象进行引用可能会导致无法预期的后果。
分享到:
相关推荐
6. **servlet2.3规范中文版.pdf**:Servlet 2.3版本的中文翻译版,便于中文读者理解和学习。 7. **servlet官方地址.txt**:可能是记录了Servlet官方文档或API的URL,供开发者查阅最新资料。 8. **servlet-2_5-mrel...
Tomcat 4与5之间的主要区别在于对Servlet和JSP规范的支持,Tomcat 5支持Servlet 2.4和JSP 2.0,而Tomcat 4支持Servlet 2.3和JSP 1.2。此外,Tomcat 5的默认连接器在性能上有所提升,例如通过共享后台处理线程优化了...
Tomcat 4和5之间存在一些差异,主要体现在对Servlet和JSP规范的支持上,Tomcat 5支持Servlet 2.4和JSP 2.0,而Tomcat 4则支持Servlet 2.3和JSP 1.2。此外,Tomcat 5在性能和功能上也有所提升,比如增强了安全性和可...
Tomcat5支持Servlet 2.4和JSP 2.0规范,而Tomcat4支持的是Servlet 2.3和JSP 1.2。Tomcat5的默认连接器比Tomcat4更高效,它们共享后台处理线程,减少了资源消耗。Tomcat5还简化了代码,不需要映射组件来查找子组件。 ...
- **规范支持**:Tomcat 5支持Servlet 2.4和JSP 2.0规范,而Tomcat 4仅支持Servlet 2.3和JSP 1.2。 - **连接器性能**:相比于Tomcat 4,Tomcat 5提供了更为高效的默认连接器。 - **线程模型**:Tomcat 5采用共享的...
- **Tomcat 4**:支持Servlet 2.3和JSP 1.2规范,组件间各自拥有独立的后台处理线程。 - **Tomcat 5**:支持Servlet 2.4和JSP 2.0规范,采用了更为高效的默认连接器,并且共享一个后台处理线程,从而提高了整体性能...
2.3 名称空间和dtd 43 2.4 小结 45 第3章 对xml文档进行分析 46 3.1 dom、sax和jaxp 46 3.2 使用dom解析xml文档 47 3.2.1 dom结构模型 47 3.2.2 dom解析器工厂 50 3.2.3 jaxp的错误类和异常类 52 3.2.4 用...
【JSP源码——866ccv3.0jtb.zip】是一个包含JSP(JavaServer Pages)源代码的压缩文件,很可能是一个基于Java Web的项目或应用程序的源代码库。这个版本号"3.0jtb"可能指的是该软件的特定版本,"jtb"可能是该项目的...
- **规范支持**:Tomcat 5 支持 Servlet 2.4 和 JSP 2.0 规范,而 Tomcat 4 只支持 Servlet 2.3 和 JSP 1.2。 - **性能优化**:相较于 Tomcat 4,Tomcat 5 在某些方面进行了优化,提高了处理效率。 #### 六、深入...
Servlet过滤器的概念首次出现在Java Servlet规范2.3版中,它为开发者提供了一种灵活的方式来处理各种请求前后的任务。 #### 过滤器的功能 Servlet过滤器的主要功能包括但不限于: - 在Servlet被调用之前检查`...
首先,我们来探讨EasyJForum的核心技术——Java和JSP。Java是一种广泛使用的面向对象的编程语言,具有跨平台、安全性高和性能优异的特点。JSP(JavaServer Pages)则是Java在Web开发中的一个重要工具,它允许开发者...
### AJAX入门学习——ajax4jsf #### 一、引言 AJAX(Asynchronous JavaScript and XML)技术自诞生以来,极大地改善了Web应用程序的用户体验。`ajax4jsf`作为一个专门为JSF(JavaServer Faces)框架设计的AJAX组件...
### JSP教程——必看.pdf 知识点详解 #### 第1章 JSP简介 - **1.1 什么是JSP** - JSP(JavaServer Pages)是一种基于Java技术的服务器端脚本语言,用于生成动态网页内容。它允许在HTML页面中嵌入Java代码,从而...
- **6.2.2 实例——Servlet版本HelloWorld**:通过创建一个简单的 HelloWorld 示例来演示如何使用 Servlet 处理请求。 #### 第7章 数据操作 在这一章中,将介绍如何在 Google App Engine 上进行数据操作: ##### ...
不同之处在于: - **JSP**:主要用于处理视图层逻辑,更加面向前端开发者。 - **Servlet**:可以处理复杂的业务逻辑,更适合后端开发者。 #### 第2章 JSP 语法 ##### 2.1 JSP 页面的基本结构 JSP页面通常包含三...
Tomcat 8.0.5是Tomcat 8系列的一个稳定版本,它主要支持Java Servlet 3.1和JSP 2.3规范。此版本可能包含了对之前版本的一些错误修复,性能优化以及安全更新。在使用8.0.5时,开发者可以期待更好的兼容性和可靠性,这...
任何支持Servlet 2.3和JSP 1.2标准的Web服务器都应与OSCache兼容。 - **可选的缓存区**:支持内存、硬盘或同时使用两者作为缓存区,甚至可以使用自定义资源(需自行提供适配器)。其中,内存缓存提供最佳性能,硬盘...