Struts2技术

2024-05-14

Struts2技术(精选9篇)

Struts2技术 篇1

Struts2是APACHE新推出的一个框架, 于2007年上半年发布。此前的Struts框架被称为Struts1。它是世界上发布的第一个MVC框架, 得到了广泛应用, 至今已发展成为一个成熟、稳定、性能较高的框架。尽管Struts1框架已经非常地成熟、可靠, 但面对大量新兴的MVC框架, Struts1逐渐地暴露出了自身的不足, 需要不断地进行更新。因此, Struts2便应运而生了。

相对于Struts1框架而言, Struts2框架是一个全新的框架, 尽管两个框架在名字上相似, 但Struts2框架和Struts1框架在体系上的差别非常大。实际上, Struts2并非一个全新的框架, 因为Struts2和另外一个MVC框架Web Work非常相似, Struts2是基于WebWork核心的。Struts2更像是一个Web Work的升级版本, 从Web Work到Struts2到是一次平滑的过渡。

1 Web Work框架

Web Work框架来自另一个优秀的开源组织opensymphony。Web Work是建立在名叫Xwork的项目基础之上的。

Xwork简洁、灵活且功能强大, 它是一个标准的Command模式实现, 并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截器 (interceptor) , 运行时表单属性验证, 类型转换, 强大的表达式语言 (OGNL, the Object Graph Notation Language) , Io C (Inversion of Control反转控制) 容器等。

Webwork2建立在Xwork之上, 处理HTTP的响应和请求。Webwork2使用Servlet Dispatcher将HTTP请求变成Action (业务层Action类) 、session (会话) 及application (应用程序) 范围的映射, request请求参数映射为Webwork2支持的多视图表示, 视图部分可以使用JSP、Velocity、Free Marker、Jasper Repots、XML等[1]。

2 Struts1框架

Struts1的视图部分由JSP实现。Struts1提供了丰富的标签库, 通过这些标签库可以减少脚本的使用。Struts1提供了与Ties框架的整合, 通过Ties框架提供的模板机制, 可以提高网页的可重用性和可扩展性。但Struts1所支持的表现技术仍非常单一。Action Form Bean作为数据传输对象 (DTO) , 用于在视图和控制器之间传递数据。Action FormBean通常被划分到视图层。

Struts1的控制器由两部分组成:系统核心控制器和业务逻辑控制器。系统核心控制器为Action Servlet, 它继承Http Servlet类, 负责接收所有的HTTP请求, 然后根据用户请求决定是否需要调用业务逻辑控制器。如果需要调用业务逻辑控制器, 则将请求转发给Action处理, 否则直接转向请求的JSP页面。业务逻辑控制器是用户自定义的Action类, 需要继承系统的Action类, 负责调用模型方法, 充当用户请求和业务逻辑处理之间的适配器[2]。

Struts1的程序运行流程如图1所示。

3 Struts2框架

Struts2使用了Web Work设计核心, 而不是Struts1设计核心。Struts2框架与Web Work框架相比, 在很多方面仅仅是改变了其在Web Work下的名称。图2为Struts2体系概图。

从处理流程上看, Struts2 (Web Work) 与Struts1类似, 它们的核心都由控制器组成。Struts2的控制器也由两部分组成:核心控制器Servlet Dispatcher和业务逻辑控制器Action。

Struts2的处理流程如下:

浏览器发出请求。

核心控制器Filter Dispatccher根据请求决定调用合适的Action。

拦截器链自动对请求应用通用功能, 如workflow、validation、或文件上传等功能。

回调Action的execute方法, 该方法获取用户的请求参数, 并调用业务逻辑。

Action的execute方法根据执行结果返回result值, 在struts.xml配置文件中, 指定result值和视图资源之间的映射关系。Struts2支持的视图资源除了JSP以外, 还有Velocity、Free Marker等。

3.1 核心控制器Servlet Dispatcher

核心控制器是一个Filter, 由框架提供。当用户的请求到达时, 它会过滤所有的用户请求, 如果用户请求以Action结尾, 该请求将被转入Struts2框架处理。Struts2框架根据请求*.action的“*”部分决定调用哪个Action。Action和其实现类之间的对应关系都定义在struts.xml文件中。Struts2框架提供了一系列拦截器, 这些拦截器负责将Http Servlet Request请求中的请求参数解析出来, 传入到Action中, 并回调Action的execute方法来处理用户请求。

Interceptor (拦截器) 将Action共用的行为独立出来, 在Action执行前后运行。这其实就是AOP (Aspect Oriented Programming, 面向方面编程) 。Interceptor将很多功能从用户的Action中独立出来, 减少了Action的大量代码, 独立出来的行为具有很好的重用性。Struts2的许多功能都是由Interceptor实现, 可以在配置文件中组装Action用到的Interceptor, 它会按照指定的顺序, 在Action执行前后运行。这就将需求功能从不相关类中分离出来;同时, 能够使得很多类共享一个行为, 一旦行为发生变化, 不必修改很多类, 只要修改这个行为就可以。这种处理方式是典型的AOP处理方式。

3.2 业务逻辑控制器Action

业务逻辑控制器Action, 由用户自定义。与Struts1的Action不同, Struts2的Action完全与Servlet API分离, 因而该Action更容易测试。Struts2中的Action不再像Struts1中的Action那样需要继承Action父类, 它可以无需实现任何接口, 一个POJO就可以充当Struts2的Action。下面是一个以POJO作为Action的例子:

从以上代码可以看出, 这个Action与POJO的区别就是多了一个无参数的execute方法。在Action的execute方法中, 不需要任何参数, 这样设计的一个明显好处是, 不需要把整个Web应用部署到Web容器中, 即可对所写的Action类进行测试, 这给开发人员带来了极大方便。由于它不依赖于servlet请求, 更增强了它的可移植、可重用性[2]。

Struts2中Action的属性可以实现和Struts1中Action Form的属性相当的功能, 可实现表单数据的封装, 但它们实现的方式是不同的。在Struts2中, 是利用框架提供的Interceptor来解析用户请求, 并将请求值赋给Action的对应属性。

为了让用户开发的Action处理类更规范, Struts2提供了一个Action接口, 这个接口定义了Struts2的Action处理类应实现的规范。另外, Struts2还提供了Action类的实现类Action Suport。该类提供了许多默认方法, 包括获取国际化信息的方法、数据校验的方法、默认的处理用户请求的方法等, 用户的Action类继承该类后, 将大大简化Action的开发。

Struts2提供了一个Action Context类, 通过该类可以访问Servlet API。利用Action Context来访问Servlet API, 不能直接获取Servlet API实例, 为了在Action中直接访问Servlet, Struts2还提供了一系列接口:Servlet Context Aware、Servlet Request Aware、Servlet Response Aware, Action类实现这些接口, 可获得Servlet API实例。

3.3 Struts2视图层

Struts2的视图部分通过大量的标签提供支持。Struts2标签库是Struts2的重要组成部分, Struts2标签库提供了非常丰富的功能, 这些标签库不仅提供了表现层的数据处理, 而且提供了流程控制功能、国际化、Ajax支持等功能。

