论坛首页 Java企业应用论坛

利用struts,spring,hibernate编写的一个案例分析---相关技术、业务流程内容

浏览 1606 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2008-04-16  

原文:http://www.hao-se.cn/blog/article.asp?id=4
项目概要:商品登记后台管理的模拟系统

主要功能模块:新用户注册、忘记密码取回新密码、商品类别的管理(包括类别登记、维护、重新设置商品的归类)、商品的管理(包括商品的登记、维护)、批处理(商品信息的批量上载、下载)、修正密码功能

技术:采用轻量级的web开发框架(SSH组合-- struts、spring、hibernate)来实现,应用经典的MVC架构

按照包的划分分别描述一下系统中所起的作用(java部分):
Action—控制层(由struts来体现),与struts-config.xml结合,控制页面的流转
Dao—数据访问对象层,负责和数据库打交道,应用结合了hibernate技术,以及jdk1.5的泛型技术,形成一个通用的DAO层
Model—模型层,对应数据库中的表结构,由hibernate技术实现
Serlvet—用于初始化基础数据
Service—服务层(业务层),体现整个系统的业务逻辑,也是整个系统最为复杂关键的部分
Activemq—异步消息发送装置(JMS的一种开源实现),由消息接收装置(consumer包下)、消息转换装置(converter包下)和消息发送装置(producer包下)组成。这里主要是用于邮件的异步发送,在新用户注册、取回密码时都是通过发送邮件来实现的。异步的优点是在不影响当前系统的进程下完成任务。
Dwr—Ajax的实现,这里采用了开源的dwr技术实现。主要利用在整体页面不刷新的情况下,动态的改变部分页面内容,提高用户的体验度。比如动态判断用户、类别、商品code等是否已经存在,获取商品类别的显示菜单等等。
Mail—邮件发送功能,其中邮件内容的生成策略采用freemarker技术来实现
Util—工具类,有image下的图片制作类;upload下的图片上传功能;Digest加密技术;Guid用于hibernate的id的生成器

META-INF—下的说明:因为采用activemq4.1版本的原因,它的xsd文件有一定的出入,所以采用修正过的文件,由spring.schemas加载

Resources—资源文件
hibernate.properties:用于配置hibernate参数
mail.properties:配置邮件系统的参数
displaytag:在前台页面显示中,会采用displaytag技术来显示表格,这里配置相应的参数
       ApplicationResources:国际化资源信息

WEB-INF下配置信息的几点重要说明:
首先要说明的是—所有的业务逻辑、action、数据访问层、异步装置、邮件系统…都是交由spring来管理的。所以在spring的包下可以看到action.xml、activemq.xml、dao.xml、dwr.xml、mail.xml、service.xml以及hibernate的核心配置base.xml和组装所以信息的beans.xml。
这是配置文件的核心所在,下面一一介绍:

action.xml—需要和struts包下的struts-config.xml配合使用,这里把action的生命周期也交由spring来管理了。可以看个例子
struts-config.xml下的loginAction
<action path="/loginAction"name="loginForm" parameter="method"
       type="org.springframework.web.struts.DelegatingActionProxy"
       scope="request" validate="false" input="/jsp/login.jsp">
       <forward name="success" path="/jsp/default.jsp" />
</action>
action.xml下的loginAction
<bean name="/loginAction"class="com.iplan.portal.action.LoginAction">
       <property name="userService">
           <ref bean="userService" />
       </property>
</bean>
注意粗体红色的部分,它们是一一对应的,粗体蓝色的部分说明action由spring来接管
注意:这里的action.xml没有在beans.xml中接管,而是在web.xml中体现的。因为struts-config.xml和action.xml是联动的关系,在web.xml中通过servlet中配置struts-config.xml即可。

activemq.xml—配置异步装置,对应java下service包下的activemq中的类信息

dao.xml—数据访问对象配置,baseGenericDAO:泛型dao。下面的userDAO、categoryDAO、productDAO都继承于泛型dao,分别是三个实体的数据访问对象。

dwr.xml—ajax的实现方式,对应java下service包下的dwr中的类信息。
在页面使用时,需要配置dwr下的dwr.xml信息,同时在web.xml中通过servlet配置即可

mail.xml—邮件系统配置,对应java下service包下的mail中的类信息

service.xml—业务信息,有用户、商品类别、商品信息、批处理的业务逻辑。对应java下service包下类信息

base.xml—hibernate的配置
                   propertyConfigurer:属性配置,包含了hibernate.properties和mail.properties
                   dataSource:数据源
                   mySessionFactory:hibernate的SessionFactory
                   myTransactionManager:hibernate的事务管理
                   transactionAttributeSource:事务属性源
                   transactionInterceptor:事务拦截器
                   以及transactionAdvisor和BeanNameAutoProxyCreator,关于事务这块是用AOP技术实现的

beans.xml—集中处理所有相关的配置文件
                   在web.xml中配置contextConfigLocation为/WEB-INF/spring/beans.xml,在系统启动过程中即可加载所有spring的配置信息
其它相关配置信息的说明
htmlTemplate下的NodifyFindPwd.ftl:是邮件的模板内容,由freemarker技术来实现

log4j.properties:日志信息,分别写到了控制台和日志文件中去。
写到日志文件分析如下:
log4j.appender.fileout.File=${haose.root}/log/haose_log.txt
其中的${haose.root}是web.xml中的
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>haose.root</param-value>
</context-param>
是应用的上下文物理路径

还有一个技术点,就是在编辑商品信息的时候,点击图片会展示一个放大的图片内容,是使
用了图片特效,用js来实现,在scripts下的AJS_fx.js、AJS.js、gb_scripts.js、loader_frame.html
和css下的gb_styles.cs。这里你的应用名称还是用haose,如果修改了别的名字,
loader_frame.html里有一也是要同时修正的,在<img src="/haose/images/GreyBox/indicator.gif">
这句。

jsp的说明
从index.jsp转到jsp下的login.jsp(用到两个特效,和上面提到的图片特效是一起的。一个是新用户注册,还一个是忘记密码)
登录后进入default.jsp,它是一个frame结构
在jsp下的template中就是frame结构对应的jsp内容了,有header、footer、menu和body,而body部分是被其它内容经常替换的。
其它的如category下、product下、excel下,都是在body部分来一一体现的。

WebRoot下的excel,是批处理下载的excel文件存放的位置
WebRoot下的upload,是登记商品时,图片上传的位置


以上是所有相关的技术内容

关于流程内容,就按照主要功能模块进行,先新用户注册,然后通过邮件收取随机的密码,登录后,可以去修正密码。这个一个过程,同样,如果忘记密码,可以取回密码,也是通过邮件发送的,然后登录,可以去修正密码。
接下来,第一步商品类别的管理,首先得设置类别,然后才可以登记商品。这里建议,商品类别登记好后,不要随意去编辑维护它,其实它属于基础数据的一部分。重新设置商品的归类功能需要在登记商品后使用。
下一步是商品的管理,可以登记、然后维护
批处理其实是批量处理商品登记,和商品登记的效果是一样的,附件中已经给你样本了。
批处理的下载是把数据库中商品导到excel中去,和样本是一样的

然后就是系统功能了,修正密码,这在上面的用户注册、取回密码中都可以同时使用。

运行该系统时,前提的任务是以下几件:
1、  建立一个数据库,这里是以haose为例的,可以看hibernate.properties中的配置信息,匹配即可。(另:表不需要建,运行时自动创建)
2、  设置邮件,在mail.properties中配置,同时在Constants.java中常量SYSTEM_MAILBOX也需要和mail.properties中的mail.username对应

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics