论文部分内容阅读
摘要:该文阐述了JSF,Spring和Hibernate并对这三个技术进行整合,构建了一个电子商务应用系统。该系统采用B/S三层结构,其中表现层(view)使用JSF技术进行动态页面的设计, 模型层和控制层采用了POJO和Spring技术来实现。本系统重在整合三个框架,发挥各个框架的优越性,将三个框架很好地融于了MVC体系结构中。该系统的功能是用户可以浏览产品目录和查看产品细节,管理员能对产品进行增加、删除、修改等维护操作。
关键词:JavaServerFace;框架;B/S
中图法分类号:TP311文献标识码:A文章编号:1009-3044(2010)22-6131-04
The Design of an E-commerce System Based on JSF
CHENG Shao-li
(Heilongjiang Provincial Party Committee School, Harbin 150000, China)
Abstract: This thesis outlines JSF, Spring and Hibernate and integrates these to built the actual e-business applications. In the design, the system use three-tier structure base on B/S model. JSF is used to design dynamic pages in view layer. At the same time, model and control layer applies POJO and Spring. The system focuses on integration of the three frameworks, making good use of the three frameworks and intergrating them into MVC model. Users can browse the product catalog and view product details and administrators have some maintain operations as add, delete, modify,etc.
Key words: JavaServerFace; frameworks; B/S
随着互联网技术的迅速发展,网络已逐渐深入人心,更是成为继报刊、电视、广播等传统媒体之后而兴起的一新传媒介质,网络宣传已成为众多宣传手段的重中之重,各种各样的网站应运而生,充斥着我们的视野,满足着我们生活学习等各方面的需要。当代企业借助于互联网快速的信息传递加速自身的发展。企业网站的规划与建设这一研究课题,也自然而然地成为当今乃至今后一段很长时间内,企业内部和互联网上的一个相当重要的讨论对象。近几年,网上购物成为人们的新宠,电子商务网站的规划与建设是当今乃至今后很长时间一段内企业内部和互联网上的一个相当重要的讨论对象。
本文以Eclipse+MyEclipse6.5+Apache-tomcat-6.0.20为系统开发平台,以MySQL为后台数据库,使用Browser/Server(B/S)数据库应用模式,开发了一个电子商务应用系统。系统整合了JSF,Spring和Hibernate三个框架并很好地将三个框架融入MVC模式中。
1 相关知识介绍
Eclipse是著名的跨平台的自由集成开发环境(IDE)。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench,简称MyEclipse)是对Eclipse IDE的扩展,利用它可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,JavaScript,SQL,Hibernate。简单而言,My Eclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。
Tomcat服务器是一个免费的开放源代码的Web应用服务器。Tomcat很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个程序员都可以更改它或在其中加入新的功能。Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
MySQL是一个小型关系型数据库管理系统,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
Java Server Faces(简称JSF),是Java Web应用的用户界面框架,其设计目标是简化Web应用的开发和维护[1]。JSF是一种用于构建Java Web应用程序的新型框架标准,它提供了一种以组件为中心开发Java Web用户界面的方法,同时JSF也遵循了MVC模式设计,确保了应用程序具有更高的可维护性和可扩展性。
Spring是一款近年来非常流行的、开源的开发框架,利用该框架的IoC和AOP机制可以实现多层的Java EE应用程序开发[2]。Spring是一款全方位的整合框架,在Spring框架下能实现多个子框架的组合,这些子框架之间彼此独立,当使用其他框架方案替代现有框架时,不会影响系统其它的框架实现部分,极大地降低了系统修改的工作量。
目前最流行的开源ORM(Object Relational Mapping对象关系映射)框架就是Hibernate,它的轻量级ORM模型逐步确立了在Java ORM架构中的领导地位,甚至取代复杂而又繁琐的EJB模型而成为事实上的Java ORM工业标准[3]。
2 系统结构及模块分析
根据电子商务系统的功能需求,确定了该系统主要有管理员和普通用户两种角色,不同角色的基本任务如下:
1)管理员可以浏览产品列表并查看产品信息,可以对现有产品实现新增、更新和删除等操作。
2)用户可以浏览产品类别并查看产品详细信息,用户可以通过发邮件的方式联系管理员。
该系统未经过登录功能进入网站的用户视为普通用户,该类用户只具有浏览产品信息和发送邮件两个功能。管理员登录系统前只具有普通用户的功能,登陆后可以以列表形式浏览产品信息,并可以对每一项产品进行查看详细信息、更新和删除操作,退出登录后又变成普通用户。
本系统分为7个模块,用户未登录时可以使用发送邮件和浏览产品功能,登陆后可以使用添加产品、更新产品、删除产品以及退出登录功能。本系统UML活动关系图如图1所示。
该系统采取多层架构方案,整个系统分为多个功能单元:客户端(Client)、表现层(Presentation)、业务逻辑层(Business-logic)、数据访问层(Integration)和企业信息系统(EIS),各功能单元的关系如图2所示。
在上述结构图中,各个功能单元的作用描述如下所示。
1)客户端
客户端是使用和显示数据模型的地方,对于一个Web程序来说,客户端通常指用户浏览器,基于浏览器的瘦客户端不包含任何表示逻辑,它依赖于表现层。
2)表现层
表现层将业务逻辑层的服务显示给用户,它应知道如何处理用户的请求,如何同业务逻辑层交互,并且知道如何选择下一个视图显示给用户。
3)业务逻辑层
业务逻辑层包含应用的Business objects和Businessservices。业务逻辑层接受来自于表现层的请求,基于请求处理业务逻辑。业务逻辑层组件将受益于系统级的服务,如安全管理、事务管理和资源管理等。
4)数据访问层
数据访问层是介于业务逻辑层和EIS层之间的桥梁,它封装了与EIS层交互的逻辑。有时将数据访问层和业务逻辑层合称为中间层。
5)EIS层
应用的数据被保存在EIS层中,它包括关系数据库、面向对象数据库和以及信息系统等。
采取上述多层框架,可以清晰划分各功能单元的职责,使系统更易于维护和扩展。实践证明具有三层或等多层的系统比CS模型具有更好的伸缩性和灵活性。
3 具体设计及实现
JCatalog电子商务系统它能够采用了多层非分布式的架构,系统的分层结构预计每一层选择的技术如图3所示。该图同时又是系统的部署图,它的表现层、业务逻辑层和数据访问层将存在于同一个Web容器中。
3.1 系统框架设计
Spring、Hibernate和JSF框架整合的实现方案中,Spring是一个整合框架,通过它可以实现Hibernate和JSF子框架之间的整合,降低不同子框架之间的耦合性。
Spring提供一个轻量级容器,在该方案中承担的整合任务有以下几个方面。
·管理系统的DAO实例,DAO部分基于Hibernate实现,负责与数据库交互。
·管理业务逻辑实例,将DAO实例注入给业务逻辑实例并实现事务管理。
·管理JSF的Managed-Bean实例,将业务逻辑实例注入给Managed-Bean实例。
·承担整合Log4j日志工具等其他功能。
3.2 Spring与Hibernate整合实现DAO
数据访问对象DAO模式是JAVA EE核心设计模式,用来抽象和封装所有对数据源的访问。DAO管理着与数据源的连接以便检索和存储数据,实现了数据访问和业务逻辑的分离,以及业务数据的对象化封装[4]。本系统的框架中采用Spring和Hibernate结合来实现系统的DAO层。下面首先介绍Spring整合Hibernate的基本配置,DAO实现类将在各个功能实现中介绍。
Session是Hibernate持久化操作的基础,而SessionFactory用来创建和维护Session实例。Hibernate的基础配置是围绕着SessionFactory展开的,关于SessionFactory的配置一般在系统的hibernate.cfg.xml文件或者hibernate.properties文件中[5]。
Spring与Hibernate整合后,Hibernate部分的配置信息业放到了Spring的配置文件中,交由Spring容器管理,不再需要hibernate.cfg.xml文件或者hibernate.properties配置文件。
Spring配置文件默认为applicationContext.xml,在工程/WEB-IF目录中,也可以通过web.xml文件指定。本系统Spring的核心配置文件采用了默认方式,系统通过在web.xml中配置Spring的ContextLoaderServlet类来加载配置文件,Spring在web.xml中的配置代码如下。
SpringContextServlet
org.springframework.web.context.ContextLoaderServlet
1
系统启动时首先加载web.xml配置文件,然后通过ContextLoaderServlet配置加载Spring的applicationContext.xml配置文件。在applicationContext.xml文件中定义了Hibernate框架所需数据库的连接参数[6],具体定义代码如下所示。
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
com.mysql.jdbc.Driver
jdbc:mysql:/127.0.0.1:3306/catalog
root
123456
Translator"/>
在上述配置中,定义了hibernateTemplate。hibernateTemplate负责管理原有Hibernate的SessionFactory和Session等。
业务逻辑层是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定业务流程的实现等与业务需求有关的系统设计,也就是说与系统所应对的领域逻辑有关,通常也将业务逻辑层称为领域层。
在轻量级JavaEE架构中,DAO组件通常并不管理事物,而将事务管理延迟到业务逻辑层中,通过Spring的声明式事务管理,让业务逻辑层对象的方法具备事务性。
3.3 Spring与JSF整合管理Managed-Bean
Managed-Bean充当JSF框架的模型部分,用于表单信息的封装和业务逻辑处理的调用。Managed-Bean承担了原有Struts框架中ActionForm和Action两者的功能。
Spring通过ServiceLocator方式将JSF进行整合。本系统所有涉及业务逻辑对象调用的Managed-Bean类在定义时都继承了一个BaseBean类。BaseBean类负责从Spring容器中获取所需的Service业务逻辑对象,从而完成业务逻辑对象与Managed-Bean对象之间的调用[7]。
3.4 系统访问权限设计
本系统的用户分为普通用户和管理员两种角色。未登录的用户为普通用户,不具有产品添加和维护权限。权限控制部分采取了过滤器方式实现。过滤器的功能类似于操作系统的防火墙,用户请求时首先需要通过防火墙的允许才能访问资源,如果防火墙不允许,则将拒绝访问。
本系统过滤器的实现为SecurityFilter.java,在编写时必须实现javax.servlet. Filter接口,实现的部分代码如下所示。
public class SecurityFilter implements Filter {
//登录页面的URL地址
private static final String LOGIN_PAGE_URI = "login.jsf";
//获取记录器对象
private Log logger = LogFactory.getLog(this.getClass());
//a set of restricted resources
private Set restrictedResources;
//将受权限控制的页面访问地址放入restrictedResources集合
public void init(FilterConfig filterConfig) throws ServletException {
this.restrictedResources = new HashSet();
this.restrictedResources.add("/createProduct.jsf");
this.restrictedResources.add("/editProduct.jsf");
this.restrictedResources.add("/productList.jsf");
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
this.logger.debug("doFilter");
String contextPath = ((HttpServletRequest)req).getContextPath();
String requestUri = ((HttpServletRequest)req).getRequestURI();
this.logger.debug("contextPath = " + contextPath);
this.logger.debug("requestUri = " + requestUri);
//判断访问地址是否在集合中
if (this.contains(requestUri, contextPath) && !this.authorize((HttpServletRequest)req)) {
this.logger.debug("authorization failed");
((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req, res);
}
else {
this.logger.debug("authorization succeeded");
chain.doFilter(req, res);
}
}
public void destroy() {}
//判断访问的地址是否在restrictedResources集合中包含
private boolean contains(String value, String contextPath) {
Iterator ite = this.restrictedResources.iterator();
while (ite.hasNext()) {
String restrictedResource = (String)ite.next();
if ((contextPath + restrictedResource).equalsIgnoreCase(value)) {
return true;
}
}
return false;
}
4 结束语
JSF作为一种用于构建Java Web应用程序的新型框架标准,将它与近年来最流行的、开源的开发框架Spring以及目前最流行的开源ORM(Object Relational Mapping对象关系映射)框架Hibernate相结合,设计一个电子商务网站。该网站具有易维护,可扩展,速度快等特点。
参考文献:
[1] 刘克科,王国军.(美)Kurniawan B. Java Server Faces编程[M].北京:清华大学出版社,2009.
[2] 罗会波.JSF第一步——JSF+Spring+Hibernate +AJAX编程实践[M].北京:清华大学出版社,2009.
[3] 雨虹.企业级Web开发实战——JSF/RichFaces,ExtJS实战剖析[M].北京:电子工业出版社,2008.
[4] 麻地河,赵恒.JSF Web 应用开发实战[M].北京:机械工业出版社,2008.
[5] (美)沃尔斯,(美)布雷登巴赫.Spring in Action(中文版)[M].北京:人民邮电出版社,2008.
[6] 孙卫琴.Spring 2.0技术手册[M].北京:电子工业出版社,2008.
[7] 梁建全,周力,孟志勇.精通轻量级Java EE框架整合方案[M].北京:人民邮电出版社,2008.
关键词:JavaServerFace;框架;B/S
中图法分类号:TP311文献标识码:A文章编号:1009-3044(2010)22-6131-04
The Design of an E-commerce System Based on JSF
CHENG Shao-li
(Heilongjiang Provincial Party Committee School, Harbin 150000, China)
Abstract: This thesis outlines JSF, Spring and Hibernate and integrates these to built the actual e-business applications. In the design, the system use three-tier structure base on B/S model. JSF is used to design dynamic pages in view layer. At the same time, model and control layer applies POJO and Spring. The system focuses on integration of the three frameworks, making good use of the three frameworks and intergrating them into MVC model. Users can browse the product catalog and view product details and administrators have some maintain operations as add, delete, modify,etc.
Key words: JavaServerFace; frameworks; B/S
随着互联网技术的迅速发展,网络已逐渐深入人心,更是成为继报刊、电视、广播等传统媒体之后而兴起的一新传媒介质,网络宣传已成为众多宣传手段的重中之重,各种各样的网站应运而生,充斥着我们的视野,满足着我们生活学习等各方面的需要。当代企业借助于互联网快速的信息传递加速自身的发展。企业网站的规划与建设这一研究课题,也自然而然地成为当今乃至今后一段很长时间内,企业内部和互联网上的一个相当重要的讨论对象。近几年,网上购物成为人们的新宠,电子商务网站的规划与建设是当今乃至今后很长时间一段内企业内部和互联网上的一个相当重要的讨论对象。
本文以Eclipse+MyEclipse6.5+Apache-tomcat-6.0.20为系统开发平台,以MySQL为后台数据库,使用Browser/Server(B/S)数据库应用模式,开发了一个电子商务应用系统。系统整合了JSF,Spring和Hibernate三个框架并很好地将三个框架融入MVC模式中。
1 相关知识介绍
Eclipse是著名的跨平台的自由集成开发环境(IDE)。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench,简称MyEclipse)是对Eclipse IDE的扩展,利用它可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,JavaScript,SQL,Hibernate。简单而言,My Eclipse是Eclipse的插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错。
Tomcat服务器是一个免费的开放源代码的Web应用服务器。Tomcat很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个程序员都可以更改它或在其中加入新的功能。Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
MySQL是一个小型关系型数据库管理系统,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
Java Server Faces(简称JSF),是Java Web应用的用户界面框架,其设计目标是简化Web应用的开发和维护[1]。JSF是一种用于构建Java Web应用程序的新型框架标准,它提供了一种以组件为中心开发Java Web用户界面的方法,同时JSF也遵循了MVC模式设计,确保了应用程序具有更高的可维护性和可扩展性。
Spring是一款近年来非常流行的、开源的开发框架,利用该框架的IoC和AOP机制可以实现多层的Java EE应用程序开发[2]。Spring是一款全方位的整合框架,在Spring框架下能实现多个子框架的组合,这些子框架之间彼此独立,当使用其他框架方案替代现有框架时,不会影响系统其它的框架实现部分,极大地降低了系统修改的工作量。
目前最流行的开源ORM(Object Relational Mapping对象关系映射)框架就是Hibernate,它的轻量级ORM模型逐步确立了在Java ORM架构中的领导地位,甚至取代复杂而又繁琐的EJB模型而成为事实上的Java ORM工业标准[3]。
2 系统结构及模块分析
根据电子商务系统的功能需求,确定了该系统主要有管理员和普通用户两种角色,不同角色的基本任务如下:
1)管理员可以浏览产品列表并查看产品信息,可以对现有产品实现新增、更新和删除等操作。
2)用户可以浏览产品类别并查看产品详细信息,用户可以通过发邮件的方式联系管理员。
该系统未经过登录功能进入网站的用户视为普通用户,该类用户只具有浏览产品信息和发送邮件两个功能。管理员登录系统前只具有普通用户的功能,登陆后可以以列表形式浏览产品信息,并可以对每一项产品进行查看详细信息、更新和删除操作,退出登录后又变成普通用户。
本系统分为7个模块,用户未登录时可以使用发送邮件和浏览产品功能,登陆后可以使用添加产品、更新产品、删除产品以及退出登录功能。本系统UML活动关系图如图1所示。
该系统采取多层架构方案,整个系统分为多个功能单元:客户端(Client)、表现层(Presentation)、业务逻辑层(Business-logic)、数据访问层(Integration)和企业信息系统(EIS),各功能单元的关系如图2所示。
在上述结构图中,各个功能单元的作用描述如下所示。
1)客户端
客户端是使用和显示数据模型的地方,对于一个Web程序来说,客户端通常指用户浏览器,基于浏览器的瘦客户端不包含任何表示逻辑,它依赖于表现层。
2)表现层
表现层将业务逻辑层的服务显示给用户,它应知道如何处理用户的请求,如何同业务逻辑层交互,并且知道如何选择下一个视图显示给用户。
3)业务逻辑层
业务逻辑层包含应用的Business objects和Businessservices。业务逻辑层接受来自于表现层的请求,基于请求处理业务逻辑。业务逻辑层组件将受益于系统级的服务,如安全管理、事务管理和资源管理等。
4)数据访问层
数据访问层是介于业务逻辑层和EIS层之间的桥梁,它封装了与EIS层交互的逻辑。有时将数据访问层和业务逻辑层合称为中间层。
5)EIS层
应用的数据被保存在EIS层中,它包括关系数据库、面向对象数据库和以及信息系统等。
采取上述多层框架,可以清晰划分各功能单元的职责,使系统更易于维护和扩展。实践证明具有三层或等多层的系统比CS模型具有更好的伸缩性和灵活性。
3 具体设计及实现
JCatalog电子商务系统它能够采用了多层非分布式的架构,系统的分层结构预计每一层选择的技术如图3所示。该图同时又是系统的部署图,它的表现层、业务逻辑层和数据访问层将存在于同一个Web容器中。
3.1 系统框架设计
Spring、Hibernate和JSF框架整合的实现方案中,Spring是一个整合框架,通过它可以实现Hibernate和JSF子框架之间的整合,降低不同子框架之间的耦合性。
Spring提供一个轻量级容器,在该方案中承担的整合任务有以下几个方面。
·管理系统的DAO实例,DAO部分基于Hibernate实现,负责与数据库交互。
·管理业务逻辑实例,将DAO实例注入给业务逻辑实例并实现事务管理。
·管理JSF的Managed-Bean实例,将业务逻辑实例注入给Managed-Bean实例。
·承担整合Log4j日志工具等其他功能。
3.2 Spring与Hibernate整合实现DAO
数据访问对象DAO模式是JAVA EE核心设计模式,用来抽象和封装所有对数据源的访问。DAO管理着与数据源的连接以便检索和存储数据,实现了数据访问和业务逻辑的分离,以及业务数据的对象化封装[4]。本系统的框架中采用Spring和Hibernate结合来实现系统的DAO层。下面首先介绍Spring整合Hibernate的基本配置,DAO实现类将在各个功能实现中介绍。
Session是Hibernate持久化操作的基础,而SessionFactory用来创建和维护Session实例。Hibernate的基础配置是围绕着SessionFactory展开的,关于SessionFactory的配置一般在系统的hibernate.cfg.xml文件或者hibernate.properties文件中[5]。
Spring与Hibernate整合后,Hibernate部分的配置信息业放到了Spring的配置文件中,交由Spring容器管理,不再需要hibernate.cfg.xml文件或者hibernate.properties配置文件。
Spring配置文件默认为applicationContext.xml,在工程/WEB-IF目录中,也可以通过web.xml文件指定。本系统Spring的核心配置文件采用了默认方式,系统通过在web.xml中配置Spring的ContextLoaderServlet类来加载配置文件,Spring在web.xml中的配置代码如下。
系统启动时首先加载web.xml配置文件,然后通过ContextLoaderServlet配置加载Spring的applicationContext.xml配置文件。在applicationContext.xml文件中定义了Hibernate框架所需数据库的连接参数[6],具体定义代码如下所示。
在上述配置中,定义了hibernateTemplate。hibernateTemplate负责管理原有Hibernate的SessionFactory和Session等。
业务逻辑层是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定业务流程的实现等与业务需求有关的系统设计,也就是说与系统所应对的领域逻辑有关,通常也将业务逻辑层称为领域层。
在轻量级JavaEE架构中,DAO组件通常并不管理事物,而将事务管理延迟到业务逻辑层中,通过Spring的声明式事务管理,让业务逻辑层对象的方法具备事务性。
3.3 Spring与JSF整合管理Managed-Bean
Managed-Bean充当JSF框架的模型部分,用于表单信息的封装和业务逻辑处理的调用。Managed-Bean承担了原有Struts框架中ActionForm和Action两者的功能。
Spring通过ServiceLocator方式将JSF进行整合。本系统所有涉及业务逻辑对象调用的Managed-Bean类在定义时都继承了一个BaseBean类。BaseBean类负责从Spring容器中获取所需的Service业务逻辑对象,从而完成业务逻辑对象与Managed-Bean对象之间的调用[7]。
3.4 系统访问权限设计
本系统的用户分为普通用户和管理员两种角色。未登录的用户为普通用户,不具有产品添加和维护权限。权限控制部分采取了过滤器方式实现。过滤器的功能类似于操作系统的防火墙,用户请求时首先需要通过防火墙的允许才能访问资源,如果防火墙不允许,则将拒绝访问。
本系统过滤器的实现为SecurityFilter.java,在编写时必须实现javax.servlet. Filter接口,实现的部分代码如下所示。
public class SecurityFilter implements Filter {
//登录页面的URL地址
private static final String LOGIN_PAGE_URI = "login.jsf";
//获取记录器对象
private Log logger = LogFactory.getLog(this.getClass());
//a set of restricted resources
private Set restrictedResources;
//将受权限控制的页面访问地址放入restrictedResources集合
public void init(FilterConfig filterConfig) throws ServletException {
this.restrictedResources = new HashSet();
this.restrictedResources.add("/createProduct.jsf");
this.restrictedResources.add("/editProduct.jsf");
this.restrictedResources.add("/productList.jsf");
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
this.logger.debug("doFilter");
String contextPath = ((HttpServletRequest)req).getContextPath();
String requestUri = ((HttpServletRequest)req).getRequestURI();
this.logger.debug("contextPath = " + contextPath);
this.logger.debug("requestUri = " + requestUri);
//判断访问地址是否在集合中
if (this.contains(requestUri, contextPath) && !this.authorize((HttpServletRequest)req)) {
this.logger.debug("authorization failed");
((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req, res);
}
else {
this.logger.debug("authorization succeeded");
chain.doFilter(req, res);
}
}
public void destroy() {}
//判断访问的地址是否在restrictedResources集合中包含
private boolean contains(String value, String contextPath) {
Iterator ite = this.restrictedResources.iterator();
while (ite.hasNext()) {
String restrictedResource = (String)ite.next();
if ((contextPath + restrictedResource).equalsIgnoreCase(value)) {
return true;
}
}
return false;
}
4 结束语
JSF作为一种用于构建Java Web应用程序的新型框架标准,将它与近年来最流行的、开源的开发框架Spring以及目前最流行的开源ORM(Object Relational Mapping对象关系映射)框架Hibernate相结合,设计一个电子商务网站。该网站具有易维护,可扩展,速度快等特点。
参考文献:
[1] 刘克科,王国军.(美)Kurniawan B. Java Server Faces编程[M].北京:清华大学出版社,2009.
[2] 罗会波.JSF第一步——JSF+Spring+Hibernate +AJAX编程实践[M].北京:清华大学出版社,2009.
[3] 雨虹.企业级Web开发实战——JSF/RichFaces,ExtJS实战剖析[M].北京:电子工业出版社,2008.
[4] 麻地河,赵恒.JSF Web 应用开发实战[M].北京:机械工业出版社,2008.
[5] (美)沃尔斯,(美)布雷登巴赫.Spring in Action(中文版)[M].北京:人民邮电出版社,2008.
[6] 孙卫琴.Spring 2.0技术手册[M].北京:电子工业出版社,2008.
[7] 梁建全,周力,孟志勇.精通轻量级Java EE框架整合方案[M].北京:人民邮电出版社,2008.