与Struts1标签相比, Struts2标签使用OGNL表达式作基础。因此, 对集合、对象的访问非常便利。Struts2标签库将所有标签都统一到一个标签库下, 简化了用户对标签库的使用。

Struts2标签库整合了Dojo的支持, 因此, 可以生成更多页面表示效果。Struts2提供了许多额外的标签, 包括如日期时间选择器, 树形结构等。除此之外, 借助于底层的DWR支持, Struts2标签库提供了Ajax支持, 可以通过使用Struts2标签库来非常轻松地完成各种Ajax效果。

Struts2提供了主题、模板支持, 极大简化了视图页面的编写, 而且它们有很好的可扩展性, 如果现有的主题、模板不能满足项目需求, 完全可以开发自定义的主题、模板、可以实现更好的代码复用;Struts2还允许在页面中使用自定义组件, 这完全能满足项目中页面显示复杂多变的需求[3]。

同Web Work一样, Struts2对多种表现层技术:JSP、Velocity和Free Marker等都有很好的支持, 从而给开发者更多的选择, 提供了更好的兼容性。

4 结语

Struts2核心控制器使用拦截器机制, 具有更高的灵活性和可复用性;Struts2业务逻辑控制器Action可自定义, 可不直接与任何的Servlet耦合, 增加了代码的可复用性且更易于测试;Struts2视图层提供了丰富的标签库, 而且还支持除JSP以外的其它表现层技术。此外, Struts2还提供了非常灵活的扩展方式:插件。理论上, Struts2可通过插件与任何框架整合, 这极大地提高了Struts2的可扩展性。Struts2是一个有前途的框架。

参考文献

[1]唐善成.Webwork原理初探[J].电脑知识与技术, 2005 (6) :83.

[2]孙卫琴.精通Struts:基于MVC的Java Web设计与开发[M].北京:电子工业出版社, 2006:15.

[3]李刚.Struts2权威指南[M].北京:电子工业版社, 2007:309.

Struts2技术 篇2

—高级软件人才实作培训专家!Struts2的配置文件Struts2默认的配置文件为struts.xml,FilterDispatcher过滤器在初始化时将会在WEB-INF/classes下寻找该文件,该文件的配置模版如下:

—高级软件人才实作培训专家!第一个Struts2应用Struts2默认的配置文件为struts.xml,FilterDispatcher过滤器在初始化时将会在WEB-INF/classes下寻找该文件,该文件的配置模版如下:

/WEB-INF/page/hello.jsp —高级软件人才实作培训专家!第一个Struts2应用例子中使用到的cn.itcast.action.HelloWorldAction类如下:package cn.itcast.action;public class HelloWorldAction{private String message;public String getMessage(){return message;}public void setMessage(String message){this.message = message;}public String execute()throws Exception{this.message = “我的第一个struts2应用”;return “success”;}} 2

Struts2技术 篇3

一、MVC设计模式

MVC设计模式是至今用得比较多的一种设计模式,是最早出现在Smalltalk中,后来广泛用于Java Web应用程序中。Model(模型)表示业务逻辑层,View(视图)代表表示层,Controller(控制器)代表控制层。如图1所示:

1、模型(Model)部分包括业务逻辑层和数据库访问层。在Java Web应用程序中,业务逻辑层一般由Java Bean或EJB构建。

2、视图(View)在Java Web应用程序中,View部分一般用JSP和HTML构建,也可以是XHTML、Applet和Java Script。

3、控制(Controller)部分由Servlet组成。当用户请求从View部分传过来时,Controller把该请求发给适当的业务组件;请求处理完成后,又返回给Controller。Controller再把处理结果转发给适当的View组件显示或者调用Model。因此,Controller在视图层与业务逻辑层之间起到了桥梁作用,控制了两者之间流向。

在MVC设计模式的基础上,推出了许多基于MVC模式的Java Web框架,其中比较经典的是Struts2。

二、Struts2的优势

Struts2是在Struts1的基础上发展起来的,它克服了Struts1的许多缺点,并以Web Work为核心,采用Web Work的设计理念.。因此Struts2并不是Struts1的升级版,而是兼容了Struts1和Web Work两个框架,Struts2有以下优势:

1、Action类

Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。

2、线程模型

Struts2的Action对象为每一个请求都实例化对象,所以没有线程安全的问题

3、Servlet依赖

Struts2的Action和容器无关。Servlet上下文表现为简单的Maps,允许Action被独立地测试。Struts2的Action可以访问最初的请求。但是,应该尽可能避免其他元素直接访问Http Servlet Request或Http Servlet Response。

4、易测性

Struts2的Action可以通过初始化、设置属性和调用方法来测试。依赖注入的支持也使测试变得更简单。

5、捕获输入

Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。Action属性能够通过Web页面上的taglib访问。Struts2也Action Form模式,简化了taglib对POJO输入对象的引用

6、表达式语言

Struts2使用JSTL,但是还支持一个更强大的灵活的表达式语言Object Graph Notation Language(OGNL).

7、类型转换

Struts2内置了转换器,对于日期、整数或浮点数等类型会自动去调用相应转换器进行类型转换,为编程带来极大的方便。

8、视图支持

Struts2提供了对Free Marker、Velocity等模板技术的支持并且配置很简单。

三、结束语

基于Struts2的以上优势,使得Struts2在Java Web开发中扮演着重要的角色。而且目前上升势头非常强劲。

摘要:Struts2是构建基于Java的web应用程序的首选框架。它所实现的MVC(模型-视图-控制器)模式,给Web应用带来了良好的层次划分,同时也提供了一系列工具来简化应用的开发。

关键词:Struts2,Java,Web

参考文献

[1]甘勇等.JSP程序设计技术教程[M].北京:清华大学出版社2010年4月.

[2]蒲子明等.Struts2+Hibernate+Spring整合开发技术详解[M].北京:清华大学出版社2010年10月.

struts2理论考试题目 篇4

2.说说struts1与struts2的区别        都是MVC的WEB框架;

struts1的前端控制器是一个Servlet,名称为ActionServlet,struts1的action需要继承Action类,struts2的action可以不继承任何类; Struts1依赖与servlet的API struts1对同一个路径的所有请求共享一个Action实例,struts2对同一个路径的每个请求分别使用一个独立Action实例对象,所有对于struts2的Action不用考虑线程安全问题;

在struts1中使用formbean封装请求参数,在struts2中直接使用action的属性来封装请求参数; struts1中的多个业务方法放在一个Action中时(即继承DispatchAction时),要么都校验,要么都不校验;对于struts2,可以指定只对某个方法进行校验,当一个Action继承了ActionSupport且在这个类中只编写了validateXxx()方法,那么则只对xxx()方法进行校验;

3.转发和重定向的区别?  

