基于STRUTS 2框架产品信息Web发布系统的实现

(整期优先)网络出版时间:2019-07-23
/ 3
摘 要 在对STRUTS 2框架和MVC 2模型分析比较的基础上,研究了STRUTS 2框架的实施方法,将STRUTS 2框架应用于实际开发,建立了产品信息发布系统模型,并分析了开发中的关键问题。

关键词 STRUTS 2;MVC 2;信息发布系统


1 引言

随着互联网技术的飞速发展,JavaEE以其开放性、扩展性和各大厂商的支持,逐渐成为Web应用软件的开发标准。近几年来,STRUTS框架作为MVC模型的一个良好实现,使基于JavaEE的Web应用的开发能够获得更好的可扩展性、可重用性、易开发性和易维护性。STRUTS出现至今,其自身也在不断地成熟和完善,STRUTS 2(WebWork 2)的发布为JavaEE Web应用的开发者提供了更好的MVC实现和更加简单易用的实施方法。我们综合可扩展性、易使用性等各方面考虑,采用STRUTS 2框架,以及JSP、Servlet、JavaBean、JDBC等技术开发本产品信息Web发布系统,充分发挥了STRUTS 2框架的优势,使得系统层次清晰,保证了系统的稳定高效,并获得了较好的扩展性和易维护性。

2 STRUTS 框架概述

STRUTS是Apache Jakarta项目组的一个Open-Source项目,是MVC模型的一个良好实现。MVC (Model-View- Controller)模型把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,使得应用程序设计过程更加清晰,提高了系统的灵活性和可扩展性。MVC应用于Web便发展出了MVC 2模型,在MVC 2模型中,View由JSP来担当,Controller由Servlet来担当,Model由JavaBean/EJB来担当。Servlet先接受客户端的请求,然后调用相应的Bean进行业务逻辑处理,根据处理结果再调用相应的JSP页面,JSP页面根据存储结果的Bean生成结果页面,返回给客户端。STRUTS框架包括一组相互协作的类(组件)、ActionSerlvet以及JSP Taglib标签库,实现了MVC 2模型中的Controller和View,而MVC 2模型中的Model必须由开发者自己来实现,STRUTS提供了抽象类Action,使开发者能够将Model应用于STRUTS框架。

3 STRUTS 2体系结构

STRUTS 2是STRUTS 1的更新版本,对STRUTS 1进行了改进和升级,例如用Action接口取代了Action抽象类,为每一个请求创建一个Action对象,去掉了ActionForm类,用重新定义的struts.xml替代了struts-config.xml,数据校验方法更加灵活以及采用了分层的国际化方法等等。STRUTS 2更好地实现了MVC2模型。其体系结构图和处理流程如图1所示。

151117958.jpg

图1 STRUTS 2框架体系结构


在HttpServletRequest到达Servlet容器之前要经过一系列过滤器链,包括ActionContextCleanUp过滤器等;然后,FileterDispatcher被调用,FileterDispatcher参考ActionMapper来决定请求是否与相应Action相关联。

如果ActionMapper确定了请求对一个Action的调用,它就会将控制权委托给ActionProxy,ActionProxy创建对应的Action实例,然后ActionProxy参考由struts.xml配置的ConfigurationManager生成ActionInvocation。之后,Action和Interceptor的执行都由ActionInvocation来控制。在Action执行前可能会执行多个Interceptor。

当Action执行结束后,ActionInvocation根据struts.xml中的result配置查找相应的结果页面,并将Action的执行结果输出到结果页面中。这个页面一般是使用STRUTS提供的标签库编写的JSP页面。

接下来,ActionInvocation控制Interceptor以反序执行。

最后,HttpServletResponse根据Web.xml中的配置通过相应的过滤器,返回客户端。

4 STRUTS 2框架的实施

1)Action类的实施

在STRUTS 1中,必须继承Action抽象类,才能将应用集成到STRUTS框架,而在STRUTS 2中的实施方法更加简单,只需要实现Action或ActionSupport接口,甚至可以使用有excute()方法的POJO。而且STRUTS 2取消了ActionForm类,直接在Action类中保存页面提交的输入信息和需要提交给页面的输出信息,对于数据的操作更加简便。在excute()方法中可以直接处理这些信息,并实现对数据库的查询、增加、删除和修改。

2)映射关系的配置

STRUTS 2使用重新定义的关键配置文件struts.xml来代替STRUTS 1中的struts-config.xml,通过struts.xml控制Action请求到Action类的映射,以及Action类到JSP页面的映射关系。在struts.xml文件中,主要使用三种标签定义这些映射关系:

(1)使用<package name=" " namespace=" " extends=" ">标签,配置Web应用中用到的Action类的包的相关属性,name属性指定Action类的包名。

(2)使用<action name=" " class="">标签,配置Action类的相关属性,其中name属性指定Action的类名,class属性用“包名.类名”的格式指定Action类完整的包名和类名。

(3)使用<result>标签配置某个Action类的输出页面,在<result>标签的内容中,以“/”开头表示以发布目录作为当前目录。

3)标签库和国际化的实施

