• 1.35 MB
  • 2022-04-22 11:24:33 发布

毕业设计-SSI框架的电子商务信息平台的研究和构建.doc

  • 28页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'毕业设计-SSI框架的电子商务信息平台的研究和构建目录引言3第一章系统实现原理31.1表示层框架31.2业务层框架31.3持久层框架31.4集成三种框架技术31.4.1客户层41.4.2表示层41.4.3业务层41.4.4持久层4第二章电子商务信息平台的设计52.1系统平台定位52.2用户管理系统52.3信息显示系统62.4信息发布系统62.5信息查询系统6第三章系统代码实现63.1整合项目开发基本框架63.1.1准备工作63.1.2向项目中加入Spring框架63.1.3向项目中加入Struts框架73.1.4配置数据源83.1.5为项目配置Spring事务管理93.1.6配置项目定时器93.1.7向项目中加入iBATIS框架103.1.8向项目中加入AJAX框架123.1.9向项目中加入URL重写框架153.2具体代码实现153.2.1持久层实现163.2.2业务逻辑层的实现223.2.3控制层实现243.2.4展示层页面实现263.2.5平台页面展示37第四章总结43参考文献4328 引言伴随着我国网络互联的普遍推广,拥有终端PC机的人数正在大幅增加,进行网络购物和电子支付的人数也必将会越来越多,电子商务占有的市场份额也必会增加,也将会出现更多的电子商务网站。但是,众多中小企业还有相当部分由于各因素的制约而没有开展电子商务,这就造成了这些中小企业在面对竞争国际化、炽热化的今天很容易处于劣势,这是我国中小企业亟待解决的问题。作为企业的对外沟通的平台,电子商务信息平台可以巩固和树立企业形象,成为产品品牌宣传和业务推广的有力渠道,是与经销商或合作伙伴之间沟通、业务合作往来的主要纽带,节省了企业成本,提高了效率。因此,对电子商务信息平台的研究和构建有极其重要的意义。第一章系统实现原理1.1表示层框架表现层框架主要有Struts和Tapestry。Struts框架在创建Web应用时能容易地分离表示层和业务层,它是在JSPModel2的基础上实现的一个MVC框架。Struts框架主要由模型、视图、控制器三部分组成,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由ActionServlet和Action实现,视图由一组JSP文件构成。Tapestry与Struts应用框架不同的是,它是基于组件,而不是面向脚本语言(比如JSP和Velocity)的,组件是由一个定义文件(以XML的格式)、一个HTML模板、一个JAVA类构成的。Tapestry的组件可以被套嵌并包裹其它组件,因此可以组合形成一个更大的组件或逻辑页面。组件的行为模式为Web页面编程提供了很大的方便,事件处理也方便很多。Struts框架由于出现时间早,所以使用相对广泛,它的社区非常活跃,很容易找到很多现成的开源功能标签以供使用以及样例程序可供参考,而且运行比较稳定,因此本文表示层采用Struts框架。1.2业务层框架业务组件层轻量级解决方案主要包括Spring、Hivemind等。但是目前使用最为广泛的还是Spring框架,Spring框架是一个基于IoC和AOP(面向方面编程)的构架。采用IoC使得它可以很容易地实现bean的装配,提供了简洁的AOP并据此实现事务管理等,但是它不具备处理应用分布式的能力。Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。1.3持久层框架持久层框主要有Hibernate和各种JDO产品,以及iBATIS。Hibernate是一个开源的O/RMapping框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用JDBC的场合,可以在应用EJB的J2EE框架中取代CMP,完成数据持久化的重任iBATIS是一个简易的SQLMap工具,它是将手工编写的在xml配置文件中的SQL语句映射成Java对象。使用iBATIS提供的O/RMapping机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate实现O/RMapping而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL语句,而iBATIS则要求开发者编写具体的SQL语句。相对Hibernate等全自动O/RMapping机制而言,iBATIS以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。本文采用iBATIS作为持久层框架,充分发挥其自由灵活的特点。1.4集成三种框架技术:28 将Struts框架,Spring框架和iBATIS框架集成在一起,实现无缝连接,可达到提高软件开发效率的目的。集成后的框架分为五个逻辑层,自顶向下依次是客户层、表示层、业务层、持久层、数据源层,图1为五个逻辑层的分布情况以及三个框架分别所居的层次。图1整合后的分层结构图1.4.1客户层该层完成与用户的交互功能,负责传送客户请求,接收系统响应,显示处理结果。主要由HTML代码、JSP代码和标签组成,属应用系统的前端界面部分。1.4.2表示层该层主要负责处理用户请求,并将请求信息发送到业务层进行处理,业务层处理完之后,将处理结果返回到客户层,基于MVC模式的Struts框架工作在表示层,它还负责处理应用程序的异常以及对提交的表单进行数据校验。1.4.3业务层该层负责处理用户请求的业务逻辑。业务层采用轻量级容器SpringIoC,它通过配置XML文件进行各层间的交互,为表示层提供业务模型组件。业务模型组件通过调用持久层DAO操纵数据库,完成业务逻辑。IoC还提供事务处理、缓冲池等容器组件,提升系统性能,保证数据完整性。1.4.4持久层该层主要实现对数据库的操作。iBATIS框架工作在持久层,iBATISDAO通过调用SQLMap,28 完成对数据库的操作,实现业务层的调用。iBATISSQLMap使用XML描述符将JavaBeans等映射到SQL语句,通过JDBC实现与底层关系数据库的交互。数据源层由关系型数据库系统(如:SQLServer,Oracle等)构成数据源层。集成后的框架具备了三种框架的技术优势,将Struts的MVC机制,Spring的控制反转机制,以及iBATIS的SQLMap映射机制融合在一起。集成框架在Web应用程序开发中的优势主要体现在:(1)Struts框架的MVC模式将表现逻辑和业务逻辑分离,摆脱了原有模式的高耦合性,提高了开发效率。(2)Spring框架提供了轻量级的管理业务组件的IoC容器。实现了对EJB技术的替代和更好的组件重用性,降低对象之间的依赖,使得程序的调试修改更为简单。(3)iBATIS框架实现了DAO和SQLMap的分离,使系统的设计更清晰、更易维护、更易单元测试。而且通过灵活使用SQL语句基本上可以实现不使用数据访问框架能够实现的所有功能,甚至更多。(4)三框架的融合大大减少了软件开发的代码量,降低了各模块间的耦合度,使得程序更易调试、修改与维护,提高了工作效率。(5)三框架都是开源项目,可以免费获取,不需要EJB服务器,应用程序部署在WEB服务器上,节省开支、降低了开发成本。第二章电子商务信息平台的设计2.1系统平台定位作为电子商务信息平台,目的是为IT行业的用户提供最快最新的IT行业的信息、提供便利的在线服务,使企业的利益最大化。为会员单位和其他企事业单位提供IT各行业国内外新技术、新产品、先进管理经验和市场信息;为企业提供国际交流、贸易洽谈、市场开拓机会;开展营销活动,定期举办展销会等贸易促进活动,发布各种信息,提供相关服务。此平台将充分利用计算机联网改变了传统的信息传递方式,提供了快速获取最新信息的手段这一优势,及时发布IT行业实时动态信息,为用户提供全方位的行业信息服务。电子商务信息平台可以巩固和树立企业形象,成为产品品牌宣传和业务推广的有力渠道,是与消费者之间交流的重要渠道,是与经销商或合作伙伴之间沟通、业务合作往来的主要纽带,节省了企业成本,提高了效率,而且也为用户节约了时间。2.2用户管理系统作为电子商务信息的展现平台,所以有必要对用户进行会员与非会员的区分,给会员赋予特殊权限,可以使用具有商业机密的信息,而非会员则只能浏览一些大众性的信息。用户管理系统的主要功能是管理和维护会员和非会员的权限和信息。(1)在Mysql上创建本电子商务平台的数据库(2)建用户的档案信息表(3)设置与用户信息相关的字段。(4)设计用户界面。为了方便新用户注册,老用户及时登录,我们将用户管理模块放在了首页的最醒目的位置—主页的右上方。这个模块主要包括四个内容:新用户注册、用户登录、用户修改密码以及用户忘记密码的处理。a新用户注册。当用户填写好自己的会员信息并提交后,我们设计了一个用于处理会员信息的在后台服务器端运行的程序,用于将会员所提交的信息实时的写入数据库中。b会员身份确认模块。用户提交了注册信息后,我们要为系统管理员设计一个查阅用户信息和确认会员身份的系统,这就是会员身份确认模块。28 c忘记密码处理模块。用户在注册时需要提交密码提示问题与答案,如果用户忘记了密码,但没有忘记密码提示问题的答案,那么我们可以设计出一个让用户通过回答密码提示问题的程序来让用户获得密码。在数据库中只需通过比较该用户提交的密码提示问题的答案是否与原来存在数据库中的答案相匹配来判断是否给他提供正确的密码。2.3信息显示系统传达企业电子商务信息,包括图片新闻、商城快讯、一周热点排行、新闻专题、电商服务、精彩推荐、厂商动态和电商世界,紧跟时代脉搏,把握无限商机。(1)建立新闻数据库表。由于新闻信息量大、时效性强、新闻类别多,所以采用分类显示的方法。这样一来,就需要根据新闻类别的不同建立不同的新闻数据库表。(2)设置与新闻信息相关的字段,例如新闻编号,新闻标题,新闻内容,新闻发布时间等,其中新闻编号和新闻发布时间在程序设计中起着相当重要的作用。这是因为用户总是想在最先看见最新的新闻,所以,我们在设计程序时,必须将新闻的显示次序按照新闻的发布时间的降序排列,这样就可以保证用户最先看到的新闻一定是最先发布的。(3)新闻信息的分页显示。2.4信息发布系统为企业提供方便的在线信息发布功能,使企业及时地发布供应和需求信息。充分利用网络信息的时效性强、准确性高、便于存储和检索方便的功能,奠定企业进行网络营销决策和计划的基础。2.5信息查询系统方便用户进行各种对感兴趣的信息进行检索,寻求商机,节省时间和资源。这部分包括分类查询和条件查询两部分。第三章系统代码实现3.1整合项目开发基本框架3.1.1准备工作(1)配置开发环境¨JDK版本:jdk1.6.0¨J2EE容器:Tomcat6.0¨数据库:MySQL5.1.23¨系统:WindowsXPProfession¨开发工具:MyEclipse6.5.0、Dreamweaver8.0、PhotoShopCS3¨本系统使用的框架版本:Struts2.0、Spring2.5、Ibatis(2)下载相关jar包到Spring、Struts和iBATIS官方网站下其最新压缩包,将下载的三个框架分别解压缩。新建一个WebProject(名称为SSH_NEWS)。3.1.2向项目中加入Spring框架将Spring解压缩以后spring-framework-2.5.6dist目录中的spring.jar复制到Web项目的WEB-INF/lib目录中(Spring核心jar包)。28 复制spring-framework-2.5.6liblog4j中的log4j相关的jar文件到项目中WEB-INF/lib目录中(日志jar包)。打开WEB项目中的WEB-INF目录中的web.xml文件,添加及结合项目实际情况配置以下内容contextConfigLocation/WEB-INF/config/applicationContext.xmllog4jConfigLocation/WEB-INF/config/log4j.propertieslog4jRefreshInterval60000org.springframework.web.context.ContextLoaderListenerorg.springframework.web.util.Log4jConfigListener3.1.3向项目中加入Struts框架将解压之后的strutsstruts-2.1.8.1appsstruts2-blank-2.1.8.1WEB-INFlib下面的六个基本jar文件复制到Web项目的WEB-INF/lib目录中打开WEB项目中的WEB-INF目录中的web.xml文件,添加及结合项目实际情况配置以下内容struts2-cleanuporg.apache.struts2.dispatcher.ActionContextCleanUpstruts2-cleanup/*struts228 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterstruts2/*3.1.4配置数据源Spring提供了对多种数据连接池的支持,本项目选中c0p0来作为数据库的连接,直接将spring-framework-2.5.6libc3p0下面的c3p0-0.9.1.2.jar复制到Web项目的WEB-INF/lib目录中(1)为了是后边修改数据库相关信息更加方便,在WEB-INFconfig目录中创建jdbc.properties,具体内容:jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/eshop?useUnicode=true&characterEncoding=utf-8jdbc.username=rootjdbc.password=mysql(2)在WEB项目中的WEB-INFconfig目录中的Spinrg的配置危机applicationContext.xml文件,配置以下内容:/WEB-INF/config/jdbc.properties${jdbc.driverClassName}${jdbc.url}${jdbc.username}${jdbc.password}28 3.1.5为项目配置Spring事务管理在WEB项目中的WEB-INFconfig目录中的Spinrg的配置危机applicationContext.xml文件,添加以下内容:3.1.6配置项目定时器由于项目需要根据后台的数据生成实时的数据信息,因此需为项目配置一个时间调度器,让项目可以根据设定的时间实时执行我们所提供的方法,生成最新的信息。Spring提供对调度器的支持,将spring-framework-2.5.6libquartz下面的quartz-all-1.6.1.jar复制到Web项目的WEB-INF/lib目录中,同时将struts-2.1.8.1lib项目commons-collections-3.2.jar复制到Web项目的WEB-INF/lib目录中编写相应的从数据库中读取数据生成最新信息的java类,本项目中此类为JspToHtml.java,项目中将根据设定的时间执行JspToHtml类中的buildHtml方法。详细代码请附件源码。在applicationContext.xml文件,添加以下内容:28 buildHtml06000003.1.7向项目中加入iBATIS框架由于Spring压缩包里面已经有了iBATIS的jar包,直接spring-framework-2.5.6libibatis下面的ibatis-2.3.4.726.jar复制到Web项目的WEB-INF/lib目录中在iBATIS中SqlMapClientFactoryBean是一个工厂bean,它暴露了两个关键属性用于注射IBatis配置文件和相关的数据源。在工厂内部,通过读取IBatis配置文件,Spring会创建出IBatis的核心组件SqlMapClient,并向相关的DAO进行注射。28 SqlMapProductDao继承了SqlMapClientDaoSupport,后者暴露出一个sqlMapClient属性,用于接受Spring的注射。SqlMapClientDaoSupport会对其中封装的SqlMapClientTemplate做相应的设置,所以DAO子类便可在取用SqlMapClientTemplate时正常地工作了。首先在WEB-INF/config中创建iBATIS配置文件sqlMapConfig.xml,通过它加载相应的sql配置文件,具体内容如下在applicationContext.xml文件,添加对iBATIS的支持:…//省略WEB-INF/config/sqlMapConfig.xml…//省略相应的Dao以及Service则由Spring容器通过依赖注入来管理:…//省略28 …//省略3.1.8向项目中加入AJAX框架在目前的Web2.0热潮中,Ajax已成为人们谈论最多的技术术语!其实,AJAX(AsynchronousJavaScriptandXML)是多种技术的综合,它使用XHTML和CSS标准化呈现,使用DOM实现动态显示和交互,使用XML和XSTL进行数据交换与处理,使用XMLHttpRequest对象进行异步数据读取,使用Javascript绑定和处理所有数据。在本项目中,将使用目前比较流行的两个ajax框架ajaxAnywhere和dwr。配置dwr框架DWR(DirectWebRemoting)是一个开源的类库,可以帮助开发人员开发包含Ajax技术的网站。它可以允许在浏览器里的代码使用运行在Web服务器上的Java函数,就像它在浏览器里一样。DWR包含两个主要的部分,其一是运行在浏览器客户端的Javascript,这部分被用来与服务器通信,并更新页面内容;其二是运行在服务器端的JavaServlet,这部分被用来处理请求并将响应结果发送给浏览器。在项目通过根据用户评论是提交的用户名和密码,查询是否有次用户存在,存在则将相应的信息返回到页面//判断是否匿名…//省略functioncheckUser(){varcomment1=document.getElementById("commentVO.comment").value;comment1=comment1.replace(/(^s*)|(s*$)/g,"");if(comment1==""){alert("请输入评论内容");returnfalse;}//匿名if(document.getElementById("notuser").checked){comment();}//不匿名,检查用户名和密码else{varuserVO=newUserVO();varname=document.getElementById("username").value;varpwd=document.getElementById("pwd").value;name=name.replace(/(^s*)|(s*$)/g,"");pwd=pwd.replace(/(^s*)|(s*$)/g,"");if(name==""){alert("请填写用户名!");return;}if(pwd==""){alert("请填写密码!");return;}userVO.loginName=name;28 userVO.loginPwd=pwd;userDao.loadUser(userVO,callBack);}}functioncallBack(data){if(data==null||data==""){alert("用户名或密码不正确!");}else{document.getElementById("commentVO.userId").value=data.id;comment();}…//省略上dwr官方网站下载最新的jar包,本项目中为2.0.3版本,将dwr的jar包添加到web项目中。首先,在WEB-INF目录下创建dwr的配置文件dwr.xml在web.xml中配置dwr的servlet:…//省略dwrorg.directwebremoting.servlet.DwrServletconfig-tcps/WEB-INF/dwr.xmldebugtruedwr/dwr/*…//省略配置ajaxAnywhere使用AjaxAnywhere可以将页面简单的划分为多个区域(zone),然后调用AjaxAnywher刷新(Refresh)那些指定的区域,而不是整个页面。在本系统中,对于新闻的评论采用了ajaxAnywhere,当我们提交评论时,既可以在无需刷新整个页面的情况下,在下方的评论列表中看到提交的评论。如下图中,只刷新最新评论区域,同时也可以看到右上角的loading标志,如图3-1:28 图3-1异步加载展示图向项目中添加ajaxAnywhere的jar包,在web.xml配置相应的过滤器:AjaxAnywhereorg.ajaxanywhere.AAFilterAjaxAnywhere*.jsfAjaxAnywhere*.jspAjaxAnywhere*.action3.1.9向项目中加入URL重写框架通过URL重写,可以缩短url,隐藏实际路径提高安全性,易于用户记忆和键入,易于被搜索引擎收录。向项目中添加URL重写的jar包,本系统中使用的是urlrewritefilter-3.1.0.jar。首先在WEB-INF中创建URLWRITER的配置文件urlrewrite.xml,具体内容如下:28 ^/InfoView_([0-9]+).html$/emotionAction.load.action?emotionArticleVO.atricleId=$1^/queryInfo_([0-9]+).html$/emotionAction.queryForList.action?emotionArticleVO.auditFlag=Y&emotionArticleVO.flag=$1^/index.jsp$/l_index.jsp^/index.html$/l_index.jsp其次在web.xml中配置相应的过滤器…//省略UrlRewriteFilterorg.tuckey.web.filters.urlrewrite.UrlRewriteFilterlogLevelWARN…//省略此时在浏览器中输入http://localhost:8099/SSH_NEWS/InfoView_162.html,既可以执行/emotionAction.load.action?emotionArticleVO.atricleId=1633.2具体代码实现作为一个电子信息展现的平台,如何更好的向外界展示企业的信息,是一个值得研究的重点,在项目中,为了获取企业发布的最新新闻列表,设计时间调度器,定时生成最新信息;为了平台的安全性和易于被搜索引擎收入,采用了url重写技术;为了提升与用户间的有好交互,向项目中加入了ajax框架。下面将通过具体的项目流程,讲解以上重点。3.2.1持久层实现在持久程中主要包括文章VO和评论VO,同时文章和评论为一对多关系,即一篇文章可以拥有多条评论,而一条评论只能属于一篇文章。(1)表结构文章表字段名类型备注28 IdInt文章idAuthorVarchar作者Contenttext文章内容ClickInt点击数TitleVarchar文章标题IntroductionVarchar文章简介UpInt顶DownInt踩FlagVarchar文章类型EanbleflagVarchar是否可用标识符AuditFlagVarchar是否审核标识符createDateDate创建时间pubDateDate发布时间PictureVarchar附件图片地址OriginVarchar文章来源评论表字段名类型备注IdInt评论idemotionarticleidInt评论文章idCommentVarchar评论内容CreateDateDate评论时间userIdInt评论用户(2)对应的VO文章vo(com.emotion.model.EmotionArticleVO)publicclassEmotionArticleVOextendsBaseVO{privateintatricleId;privateStringtitle;privateStringauthor;privateStringcontent;...//省略get/set方法评论VO(com.emotion.model.CommentVO)publicclassCommentVOextendsBaseVO{privateintid;/***用户id*/privateintuserId;/***用户名*/privateStringuserName;//评论内容privateStringcomment;/***对应文章id28 */privateintemotionArticlId;privateStringarticleName;...//省略get/set方法(3)对应的ibatis的xml文件文章VO对应的xml文件(com/emotion/model/sql/EmotionArticle.xml),主要代码如下:…//省略SELECTidasatricleId,author,title,click,up,down,createDate,pubDate,picture,introduction,flag,if(flag="01","商城快讯",if(flag="02","一周热点",if(flag="03","最新文章",if(flag="04","电商世界",if(flag="05","电商服务",if(flag="06","精彩推荐",if(flag="07","亲情诗歌",if(flag="08","厂商动态",if(flag="09","亲情短信",if(flag="10","新闻专题","图片新闻"))))))))))asflagNameFROMn_articlewhereenableFlag="Y"auditFlag=#auditFlag#flag=#flag#titleLIKEBINARYCONCAT("%",#title#,"%")titleLIKEBINARYCONCAT("%",#title#,"%")orderbyiddesclimit#pageDateVO.startRowNum#,#pageDateVO.recordPerPage#…//省略28 (1)相应的Dao(主要包括操作数据库的逻辑接口ICommentDao.java,IEmotionDao.java,以及其实现类CommentDaoImpl,EmotionDaoImpl组成,编写代码如下:ICommentDao(com.emotion.dao.inface.ICommentDao):publicinterfaceICommentDao{//查询评论列表publicListqueryForList(CommentVOcommentVO);//增加评论publicintaddComment(CommentVOcommentVO);}IEmotionDao(com.emotion.dao.inface.IEmotionDao):publicinterfaceIEmotionDao{//查询文章列表publicListqueryForList(EmotionArticleVOemotionArticleVO);//根据文章id加载文章内容publicEmotionArticleVOload(EmotionArticleVOemotionArticleVO);//增加文章“顶”数publicEmotionArticleVOaddUp(EmotionArticleVOemotionArticleVO);}CommentDaoImpl(com.emotion.dao.inface.CommentDaoImpl):publicclassCommentDaoImplextendsSqlMapClientDaoSupportimplementsICommentDao{//查询对应文章的评论列表publicListqueryForList(CommentVOcommentVO){//记录总数intcount=(Integer)this.getSqlMapClientTemplate().queryForObject("comment.getListCount",commentVO);//总记录数commentVO.getPageDateVO().setRecordTotal(count);returnthis.getSqlMapClientTemplate().queryForList("comment.queryForList",commentVO);}…//省略}EmotionDaoImpl(com.emotion.dao.inface.EmotionDaoImpl):publicclassEmotionDaoImplextendsSqlMapClientDaoSupportimplementsIEmotionDao{//查询文章列表publicListqueryForList(EmotionArticleVOemotionArticleVO){//记录总数intcount=(Integer)this.getSqlMapClientTemplate().queryForObject("emotionArticle.getListCount",emotionArticleVO);//总记录数emotionArticleVO.getPageDateVO().setRecordTotal(count);returnthis.getSqlMapClientTemplate().queryForList("emotionArticle.queryForList",emotionArticleVO);}28 …//省略}在Spring配置文件中配置Dao(WEB-INF/config/applicationContext-Common.xml):…//省略…//省略3.2.2业务逻辑层的实现在本信息平台中,对文章进行操作以及对文章评论进行操作的业务层由业务逻辑接口ICommentService.java,IEmotionService.java,以及其实现类CommentServiceImpl.java,EmotionServiceImpl.java组成,事务管理交由Spring2统一负责。编写代码如下:ICommentService.java(com.emotion.service.inface.IcommentService):publicinterfaceICommentService{//查询评论列表publicListqueryForList(CommentVOcommentVO);//增加评论publicintaddComment(CommentVOcommentVO);}IEmotionService.java(com.emotion.service.inface.IEmotionService):publicinterfaceIEmotionService{//查询评论列表publicListqueryForList(EmotionArticleVOemotionArticleVO);//根据文章id加载文章publicEmotionArticleVOload(EmotionArticleVOemotionArticleVO);//增加文章“顶”数publicvoidaddUp(EmotionArticleVOemotionArticleVO);}CommentServiceImpl.java(com.emotion.service.inface.CommentServiceImpl):publicclassCommentServiceImplimplementsICommentService{privateICommentDaocommentDao;publicICommentDaogetCommentDao(){returncommentDao;}…//省略}EmotionServiceImpl.java(com.emotion.service.inface.EmotionServiceImpl):publicclassEmotionServiceImplimplementsIEmotionService{privateIEmotionDaoemotionDao;28 privateICommentDaocommentDao;publicIEmotionDaogetEmotionDao(){returnemotionDao;}publicvoidsetEmotionDao(IEmotionDaoemotionDao){this.emotionDao=emotionDao;}//获得文章列表publicListqueryForList(EmotionArticleVOemotionArticleVO){returnemotionDao.queryForList(emotionArticleVO);}…//省略}在Spring配置文件中配置业务逻辑组件(WEB-INF/config/applicationContext-Common.xml):…//省略…//省略3.2.3控制层实现控制层主要是由struts来实现的,文章,评论控制器类EmotionAction.java,CommentAction采用模型驱动,直接使用持久化类emotionArticleVO,commentVO充当模型类,用于封装表单属性、请求参数及处理结果。然后再根据前面“spring与struts的整合”,在Spring配置文件及struts.xml中配置业务控制器类。代码如下:CommentAction(com.emotion.CommentAction):publicclassCommentActionextendsActionSupportimplementsModelDriven{privateICommentServicecommentService;//采用模型驱动privateCommentVOcommentVO=newCommentVO();publicObjectgetModel(){returncommentVO;}ListcommentList=newArrayList();//获得评论列表publicStringqueryForList(){commentList=commentService.queryForList(commentVO);if(commentList!=null&&commentList.size()>0){CommentVOcommentVO1=28 (CommentVO)commentList.get(commentList.size()-1);commentVO.setArticleName(commentVO1.getArticleName());}return"queryForList";}…//省略get/set方法}EmotionAction(com.emotion.EmotionAction):publicclassEmotionActionextendsActionSupportimplementsModelDriven{publicEmotionArticleVOemotionArticleVO=newEmotionArticleVO();//模型驱动publicObjectgetModel(){//TODOAuto-generatedmethodstubreturnemotionArticleVO;}publicCommentVOcommentVO=newCommentVO();publicIEmotionServiceemotionService;privateICommentServicecommentService;ListarticleList=newArrayList();//获得文章列表publicStringqueryForList(){articleList=emotionService.queryForList(emotionArticleVO);StringforwardStr="queryForList";if(articleList!=null&&articleList.size()>0){EmotionArticleVOemotionArticleVO1=(EmotionArticleVO)articleList.get(articleList.size()-1);//跳转到图片新闻页面if("12".equals(emotionArticleVO1.getFlag())){Stringposition=""+emotionArticleVO1.getFlagName().trim()+"";intnumber=newRandom().nextInt(9)+1;emotionArticleVO.setPosition(position);forwardStr="queryImageForList";}else{Stringposition=""+emotionArticleVO1.getFlagName().trim()+"";intnumber=newRandom().nextInt(9)+1;StringimageUrl="images/image_0"+number+".gif";emotionArticleVO.setPosition(position);emotionArticleVO.setImageUrl(imageUrl);forwardStr="queryForList";}}28 returnforwardStr;}…//省略get/set方法在Struts配置文件中配置(class:struts.xml):…//省略/l_main.jsp/l_main_images.jsp/l_content.jsp/l_searchResult.jsp/l_comment.jsp…//省略3.2.4展示层页面实现展示页面主要包括:文章列表页面l_main.jsp,文章内容展现页面l_comtent.jsp,评论列表页面l_comment.jsp.l_main.jsp(WebRoot/l_main.jsp):…//省略当前位置:"style="color:#ffffff">电子商城>新闻中心>${emotionArticleVO.position}
  • .html"class="preview">[${emotionArticleVO.position}]
    日期:点击:好评:028

  • …//省略l_comtent.jsp(WebRoot/l_comtent.jsp):…//省略
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名:密码:匿名?
    发表评论28 <…//省略3.2.5平台页面展示图3-2系统平台主页图28 图3-3系统平台主页图图3-5精彩推荐列表图28 图3-7信息内容展示图图3-7信息内容展示图28 图3-8评论图图3-9评论列表图图3-10搜索信息图28 图3-11搜索结果图图3-12后台管理图-文章管理图3-13后台管理图-文章类别管理28 图3-14后台管理图-评论管理第四章总结【基于Struts+Spring+iBATIS架构的企业电子商务信息平台的研究和构建】已基本实现了预期目标,相对于一个完整的电子商务信息平台,本系统还存在着许多的不足,例如系统的安全性问题,用户权限问题,还需要进一步学习,进一步完善。在系统的开发过程中,也遇到了许许多多的问题,有时候一个问题需要整个下午,有使甚至需要几天才能解决,通过网上查找资料,以及利用工具书才找到相应的解决方法,但我乐在其中。通过对本系统的开发使我受益匪浅,使我对有关技术有了更加深入的理解,对一个完整系统的开发有了更深的认识,当然我认为最为重要的是锻炼了自己解决问题的能力。这些收获对我以后的学习和工作都大有裨益。参考文献[1]任港.iBATIS框架源码剖析[M].北京:电子工业出版社,2010年6月[2]罗时飞.精通Spring——深入JavaEE开发核心技术[M].电子工业出版社,2008年7月.[3]叶健毅.精通JavaEE-EclipseStruts2HibernateSpring整合应用案例[M].北京:人民邮电出版社,2009[4]李峰;刘彦隆;基于SSH框架与jQuery技术的JavaWeb开发应用[J];科技情报开发与经济;2010年06期[5]蔡雪涛.Hibernate开发及整合应用大全[M].清华大学出版社,2006年3月[6]李刚.轻量级JavaEE企业应用实战--Struts2+Spring+Hibernate整合开发.电子工业出版社.2008年11月.[7]曹渠江,陈真.Struts2框架整合Spring框架在文件上传下载中的应用[J].上海理工大学学报,2009,(02)[8]陈云芳.精通Struts2:基于MVC的JavaWeb应用开发实战[M].北京:人民邮电出版社,2008-07[9]ArienLentz&DerekJ.Balling.高性能MySQL[M].北京:电子工业大学出版社,2010年5月[10]贝让.iBATIS实战.北京:人民邮电出版社,2008年5月28'