4.Struts2执行流程      客户端发出一个指向servlet容器的请求(tomcat)这个请求经过一系列的过滤器(Filter),最后达到StrutsPrepareAndExecuteFilter 过滤器是struts2框架的心脏,询问ActionMapper类来查找请求中需要用到的Action,如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。ActionProxy为Action的代理对象。ActionProxy创建一个

ActionInvocation的实例,并调用

ActionInvocation的invoke(),ActionInvocation实例包含了一系列的拦截器,在调用Action的过程前,涉及到相关拦截器(Intercepter)的调用。

5.拦截器的生命周期      每个拦截器都实现了Interceptor接口的java类

init(): 在拦截器对象被创建后立即调用,只会调用一次,一般用来进行相关资源的初始化 intercept(ActionInvocation invocation):每个拦截一个动作请求,该方法就会被调用过一次 destory(): 该方法将在拦截器被销毁前条用,只会调用一次,一般用来释放资源 Struts2默认调用18个拦截器 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

struts2的过滤器转发:服务端跳转,在客户端浏览器地址栏中不会显示出转向后的地址,一次请求;

重定向:客户端跳转,浏览器将会得到跳转的地址,并重新发送请求链接,两次请求。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用重定向。struts2的前端控制器是一个filter,在struts2.1中叫StrutsPrepareAndExecuteFilter;

Struts2不依赖与Servlet的API 6.Struts2有哪些优点       

7.Struts2常量的修改方式?

常量可以在struts.xml或struts.properties中配置  

8.Struts2如何访问HttpServletRequest,HttpSession,ServletContext,HttpServletResponse? 方式一:主动获取

HttpServletRequest request =ServletActionContext.getRequest();HttpSession session =request.getSession();ServletContext application =session.getServletContext();在struts.xml中配置常量

在struts.properties中配置常量 Strtus.action.extension=do 在软件设计上struts2的应用不依赖于Servlet API和Struts API,属于无侵入式设计;强大的拦截器,实现了如参数拦截输入,文件上传,校验等功能

类型转换器,实现了字符串与特殊数据类类的转换 Struts2可以对指定某个方法进行校验

提供了全局范围。包范围和action范围的国际化资源文件管理

为应用程序添加了全局的result,和声明式异常处理

可以实现模块化管理,将应用程序模块化

HttpServletResponse response=ServletActionContext.getResponse();

方式二:依赖框架注入

定义类实现implements ServletRequestAware,ServletResponseAware,注入请求对象和响应对象,session对象和application对应通过request间接获得。

9.Struts2如何管理aciton,这种管理方式有什么好处?

Struts2框架使用包管理Action,包的作用和java中的类包相似,主要管理一组业务功能相关的action。在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。

10.Strus2中校验的执行流程    

11.介绍ActionContext,ServletContext,pageContext? ActionContext是当前Action的上下文,通过ActionContext可以获取request,session.applicationd等于Action有关的对象引用。

ServletContext是域对象,生命周期伴随整个web应用。类型转换不管是否成功后,都会进行校验

先调用validateXxx()进行校验,只会校验action中方法名为xxx()的方法,如果校验失败,添加校验失败信息

再调用validate()方法,会校验action中所有与execute方法签名相同的方法,如果校验失败,添加校验失败信息

如果校验失败,则跳转到name=“input”的result指定的页面,否则,调用action的具体方法 pageContext也是一个域对象,其作用范围只是当前页面。12.Ajax的优点    页面无刷新,用户的体验非常好。与服务器通信,具有更加迅速的响应能力。

可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

13.Ajax的缺点     

14.XMLHttpRequest对象的常用属性和方法

常用属性:

readyState属性:请求的状态,有5个可取值 0=未初始化,1=正在加载 2=以加载,3=交互中,4=完成

responseText 属性: 服务器的响应,表示为一个字符串 reponseXML 属性:服务器的响应,表示为XML格式的对象

status :服务器的HTTP状态码,200对应ok 400对应not found。

常用方法:

open(“method”,”URL”)建立对服务器的调用;

第一个参数是HTTP请求,方式可以为GET,POST或任何服务器所支持的您想调用的方式。

第二个参数是请求页面的URL。send()方法,发送具体请求

15.谈谈XMLHttpRequest对象

Ajax的核心是JavaScript对象XMLHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XMLHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新。

破坏浏览器后退按钮的正常行为。

Struts2技术 篇5

一、区域物流信息系统构建的必要性

信息化对全国各地区物流现代化的带动日益明显,事实上已经证明信息化是物流业发展的助推器,是建立和优化物流产业的基础。我国区域物流业发展较快,但行业整体信息化水平还不高,这为区域物流信息化的开展提出了迫切要求。

1. 目前区域物流信息化程度远远不够

目前区域物流企业大多呈“散、乱、小”状态,从原来的货运、仓储企业转型而来的占了很大比例,真正意义上的综合物流企业不多。企业规模小,资金少,人才缺,物流信息化实力弱。由于区域物流企业发展缓慢,服务质量不高,很多商业企业和生产企业承担着企业自身的全部物流业务。物流企业发展不足,服务不能让用户满意与企业物流信息化程度有极大关系。

区域物流企业近年来虽然获得了快速发展,但管理手段依然落后。Web信息管理系统、条码技术、RFID、GPS/GIS等信息技术在区域物流中的实际应用很少,其信息化建设也很少从整体目标出发进行规划,信息化整体状况不容乐观。我国物流各个环节如运输、仓储、配送的成本以及劳动力和设备成本都远远低于发达国家,而整个物流过程的综合成本却大大高于发达国家。其主要原因,就是物流各环节信息化程度低,信息沟通不畅,造成库存大,运力浪费。由于企业信息化应用程度的差距,国内综合性物流企业与区域物流企业之间的发展差距也在不断加大。与国外区域物流的先进水平相比,我国区域物流企业更是有着很大距离。

2. 区域物流信息系统是区域物流发展的的必然选择

随着我国消费市场的逐渐成熟,市场竞争越来越激烈,企业围绕“核心竞争力”所进行的经营策略调整和组织结构再造势在必行,随之而来的是物流的社会化、信息化,将物流业务以快捷高效的方式“外包”给物流企业,是市场的发展需求,因而不仅要求物流企业提供传统的点到点的运输服务,而且要求物流企业直接介入客户企业的生产经营管理活动,提供综合化、一体化的服务。随着客户企业的信息化水平的提高,对物流企业的信息技术的要求也越来越高,信息化水平跟不上客户企业发展的物流企业,必将在这轮供应链的整合中遭到毁灭性打击。

二、系统构建技术的选择

针对区域物流企业的物流信息系统,要与企业的业务流程与战略目标相适应,但很多这样针对具体企业的系统具有不可移植性,甚至一旦由于企业流程或战略稍有调整就不可用,因此,虽然绝大多数区域物流企业都认为有必要建立或引进物流信息系统,然而由于对其功能的完备性缺乏信心,很少企业付诸实施。有的企业即便引进,使用率也很小,与区域物流企业相适应的信息系统少以及系统扩展性弱是主要原因。根据区域实际情况构建区域物流信息系统是区域物流企业的紧迫需求,选择具有可扩展性和高效率的安全体系架构是构建区域物流信息系统的关键步骤。