在STRUTS框架中,JSP Taglib标签库和国际化(Internationalization)是对MVC 2模型中View模块的实现。通过在JSP页面中使用框架提供的标签库,可以实现显示Action中动态数据的目的。对于国际化,STRUTS 1将所有的资源簇(Resource Bundle)保存在一个本地资源文件application. properties文件中, 而STRUTS 2提供了分层的本地资源文件,我们可以将用到的资源簇分别存放在这些资源文件中,框架可以通过标签属性和getText()等方法使用资源文件的内容。这些资源文件的搜索顺序是:ActionClass.properties→BaseClass.properties→Interface. properties → package. properties。在开发过程中通常使用package.properties保存一个package中用到的资源簇。在这些资源文件中,其内容以“关键字=值”的形式保存,如“username = User Name”。

5 系统设计实现

5.1 系统的层次结构

本系统的层次结构如图2所示。

151124062.jpg

图2 系统层次结构


本产品信息发布系统总体上采用“浏览器/Web服务器/数据库”的三层体系结构。Web服务器接受请求,STRUTS框架负责请求的处理,在框架内通过特定的映射关系调用相应的业务逻辑,并将结果以JSP页面的形式返回客户端浏览器,实现与客户端的交互。数据库服务器用来存储系统用到的所有数据,数据可以由管理员通过数据库管理程序录入,也可以由拥有权限的客户通过客户端进行管理。系统的客户端只需要一个浏览器,不同的用户通过浏览器对数据进行查询、增加、删除、修改操作,对信息进行管理。

5.2 系统功能结构设计

本系统的功能结构如图3所示。

151136551.jpg

图3 系统功能结构


根据需求分析,用户可分为一般用户、注册用户、商家用户和系统管理员。一般用户进入该网站后,可以浏览该网站的商品内容,查找需要的商品信息和商家信息;注册用户登录后,除了拥有一般用户的全部功能以外,还具有登记缺货,向商家留言,联系商家等功能;商家用户登录后,除了拥有注册用户的全部功能外,还具有查询缺货,发布新产品,产品下架等功能;系统管理员具有系统的全部功能的使用权限,可以查看所有用户资料,核准商家注册,删除用户和商家信息等。

5.3 数据库设计

本系统使用SQL Server2000作为后台数据库,对数据信息规范化后可以得到以下几个数据库表:

user:(用户ID,用户名,真实姓名,密码,性别,地址,电话,e-mail,地址,密码提示问题,密码问题答案,简介,权限)用来记录用户信息,其中“权限”标明该用户的使用权限是注册用户、商家或者是系统管理员。

mobilePhone:(手机编号,品牌,型号,产地,配件,技术指标,上市时间...)用来记录各商家所有手机产品的信息。

B2PMap(Boss2ProductMap):(商家ID,手机编号,上架时间,下架时间,库存,售价)用来记录单个商家发布的手机产品的信息。

OOS(OutOfStock):(编号,手机名称,品牌,型号,登记时间,用户ID)用来记录用户登记的缺货信息。

5.4 系统主要功能模块的实现

本产品信息发布系统为众多手机销售商家提供了一个统一的信息发布平台,商家用户登录后可以将自家销售的产品信息发布到本系统上供其它用户查看,注册用户可以通过该系统登记缺少的产品,商家可以根据登记的缺货调整自家的上架产品。因此,商家是本系统的主要用户对象,产品信息发布功能是本系统的核心功能。

(1)商家发布产品信息的程序文件是Phone_info_publish. class,该类实现了ActionSupport接口,用相应的属性保存了JSP页面提交的产品信息数据,实现了相应属性的getter和setter方法,并在excute()方法中处理这些数据,将产品信息写入数据库,主要代码如下:

Context initCtx = new InitialContext();

Context ctx = (Context) initCtx.lookup("java:comp/env");

Object obj = (Object) ctx.lookup("jdbc/PlatformDB ");

this.ds = (DataSource) obj;

this.conn=this.ds.getConnection();

this.stmt = this.conn.createStatement(

ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

this.stmt.executeUpdate(sql);

(2) struts.xml.中映射关系配置,部分代码如下:

<package name=" platform" namespace="/platform" extends="struts-default">

<action name="Product_info_public" class="platform. Product_info_public">

<result>/platform/productList.jsp</result>

</action>

(3)productList.jsp页面使用Taglib显示动态数据,部分代码如下:

<table border="1">

<tr><th>手机编号</th><th>品牌</th><th>型号</th><th>产地</th><th>配件</th></tr>

<logic:present name="result">

<logic:iterate id="phone" name="result" type="platform.Phone">

<logic:present name="phone">

<tr>

<td><bean:write name="phone" property= "phoneID"/></td>

<td><bean:write name=" phone " property= "brand"/></td>

<td><bean:write name=" phone " property= "phoneType"/></td>

<td><bean:write name=" phone " property= "producingArea"/></td>

<td><bean:write name=" phone " property=" accessory"/></td>

</tr>

6 结束语

本信息发布系统采用STRUTS以及JSP、servlet、JavaBean和JDBC等技术,实现了MVC 2模型,使得整个系统开发过程层次清晰,模块划分明确,增强了系统的稳定性。由于实施了STRUTS 2框架,各个组件可以很容易地升级和更换,不会对整个系统造成影响,使整个系统具有了更好地可扩展性和易维护性。

参考文献

[1] Apache Struts 2 Documentation[EB/OL], http://struts.apache.org/2.x/index.html

[2] Alan Shalloway & James R.Trott:Design Patterns Explained[M],清华大学出版社,2004

[3] 孙卫琴:精通Struts:基于MVC的JavaWeb设计与开发[M],电子工业出版社,2004