J2EE Architecture(7)
1、Servlet上下文
Web服务器能支持若干Web应用程序。每个Web应用程序又能支持一个或多个Servlet。
同一个Web应用程序的多个Servlet需要共享Web应用程序环境的资源。为此,Servlet规范提供了一个ServletContext接口。
Servlet可利用ServletContext对象执行登陆事件,获得资源的URL索引,也可设置和存储Web应用程序需要的属性。
对于ServletContext而言,最重要的上下文信息包括:
1)初始化参数
用来初始化应用程序。这些参数由部署描述符中的“键-值”对提供。
ServletContext API允许通过getInitParameter()和getInitParameterNames()等方法访问这些初始化参数。
2)上下文属性
是一组应用程序属性,由Web应用程序的Servlet共享。
可设置和获得参数,也可通过编程方法,从Web应用程序中删除上下文属性。
ServletContext API允许通过多种方法访问上下文属性:setAttribute()、getAttribute()、removeAttribute()和getAttributeNames()等。
3)资源
“静态”内容文件的层次,是Web应用程序的一部分,被称为“Web应用程序资源”,包括HTML、GIF和JPEG等文件。
ServletContext API可通过多种方式访问这些资源,如getResource()和getResourceAsStream()等。
2、请求
Servlet的服务方法有权访问请求对象ServletRequest或HttpServletRequest。
请求对象包含客户请求及其它一些相关信息,该对象将用作传给service()方法的两个参数中的第一个参数。
请求参数采用“键-值”对格式。在特定环境下,一些键可能有多个值。
HttpServletRequest对象的几个重要方面如下:
1)属性
是与HttpServletRequest对象相关的对象。
属性也采用“键-值”对形式,但一个属性仅有一个值。
HttpServletRequest API可用多种方法访问属性:getAttribute()、setAttribute()和getAttributeNames()等。
2)头
头是HTTP请求的一部分,Servlet可通过HttpServletRequest API方法,如getHeader()、getHeaders()或getHeaderNames()等访问这些头信息。
HttpServletRequest对象的头可能包含integer、date的文本表示。为了访问它们,HttpServletRequest API提供了getIntHeader()和getDateHeader()方法。
3)Cookie
HTTP请求通常伴随着一个或多个Cookie,这些Cookie包含宝贵数据。
Cookie可以帮助Web应用程序构建客户端和服务器应用之间的会话。
HttpServletRequest API提供诸如getCookie()的方法,以便访问Cookie,并创建和维护会话。
3、响应
Servlet的服务方法有权访问响应对象。响应对象将是ServletResponse或HttpServletResponse。该对象包含了响应客户端的信息和所有其它相关细节,是service()方法两个参数的第二个参数。
客户端响应打包在HttpServletResponse对象在。HttpServletResponse对象的重要组成部分有:
1)头
发送给客户端的头信息可通过HttpServletResponse API获得。
诸如addHeader()方法可用于创建发送给客户端的头信息。
setHeader()方法可用于设置相应头的头值。
对于特定的类型,如integer和date型,HttpServletResponse API提供了addIntHeader()、setIntHeader()、addDateHeader()和setDateHeader()方法。
2)缓冲区
Servlet容器可以提供缓冲区功能,以增强“请求-响应”操作的性能和效率。
一些缓冲区功能可通过setBufferSize()、getBufferSize()、isCommitted()、reset()、resetBuffer()和flushBuffer()等方法实现。
3)响应类型和格式
发送给客户端的输出需要进行相应设置和简化。
为此,HttpServletResponse API提供了以下方法:setContentType()、setContentLength()、getWriter()、getOutputStream()等。
开发人员需要根据setContentType()方法设置的内容类型设置响应格式。
例如:若setContentType()方法被设置为text/html类型,开发人员就需要根据业务需求设置相应的输出格式。
编程人员在设计应用程序时,要认真选择输出的内容类型。还要理解输出的表示部分,并全面了解HTML等表示语言的语法。
----------------------------
完成了HttpServletResponse对象就意味着service()方法执行结束。
在关闭响应时,Servlet容器必须清空客户响应缓冲区剩余的所有内容。