1. 传统一般技术的不足

在体系架构方面,早先采用C/S架构的物流信息系统,可维护性和可靠性方面都比较差,数据库服务器承担的负担过大,一旦出现问题将导致所有客户端都无法运行,系统瘫痪,这种架构比较适合于小规模、用户较少、单一数据库且在安全、快速的网络环境下运行。随着应用系统的规模不断扩大,复杂性越来越高,在多用户、多数据库且非安全的网络环境下,这种两层结构的应用模型将无法适应。而且两层结构还受到很多制约,如难以扩展至广域网或Internet;程序的升级维护困难;软、硬件的组合及集成能力有限;在软件上呈现出胖客户端;很难管理大量的客户机等。目前少数物流信息系统采用三层架构的系统模型,但执行效率方面还有很大欠缺,相对于非分层的应用程序来说,没有合适选择技术和框架的“三层结构”开发模式的一个明显缺点就是执行速度不够快。而企业信息系统不仅要有实现基本的业务内容的功能,还必须是高效的,同时保持其可靠性、扩展性和安全性。

2. 选择Struts2的优势

区域物流信息系统的分层We b体系架构设计中,Str ut s1.x和WebWork框架是相当流行的架构模式。当Struts2框架诞生后,基于Struts1.x和WebWork框架的J2EE的实际项目开发都将转入使用Struts2框架,在这种背景下,Struts2在短时间内迅速成为MVC领域最流行的框架。Struts2吸取了Struts1.x和WebWork的各种优点,更改了一些不足的地方,譬如移走了原来WebWork中的IOC实现,引入Spring的IOC实现等。基于Struts2多层体系结构的软件克服了传统体系结构软件在功能和效率方面的缺陷,能够很好地适合当前企业需要。

Struts2与Spring的集成进一步降低了程序间的耦合性,就其本身而言,降低了框架本身的耦合性。模块化程度高,可以轻松将配置信息按功能界限拆分成多个文件,便于管理和团队协作开发。大大增强了可扩展性,Struts2是基于插件的框架,大量的优秀插件加快了开发进度。

三、基于Struts2的系统设计

1. 设计思路

物流业是为供需双方提供货物的仓储、运输、包装、信息等服务的行业,物流管理信息系统是企业的“库存管理”、“配送管理”、“业务跟踪管理”、“财务结算管理”等核心业务的信息平台。本系统采用一种基于J2E E的框架Struts2+Spring2+Hibernate3,采用三层Web体系结构模式,其中表现层采用S t r ut s2技术,核心业务逻辑采用Spring框架,而数据持久层采用时下流行的Hibernate O/R Mapping技术。通过本系统,客户可以网上下达运输指令、仓库作业指令、配送指令,可以查询运价、库存报告、账单统计,可以跟踪货物状态等;物流公司可以审核客户的各种指令,对陆、海、空、多式联运委托进行任务分发和业务操作,下达指令给运输和仓储联盟企业,全程跟踪货物状态,统计各项业务费用,管理物流公司与客户、联盟企业往来账目;实现物流、信息流和资金流的高度协调与无阻塞流转;发现并且保持供应链关系,从而增加商业机会,开拓新的市场;改善业务受理质量,提高销售、采购、物流加工、库存管理的柔性与敏捷度。

2. 总体设计

本系统是基于S tr ut s2框架的电子商务应用开发,采用B/S体系结构。系统的功能模型由数据库层、核心业务层、商业智能层三个逻辑层次构成(见下图)。

(1)数据库层:基于框架Struts2+Spring2+Hibernate3数据库的角色已经转变为数据的存储与管理,业务逻辑的处理则交给业务层中间件完成。

(2)核心业务层:作为提升企业价值和核心竞争力的主要源泉,本系统中企业核心业务层包括九个子系统,分别是库存管理子系统、订单管理子系统、物流配送子系统、客户管理子系统、逆向物流子系统、财务结算子系统、调度控制子系统、业务跟踪子系统和信息发布子系统。基于Struts2在功能、扩展性以及稳定性上的优势,业务层子系统将极大体现此种框架的优越性,保持区域物流信息系统的可持续发展。

(3)商业智能层:主要用于数据查询,生成智能报表,同步生成分析数据库用于数据分析,为商业决策提供支持。

四、结束语

利用三层B/S体系结构,基于框架Struts2+Spring2+Hibernate3开发的物流管理信息系统,能适应各种平台,可移植性好,扩充性好,能很好适应企业需要。物流信息系统带来的好处就是将人力成本降低到难以想象程度的同时提高工作效率。信息系统带来的不仅仅是降低人力成本,而是对仓库管理模式的彻底改变。

摘要:根据中国“入世”承诺,我国物流市场已经全面开放,区域物流将成为我国21世纪的重要产业和新的经济增长点。对区域物流信息系统的规划与构建,是实现这一目标的重要前提。

关键词:区域物流,信息系统,Struts2

参考文献

[1]董千里,路春涛,张凯.陕西省区域物流信息化战略及其实施[J].长安大学学报,2006,(5):67-68.

Struts2技术 篇6

随着Web领域的不断发展,MVC (Mode-View-Controller)成为一种公认的优秀设计模式,该模式分为模型层、视图层、控制层,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。Struts2是建立在Struts和WebWork基础上,并且集成了Struts和WebWork的优点,它是使用了MVC设计模式的框架,能够具有更好的可扩展性、强大的功能,同时它也是目前最流行的MVC框架之一[1]。FreeMarker和Velocity是应用在Struts2中非常流行的模板语言。主要研究FreeMarker和Velocity模板语言在Struts2中的应用,工作原理,分析比较两种模板语言的特点,方便开发人员在开发过程中,选择最合适的模板语言开发项目工程,提高工作效率,从而节省了开发所需要的时间。

2 FreeMarker模板语言

FreeMarker是一个用Java编写的模板引擎,能够将数据与页面模板分离,根据指定的模板输出多种规格的文本,如HTML、XML、RTF等。FreeMarker实际上是被设计用来生成HTML页面,尤其是通过实现了基于MVC (Mode-View-Controller)模式的Java Servlet应用程序。使用MVC模式的动态页面的设计思想,可以将前端设计师从程序员中分离出来。网页设计人员专注于改写视图页面的显示内容,而不受到程序开发人员编写底层代码的干扰,这是因为将业务逻辑和视图页面设计被分离出来了。这种设计思想可以让同一个人在同一个项目当中拥有程序员和页面设计师的角色,由于逻辑和视图分离使代码变得简洁,更加方便程序员去维护。

FreeMarker的工作原理是模板+数据模型=输出[2],以此将数据模型中的数据合并到模板并将其输出,如图1所示。虽然FreeMarker也具有一些编程能力,但是它不是一种很全面的编程语言。当程序需要显示数据库的数据信息时,FreeMarker是通过模板生成文本页面把数据库中的数据信息显示出来。

