J2EE Architecture(8)
J2EE Architecture(8)
1、过滤
过滤(filtering)是Servlet2.3版的新特性。过滤器(Filter)是轻量级的Web组件,能及时转换HttpServletRequest和HttpServletResponse对象的头和内容。
Filter和Servlet都是Web应用程序的一部分,都用生命期方法管理。
Filter为Servlet的请求/响应操作提供过滤服务。过滤器可以“过滤”传给Servlet的请求,也可以“过滤”将要从Servlet发送到客户端的响应,它们不仅处理静态内容,也处理动态内容。
Web应用程序可用的一些过滤组件如下:
1)身份验证Filter
2)加密Filter
3)转换Filter
开发人员可以通过Filter接口创建Filter。与Servlet一样,Filter的相关信息也在部署描述符中提供。
可通过定义部署描述符中的“Filter-映射”元素配置Filter或一些相关Filter的集合,以方便调用。
Filter的生命期:有3个方法用来管理Filter生命期。
1)init()方法;
init()方法用FilterConfig对象初始化Filter。
如初始化成功,就做好了“请求-响应”操作上执行过滤操作的准备。
当容器收到客户请求时,将使用Filter列表中的第一个Filter实例,并调用doFilter()方法。
2)doFilter()方法;
doFilter()方法会接收3个对象:HttpServletRequest、HttpServletResponse和FilterChain。
可按以下方法使用Web应用程序的Filter组件:
(1)分析HTTP请求的头;
(2)可能用HttpServletRequest的定制实现包装请求对象,以适当修改头或数据;
(3)可能用HttpServletRequest的定制实习包装响应对象,以适当修改头或数据;
(4)可能调用Filter链的下一项,下一项可能是另一个Filter,也可能是Servlet。
3)destroy()方法。
Filter的优势在于拥有很好的链式处理能力,允许利用可重用组件方便地组装Web应用程序。
2、会话
该规范目的在于将客户端绑定到特殊“会话”,以便将从客户端到Web应用程序的一系列请求/响应操作视为最终事务的组成部分。
Servlet支持以下会话跟踪机制。
1)Cookie
2)HTTP会话
3)URL重写
尽管Cookie式简洁的会话构建方式,但规范推荐将“URL重写”作为最小公分母,浏览器用户也可关闭此选项,以接收Cookie。
为客户端构建和管理会话要考虑:
1)创建一个“新”会话
2)客户端视图加入并继续参与“当前”会话
3)“完成”会话
会话的构建取决于企业的业务需要。
本规范有助于创建一个名为HttpSession的对象,Web应用程序可为特殊会话相应地使用HttpSession。
HttpSession API提供了通知方式。
HttpSession需处理几个问题,如分布式环境、多线程和超时等。HttpSession API提供了一些方法,如:getID()、isNew()、getAttribute()、setAttribute()、removeAttribute()、getCreationTime()、getLastAccessedTime()、getMaxInactiveInterval()、setMaxInactiveInterval()和invalidate()。
3、应用程序生命期事件
它指整个Web应用程序的生命期。它是Servlet2.3版的新特性。
Web应用程序周期的两个主要事件是:
1)应用程序启动
2)应用程序关闭
由ServletContext定义的上下文以及由HttpSession定义的会话都很重要。
Servlet2.3版为ServletContext和HttpSession确定了两个监听者(Listener)接口集。
ServletContextListener接口用于处理ServletContext的生命期,HttpSessionListener接口用于处理HttpSession的生命期。
同样,ServletContextAttributeListener和HttpSessionAttributeListener接口也有助于跟踪与它们各自的属性相关的事件。
4、安全性
企业应用程序需要以下一些基本安全功能:
1)身份验证
2)访问控制
3)数据完整性
4)保密性
可通过组合使用以下两种方式来确保Web应用程序的安全性:
1)声明性安全
声明性安全为Web应用程序提供粗粒度安全保护。
它通过部署描述符实现。将程序的安全性编写为XML文档,形成部署描述符的一部份。
2)编程性安全
编程性安全允许对Web应用程序的安全性进行更周详的控制。
它使用API对安全性进行精细控制。如getRemoteUser()、isUserInRole()和getUserPrincipal()等都是好方法。
5、部署描述符
Servlet2.3版要求使用必须的部署描述符,以记录Web应用程序的重要方面:
1)Servlet声明
2)Servlet映射
3)ServletContext初始化参数
4)会话声明
5)应用程序生命期监听者声明