FreeMarker不是Web开发的应用程序框架。它是一个适用于Web应用程序框架中的组件,但是FreeMarker引擎本身并不知道HTTP协议或Java Servlet的存在。它仅仅来生成文本内容。即使是这样,它也非常适用于非Web应用程序的开发环境。值得注意的是,我们使用FreeMarker作为视图层的组件,是为了给例如Struts这样的Model 2应用框架提供现成的解决方案。FreeMarker本身是免费的,它基于BSD规则的许可协议。它也是OSI认证的开源软件[2]。

FreeMarker是Struts2默认的模板技术,较Velocity模板引擎,FreeMarker支持JSP标签,内嵌XML、DOM解析功更强大,使用起来更加方便快捷。此外,Free Marker的指令具有对数据的分值控制、循环输出等功能,对处理Hash和Sequence对象时具有更好的灵活性。Free Marker生成的纯文本的静态文件,有利于减轻服务器的负担[3]。如果用户使用FreeMarker生成纯文本的HTML、XML等文档,服务器需要更少的硬件资源,服务器能够对用户的请求做出快速的响应,不同于JSP页面,当JSP页面发布于服务器上时,用户请求需要不断地与服务器进行交互,从而使服务器占用了大量的资源。与JSP相比较,使用FreeMarker能够提高服务器的响应速度,缩短反应时间,降低对硬件资源的占用率。

3 Velocity模板语言

Velocity模板语言简称VTL,是一个基于Java的模版引擎[4]。在同一个应用程序中,Web设计师可以使用Velocity模板语言预先设计好模板Java开发人员编写程序代码设置上下文,将页面中的数据放入到上下文中,通过使用Velocity引擎将数据和上下文结合起来,实现动态页面的效果。Java代码和视图设计的有效分离[5],可以使Java开发人员专注于Java代码的底层编写,页面设计师专注于页面设计的效果,不需要考虑更多的代码编程,有利于后期应用程序的管理与维护。Velocity可用来从模板产生Web页面,SQL,PostScript以及其他输出,简化了Web开发。它也可用于一个独立的程序以产生源代码和报告,或者作为其他系统的一个集成组件。Velocity还支持模板的国际化编码转换。Velocity也是Apache软件组织提供的一项开源项目,可以免费下载。

Struts2对Velocity提供了很好的支持,只需要经过简单的配置,就可以在程序中使用Velocity,不需要Velocity的API。

4 比较分析

FreeMarker和Velocity都是目前非常流行的两种模板语言,两种语言的语法也很相似,适用对象也基本相同,它们最大的相似点都是通过分离页面视图和程序逻辑,从而实现MVC架构。

FreeMarker比Velocity多了一个格式化的功能,而且FreeMarker还支持JSP标签,内嵌XML DOM解析,功能上要比Velocity强[1]。使用Velocity,需要寻找各种工作环境或者特定工具来一次次地解决典型的模板创作任务,最后会浪费很多时间。工作环境经常意味着把Java对象在Velocity模板中直接使用,这违反了简单、无编程HTML设计的理念。如果将表示任务移到控制器代码中的话,这也违反了MVC框架设计理念。使用FreeMarker,可以以out-of-the-box的方式实现Velocity所能做的。

当访问一个未定义的变量,可以通过配置FreeMarker来停止render模板显示错误信息,或者跳过错误部分,FreeMarker会记录问题(日志),在写错指令名时,FreeMarker也会抛出异常。而Velocity会输出源代码。

Velocity语法上相对FreeMarker要简单一些,不需要什么特定的标签,它只使用简单的$varName来输出变量,灵活度要较FreeMarker高一些。Velocity不支持其他标签库(即在Velocity中不能引用其他标签,如不能使用Struts的标签)。Struts2,提供了自己的标签库,更好的支持FreeMarker。

5 结语

FreeMarker和Velocity都是优秀的模板语言,分离了页面逻辑和业务逻辑,通过与Struts2的组合使用可以进行高效的工作。Struts2框架采用FreeMarker作为其默认的模板技术,同时对Velocity的支持性也是非常良好,是选择FreeMarker还是选择Velocity,程序开发人员可以根据实际项目中的需求,去选择对自己更加方便、快捷、高效的模板语言。

摘要:Struts2是一个基于MVC架构的框架,有许多视图表示形式。为了使Java Web的页面视图更好地与业务逻辑分离开来,引入了基于Java的FreeMarker和Velocity模板语言,这两种模板语言凭借着自身的优势在众多模板语言中广泛应用,使用FreeMarker和Velocity模板引擎技术,不仅提高了程序员的开发效率,还使得应用程序在较长的时间内具有良好的维护性。

关键词:FreeMarker语言,Velocity语言,模板引擎,Struts 2框架,Java Web应用

参考文献

[1]范立峰,林果园.Java Web程序设计教程[M].北京:人民邮电出版社,2010.

[2]南磊,译.FreeMarker手册.

[3]耿晓君,等.Struts2下基于FreeMarker的XML数据输出与ExtJS的解析实现[J].江苏广播电视大学学报,2009,(05):59-62.

[4]陈涛,白栩翔.Velocity模板引擎技术在Java Web中的应用[J].农业网络信息,2011,(05):38—40.

Struts2技术 篇7

传统的Web应用开发将页面显示、业务逻辑和数据处理大部分都集中在页面代码中,由于系统的各个部分高度耦合,给后续的系统扩展和维护带来了很大的困难,因此迫切需要一种全新的Web应用设计技术,基于MVC模式的Struts1框架这是在这背景下应运而生。无可厚非,Struts1框架经过若干年的发展已是当前Web应用开发中最为流行的框架之一,然而技术总是在不断的发展,Struts1框架也美中不足,面对大量新的MVC框架的蓬勃兴起,Struts1也开始注入了新的血液,这便促使了Struts2框架的诞生。

2 Struts2框架结构及工作原理

Struts2框架是在Struts1和WebWork框架的基础上发展而来的,同时吸取了两者的优势,但与Struts1框架相比,在设计理念上有许多本质的不同,对WebWork框架有过研究的读者会发现,Struts2在体系结构和运行流程上与WebWork非常相似。所以,在一定程度上可以说Structs2实际上继承的是WebWork的血统。

Struts2框架大致由3部分组成:核心控制器、业务控制器和用户实现的业务逻辑组件。其中核心控制器由FilterDispatcher充当,该控制器作为一个Filter运行在Web应用中,它负责拦截所有用户的请求,当用户的请求以.action结尾时,该请求将为转入Struts2框架处理。业务控制器就是用户自己实现的Action类的实例,这个类一般都包含了一个execute()方法,该方法的返回值是一个字符串(如:SUCCESS,ERROR等),即逻辑视图名,与此对应的是一个实际要转到的视图资源。其实Struts2用于处理用户请求的Action实例并不是用户实现的业务控制器,而是Action代理,这里用户实现的Ac-tion类只是Struts2的Action代理的代理目标,Struts2框架提供了一系列拦截器,通过这些拦截器负责将HttpServletRequest中请求的参数解析出来,传入到用户自定义的Action中,然后执行相应的方法来处理用户的请求。关于业务逻辑组件方面,Struts2框架并没有提供太多的帮助,它只是一个表现层的框架,在实际的开发中当控制器需要获得业务逻辑组件时,通常是通过工厂模式来获得业务逻辑组件实例的。Struts2具体的框架结构及工作流程如图1所示。

3 基于Struts2框架的电子书店系统的设计与实现

3.1 系统功能分析与设计

本系统由前台和后台两个主要模块构成,其中前台模块负责用户功能,包括用户注册、用户登录、修改个人信息、在线购物、查看购物车、订单查询等功能;后台模块负责管理功能,包括管理员登录、图书管理、订单管理、用户管理、权限管理等功能。关于数据库设计方面,共有7张数据表:管理员表(Admin),存放初始管理员的数据记录信息;注册用户表(MyUser),用于记录注册用户信息;图书类别表(BookClass),存放图书类别记录;图书信息表(BookInfo),用于存放图书详细信息记录;用户订单表(Indent),记录用户下达的订单基本信息;订单图书表(IndentList),用于存放订单对应的图书信息。本系统采用B/S架构,在Struts2框架基础上利用集成开发工具进行开发,系统采用Oracle为后台数据库、Tomcat6.0为Web服务器。

3.2 利用Struts2技术实现系统开发

3.2.1 为当前Web应用增加Struts2支持

1)将Struts2的核心类库(struts2-core-xxx.jar等)复制到当前Web应用的lib目录下;

2)修改当前Web应用的web.xml配置文件,配置Struts2的核心Filter,让该文件加载Struts2框架。配置的代码片段如下:

3.2.2 业务逻辑层的实现

本系统业务逻辑层采用DAO设计模式和工厂设计模式,以BookManageDAO.Java为例,其中封装了对图书信息的列表、查看、增加、更新、删除等业务逻辑。当控制器Action需要调用业务逻辑组件中的方法(如:增加新图书)时,先要创建一个业务逻辑组件工厂(如:DAOFactory),通过工厂取出BookManageDAO组件,再调用需要执行的方法,通过这样的设计模式,使得应用架构具有更好的可扩展性。

3.2.3 控制器的实现及配置

在Struts2应用框架中,核心控制器(FilterDispatcher)是由Struts2框架本身所提供,开发人员一般无须对该核心控制器进行再次开发,负责具体业务处理的Action类则是开发者开发实现的重点。相对于Struts1而言,Struts2采用了低侵入式的设计,Struts2不要求Action类继承任何的Struts2的基类或者实现任何Struts2接口。用户开发的每个Action类负责处理一项具体的业务,通常的任务包括:接收用户请求、根据用户请求调用合适的模型组件来执行响应的业务逻辑、获取业务逻辑执行结果、根据当前状态以及业务逻辑执行结果选择合适的视图组件返回给用户。以下通过实现系统中一个增加新图书的功能模块来介绍如何开发自己的Action类以及完成配置工作。处理添加新书的AddBookAction的代码片段如下:

struts.xml文件用于配置Struts2框架中的各个模块间的交互,,可以把Struts2框架中MVC的各个部分联系起来,实现了一个真正的MVC系统。针对上面的AddBookAction,做了如下的配置:

3.2.4 显示层的实现

显示层的实现主要采用JSP技术,但JSP页面中几乎不包含任何的脚本程序,只是单纯地传送数据以及接收和显示返回的数据。当用户提交了HTML表单后,用户的请求会经过Struts2的一系列内建拦截器,其中有一个params的内建拦截器,它负责解析用户HTTP请求中的参数,并将参数值设置成Action对应的属性。如果表单需要校验,则会用到validation拦截器,通过执行xxxAction-validation.xml配置文件中定义的校验器,从而完成数据的校验工作。此外,Struts2框架还提供了功能强大的标签库,更加方便了页面的输出。

例如要显示上文中涉及到的添加图书是否成功的信息,在JSP页面中的代码片段如下:

4 结束语

随着Web应用系统的不断发展,如何构建一个好的Web应用程序将关系到整个系统的应用效果。以上通过一个实例分析了WEB应用系统中使用Struts2架构技术的各个环节及关键技术,采用架构技术使得项目开发简洁、结构清晰,并且具备了更好的可扩展性和可维护性。本系统是在MyEclipse集成开发环境下开发的,由于现有的开发环境还不能自动地生成struts.xml配置文件,所以笔者自己编写了配置文件,相信不久的将来集成开发环境会有自动生成配置文件的功能,到时会更加方便利用Struts2框架进行Web应用的开发。

摘要:Struts2是目前最新的基于MVC Model2的Web应用开发框架,介绍了Struts2框架的体系结构以及工作原理,并结合一个具体实例,详细介绍了应用Struts2设计和开发Web应用系统的过程和关键技术。

关键词:Struts2框架,Web应用,MVC

参考文献

[1]李刚.Struts2权威指南[M].北京:电子工业出版社,2008.

[2]刘伟,张利国.Java Web开发与实战[M].北京:科学出版社,2008:247.

[3]Struts官方网站[EB/OL].http://struts.apache.org/.

[4]李刚.轻量级J2EE企业应用实战[M].北京:电子工业出版社,2008.

[5]程洪,钱乐秋,马舜雄.基于J2EE体系的WEB应用框架整合[J].计算机工程,2005,31(20).

[6]官全龙,姚国祥.基于Struts的应用架构的研究[J].计算机工程与设计,2005,26(12).

Struts2技术 篇8

关键词:设计模式,框架,图书管理

1. 引言

随着人类社会的发展, 人类对知识的需求也不断地增长。在这种形势下, 书籍就渐渐地成为人们获取并增长知识的主要途径, 而图书馆就自然而然地在人们的生活中占据了一定的位置, 如何科学地管理图书馆不但关系到读者求知的方便程度, 也关系到图书馆的发展, 同时现在很多图书馆的系统都是基于C/S模式, 并且同城各图书馆之间的互联也很少, 大大增加了图书资源的浪费, 也给用户对图书的检索和使用增加难度。因此, 开发一套完善的基于Struts2 B/S模式图书管理系统就显得更为重要。

2. Struts2 web框架

Struts 2框架主要由三个部分组成:核心控制器、业务控制器和用户实现的业务逻辑组件。核心控制器FilterDispatcher负责拦截用户请求, 如以action结尾则转入Struts 2框架处理;然后会调用相应业务控制器 (用户实现的Action) 来处理用户请求;业务控制器Action只作为中间负责调度的调度器, 一般不对用户请求进行实际处理, 而是调用模型组件处理具体的业务逻辑;之后核心控制器根据Action的处理结果返回相应视图给用户显示最终处理结果。

Struts2与Struts1相比, 已有很多革命性的改进, 但它并不是新发布的新框架, 而是在非常成熟的WebWork框架基础上发展起来的。从某种程度上来讲, Struts2没有继承Struts1的血统, 而是继承WebWork的很多优点。所以说, WebWork衍生出了Struts2。因为Struts2是WebWork的升级, 因此其稳定性、性能等各方面都有很好的保证, 而且吸收了Struts1和WebWork两者的优势, 其技术水平可以说是绝无仅有的。Struts2是一个崭新的项目, 发展空间很大, 当前最新的技术、最新的理念都包含在其中, 因此使用了Struts2就相当于站在了Java Web开发的最前沿。本系统采用基于Struts2结构的Java Web技术开发, 给系统按时按质的完成提供了保证。

3. 图书管理系统分析

3.1 系统的需求分析

需求分析是系统开发最重要的阶段, 通过需求分析完成在问题和解决方案之间架设桥梁第一步。经过调研后得到图书管理系统的业务需求, 其中以系统管理员为主的用例有: (1) 系统参数管理; (2) 人员管理; (3) 权限管理; (4) 图书订购管理; (5) 馆藏信息查询; (6) 借阅信息查询等。以图书管理员为主的用例有: (1) 图书入馆; (2) 图书报损; (3) 读者管理; (4) 挂失恢复管理; (5) 借书管理; (6) 罚款管理; (7) 还书管理等。以读者为主的用例有: (1) 借阅查看续借; (2) 预约管理; (3) 目录检索和分类导航; (4) 读书指引和新书通报; (5) 图书订购推荐; (6) 用户历史信息查看; (7) 用户信息管理等。

将以上功能分为四大功能集合, 分别为:基本信息管理, 图书订购管理, 图书借阅及查询, 用户及权限管理。

(1) 基本信息管理功能集合:该集合包括系统参数设置、图书入馆、图书报损、读者管理、用户信息管理。

(2) 图书订购管理功能集合:包括图书订购推荐, 和图书订购管理。

(3) 图书借阅及查询功能集合:包括借书管理、还书管理、罚款管理、挂失恢复管理、借阅查看续借、预约管理、馆藏信息查询、借阅信息查询、目录检索和分类导航、读书指引和新书通报、用户历史信息查看等。

(4) 用户及权限管理:包括人员管理、权限管理。

4. 图书管理系统设计

4.1 系统开发的内容

根据系统需求分析可以得出系统开发内容主要包括四个模块:1) 用户及权限管理模块;2) 基本信息管理模块;3) 订购管理模块;4) 借阅查询管理模块。

4.2 系统的总体结构

图书管理系统采用模块化的设计。系统结构模型由物理基础结构、应用支撑平台、图书管理系统三个层次组成。其中物理基础结构是构成教学模拟系统的硬件和网络基础;应用支撑平台建立在物理基础结构之上, 它包括数据库服务器、Web服务器;图书管理系统部署在web服务器上, 可以通过浏览器浏览的方式直接向用户提供图书管理服务, 向读者提供查询、续借等服务。

图书管理系统为局域网运行环境。局域网与校园网互联互通, 再连接到Internet, 从而实现远程服务。

局域网的软件环境为Windows 2000 Server、Oracle9i;硬件为PC级服务器, 512M RAM, PIII800以上CPU, HD40G以上;终端用户PC机PIII 1G/256M/20G/15"带10M网卡。

4.3 数据库设计

系统采用B/S三层体系结构, 在该结构中第三层为数据库服务器, 它的功能是接收Web服务器对数据库的操纵请求。具体实现方法是, 用Oracle作为数据服务器, 以ODBC为数据接口提供数据服务, web服务器用来解释请求并在处理后返回相应的结果, 而浏览器可以下载服务器上应用程序的执行结果。

数据库主要包含表有:人员信息表, 读者信息表, 图书信息表, 借书表, 罚款表等。

4.4 系统模块设计

根据图书管理业务活动的分析, 系统主要设计了四个模块, 各模块及其包含小模块如图1所示。

5. 图书管理系统的实现

5.1 订购管理模块的实现

订购管理模块, 完成图书订购推荐管理, 分为前台管理和后台管理2个功能模块, 功能模块如图2所示。

5.2 图书借阅查询模块的实现

图书借阅查询模块, 完成图书借阅和读者查询管理, 分为前台管理和后台管理2个模块。功能模块如图3所示。

1) 图书借阅查询前台管理

通过浏览器, 读者可以方便的查看自己的借阅信息, 并完成续借操作, 查询图书信息, 并完成预约管理功能。模块提供以下功能:借阅信息查询、续借、馆藏信息查询、预约管理、检索和导航、指引和通报、用户历史信息查看。

2) 图书借阅查询后台管理

管理员通过后台操作, 对读者借阅、挂失、罚款等进行管理, 是保证图书管理正常运行所必须而十分重要的。图书借阅及查询后台管理分为借书管理、还书管理、挂失恢复管理、罚款管理几个部分。

6. 结语

本图书管理系统是为了提供图书管理效率而设计的信息管理系统。论文结合真实的图书管理与读者查询的需要, 考虑参加到整个流程中的不同角色, 全面体验图书管理的借书、续借、预约等过程, 论文的开发完成, 有助于提高图书管理的工作效率, 便于系统维护, 减少系统升级开销, 改善使用者的用户体验, 但还存在一些不足, 如:

系统的安全性, 数据加密存储和传输以提高系统安全性方面要进一步完善, 数据库方面, 通过数据库的优化以提高执行效率的方法还没有深入研究。

参考文献

[1]Nadir G著.陈晓燕, 丁炎炎译.实用J2EE应用程序体系结构.北京:清华大学出版社, 2003

[2]王珊, 萨师煊.数据库系统概论.北京:高等教育出版社, 2001

[3]丁里, 孙元.Java语言SQL接口JDBC编程技术.北京:清华大学出版社, 2001

[4]赵松涛编著.Oracle9i基础培训教程.北京:人民邮电出版社, 2003

[5]Joseph Schmuller, 李虎, 王美英, 等.UML基础、案例与应用教学 (第三版) [M].北京:人民邮电出版社

[6]黄贤英.UML建模过程及在需求分析中的应用.计算机工程, 200l, 27, (11) :184-186

Struts2技术 篇9

网上书城系统[1]是电子商务[2]的一块重要部分,通过它可以进行在线商品交易。随着互联网的逐渐普及以及电子商务的发展和人们购物理念与购物方式的改变,网上书城系统将有着巨大的市场潜力. 人们不出门就可以买到想要的图书,已成为现实。将来的网上书店系统无所不在,彼此关联,具有交互性和智能化的特征。

1 Struts2简介

Struts2[3][4]本身主要是基于另外一个框架:Webwork[5],原理和配置文件和Web Work非常相似,也就是说Struts2整个代码的根基都是基于Web Work的。Struts2框架本身比Struts1框架优秀的多,而且在代码的编写方式上或者在配置文件的编写方式上都更加清晰,冗余度更加小,而且Struts2还支持扩展。

本系统应用了Struts2框架采用了MVC[6](Model+View+Con-troller)的设计模式,而MVC设计模式的优点如下:

1首先最重要的一点是多个视图能共享一个模型,同一模型能够被不同的视图重用,大大提高了代码的可重用性。

2由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想,能构造良好的松耦合构件。

3控制器提高了应用程序的灵活性和可配置性,控制器用来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。

2 系统总体设计

2.1 系统的功能模块

本系统是在Windows操作系统下,以MySql作为数据库开发平台,使用结构化查询语言进行增删改查操作,以Tomcat6.0作为Web服务器,以My Eclipse 6.5为开发软件进行开发的。网上书城系统主要分为首页、用户管理、购物车管理、订单管理、注销和安全退出六大模块。用户管理模块包括用户注册、用户登录、修改用户信息、显示用户信息四个子模块,其中在用户注册子模块,要采用校验框架对用户输入的各项注册信息进行校验,如果校验出错,则显示Field级别的Error给用户以提示。网上书城的系统模块图如图1所示。

2.2 系统架构说明

我们整个系统的架构分为表示层、业务逻辑层、数据访问层和资源层。表现层只要有表示视图的一些JSP或者HTML视图所组成,然后这些页面的请求直接提交给对用的Action。这里的Service有一个接口和一个实现类,Action依赖的是Service接口,DAO中的方法都是一些原子的方法,一个Service( ) 方法可能会包含好几个DAO方法,把它们放在一个Context中,最后commit失败的话就rollback.网上书城的系统架构如下图所示:

我们在设计业务逻辑层时,购物车的信息保存的Session中,在提交订单的时候才进入到数据库。购物车的信息可以使用Map<K,V>来表示。其中:K为Product,V为数量,Product作为Key的话需要重写equals和hash Code方法,修改了产品的数量后,要立刻计算产品的总额。(Ajax/DWR的应用)。业务逻辑层为以下几方面:

1) 向购物车添加一个产品

public void addProduct(Product product,String productId);

2) 在购物车中删除一个产品

public void removeProduct(Integer productId);

3) 修改购物车中一个产品的数量

public void updateProduct(Integer productId, int quantity);

4) 清空购物车

public void clearCart();

5) 查询购物车所有产品信息

public List findAllProducts();

2.3 系统E-R图

本系统的E-R图如下所示,其中ContactInfo类是用户详细信息类,User类是用户类,Shop Cat类是购物车类,Pay Way类是支付方式类,Order类是订单类,OrderLine类是订单项类,Prod-uct类是产品类,Category类是产品分类类,OrderStatus类是订单状态类。

3 设计与实现

3.1 校验框架

我们在用户注册界面,为了判别用户输入信息的有效性,采用Struts2提供的校验框架来实现对用户在注册界面输入信息的合法性,那么我们的校验文件按照校验框架命名规则命名为Regist Action-validation.xml,并且该XML校验文件要和Regis-tAction在同一个包中。校验框架的代码如下:

<validators>

<field name="username">

<field-validator type="requiredstring">

<param name="trim">true</param>

<message>username can not be blank!</message>

</field-validator>

</field>

//省略其他字段的校验

</validators>

我们的注册页面采用的也是Struts2标签,自动提交出Field Error级别的错误,Field Error级别的错误信息底层是用Linked Hash Map实现的,该Map的key是String类型,value是List<String>类型,这就表示一个Field Name可以对应多条错误信息,这些错误信息都放置在List<String>集合当中。

3.2 实现国际化

我们在登录界面实现了国际化,为了实现国际化,我们首先要下载Resource Bundle插件,然后将该插件文件中的plugins文件夹去覆盖My Eclipse安装目录下的plugins文件夹。在Struts2中提供了一个名为i18n的拦截器,该拦截器在执行Ac-tion[a16]方法之前,自动查找请求中一个名为request_locale的参数。实现国际化要分别定义中文和英文两个属性文件,然后在这两个属性文件中通过同一个key在不同的属性文件中对应不同的value。

登录界面的代码设计如下所示:

<body>

<s:i18n name="message">

<H3><s:text name="loginView"></s:text></H3>

<s:form action="login" method="post">

<s:textfield name="UNAME" key="UNAME"></s:textfield>

<s:textfield name="PWD" key="PWD"></s:textfield>

<s:submit value="%{getText('login')}"></s:submit>

</s:form>

<s:text name="selectLanguage"></s:text>

<a href="login.action?request_locale=zh_CN"><s:text name="chinese"></s:text></a>

<a href="login.action?request_locale=en_US" ><s:text name="english"></s:text></a>

</s:i18n>

</body>

3.3 过滤器的配置

在该系统中,我们要通过过滤器来实现用户的非法访问,我们通过Login Filter类实现Filter接口来新建过滤器,并且在web.xml配置它,来实现禁止用户非法访问该系统资源的目的。这样我们就通过一个过滤器就能完成整个Web应用的未登录情况的处理。代码实现如下:

public class LoginFilter implements Filter {

public void destroy() { }

public void doFilter(ServletRequest request, ServletResponseresponse,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest req=(HttpServletRequest)request;

HttpServletResponse resp=(HttpServletResponse)response;

HttpSession session=req.getSession();

String requestURI=req.getRequestURI();

if(requestURI.endsWith("login.jsp") ||requestURI.endsWith("UserLoginServlet"))

{

chain.doFilter(request,response);

return; }

if(null==session.getAttribute("user"))

{resp.sendRedirect("session/login.jsp");}

else{

chain.doFilter(request,response);}}

public void init(FilterConfig arg0) throws ServletException {

} }

3.4 创建实体类

本系统的E-R图中对应的实体类,他们的属性与数据库表字段一一对应,并提供setter和getter方法,本系统选择的是JD-BC技术配置映射。例如订单项类(Order Line类)可以表述如下:

Package org.model;

public class OrderLine{

private int id;

private Order order;

rivate Product product;

private int amount;

// 省略上述属性的get和set方法}

我们在程序中获取到数据后把它插入到数据库时,数据库存储数据时,也有自己的编码格式,这就要求我们把数据库中的编码格式和页面程序的编码格式都统一定为utf-8.

4 结束语

本文从Struts2框架开始,阐述了Struts2框架的基本原理和MVC设计模式的优点,最后描述了实现该系统的具体的Struts2技术细节和过程。结果证明,用Struts2框架可以有效地进行网上书城系统的开发。

参考文献

[1]曹蕴.基于MVC模式的STRUTS框架在网上购书系统中的应用[D].天津:天津大学,2006.

[2]丁毅.网上书店电子商务系统的设计与实现[D].济南:山东大学,2005.

[3]李刚.轻量级Java EE企业级应用实战——Struts 2+Spring3+Hibernate整合开发[M].3版.北京:电子工业出版社,2011.

[4]孙鑫.Struts2深入详解[M].北京:电子工业出版社,2008.

[5]唐芸,周学君,彭代军.基于Web Work框架的数据持久化实现[J].计算机与数字工程,2007(5).

上一篇:油菜生产下一篇:施工企业资金风险控制