1. 系统分析与设计 1.1 系统功能描述本系统是个非常简单的注册、登录系统。
本系统的实现是基于struts2、spring、hibernate三个框架,系统功能单一,业务逻辑简单。
当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。
当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。
系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。
系统还提供了一种ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。
故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。
当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。
除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。
1.2 系统功能流程1.3 数据库设计相关的映射文件:<hibernate-mappingpackage= <classname=user table=user_table> <id name=idcolumn=user_id> <generatorclass=identity</id> nique=true/><propertyname==user_passnot-null=true length=50/> <propertyname=emaillength=100/> </class> <propertyname=usercolumn=</hibernate-mapping>一旦提供了上面的映射文件,hibernate就可以理解user和user_table之间的对应关系。
2.系统实现与测试 2.1 系统采用的关键技术mvc框架采用了struts2框架,struts2框架的易用性,极好的简化了系统的mvc层的实现;本系统使用了struts2的json插件来完成ajax功能,除此之外本系统为了避免进行底层的ajax交互,还是用了一个简单prototype.js函数库,用以简化ajax编程。
struts2框架的稳定性,为系统的稳定运行提供了保证。
spring容器作为系统的ioc容器,将系统中所有组件都放在spring容器中进行管理,并且充分利用了spring ioc容器的功能,采用依赖注入来管理系统中各组件的依赖关系,避免了各组件之间的硬编码耦合,提高了系统的可扩展性。
借助hibernate orm框架实现系统的持久化,通过hibernate的框架帮助,允许上层程序采用面向对象的方式编程,二hibernate负责把面向对象的持久化操作转换成jdbc操作,但hibernate的底层操作对开发者完全透明,从而让用户从具体的jdbc访问中释放出来,无需理会底层的jdbc数据库访问,而是以面向对象的方式进行持久化操作。
2.2 关键程序流程以注册为例说明:加载类(filterdispatcher)读取配置(struts配置文件中的regist.action) ? 派发请求(客户端发送请求)调用action(filterdispatcher从struts配置文件中读取与之相对应的action ) ?启用拦截器(webwork拦截器链自动对请求应用通用功能) ? 处理业务(回调registaction的execute()方法)返回响应(通过execute方法将信息返回到filterdispatcher)查找响应(filterdispatcher根据配置查找响应的是什么信息如:success、erroer,将跳转到哪个jsp页面) ? 响应用户(jsp--->客户浏览器端显示)2.3 关键代码分析regist.action的execute方法publicstring execute() throws exception{ map session = actioncontext. ().getsession(); session.put(rand , null); string ver2 = (string )session.get(rand); if (mgr }returnreturn}else{if (vercode.equals(ver2)) { } else{ addactionerror(验证码不匹配,请重新输入); }returnfailure; } 业务逻辑层:publicint adduser(string user , string pass , string email) }publicvoidsave(user user){ gethibernatetemplate().save(user); } throws exception{ try{ user u = new user(); u.setuser(user); userdao returne.printstacktrace(); } catch thrownew exception(新增用户时出现异常); } sessionfactory是hibernate的持久化操作的基础对象,是整个数据库经过编辑后的内存镜像,通常对应一个底层数据库。
进行hibernate的持久化操作前,必须先完成sessionfactory的初始化。
本系统通过spring容器管理sessionfactory,从而允许开发人员无需手动管理hibernate的sessionfactory。
代码如下:<beanid=sessionfactoryclass=org.springframework.orm.hibernate3.localsessionfactorybean><propertyname=datasourceref=datasource/><propertyname=mappingresources> <list> <value>user.hbm.xml</value></list> </property> <propertyname=hibernateproperties> <props> > <propkey=show_sql>true</prop><propkey=hibernate.hbm2ddl.auto>update</prop> <propkey=hibernate.dialect> <propkey=hibernate.jdbc.batch_size>20</prop> </props></property> </bean> dao组件是基于hibernate的持久化操作的,因此必须获得sessionfactory的引用才可以进行持久化操作。
由于系统的dao组件将由spring容器来管理,而且系统的sessionfactory也是由spring的容器来管理,因此dao组件无需显示去的sessionfactory的引用,而是接受spring容器注入即可。
配置如下:<beanid=userdaoclass=org.reg_erdaohibernate > <propertyname=sessionfactoryref=sessionfactory/> </bean>配置业务逻辑组件所依赖的dao组件。
代码如下:<beanid=mgrclass=org.reg_ermanagerimpl><propertyname=userdaoref=userdao/> </bean>在spring容器中配置了业务逻辑组件后,还必须为业务逻辑方法增加事物控制。
因为用户的业务逻辑方法对应用户的一次业务请求,通常而言,用户的每次业务请求都是逻辑不可分的,一次应该为该方法增加事物控制。
本系统采用spring的beannameautoproxycreator后处理器完成。
代码如下:<beanid=transactionmanagerclass=org.springframework.orm.hibernate3.hibernatet ransactionmanager><propertyname=sessionfactoryref=sessionfactory/> </bean> <beanid=transactioninterceptorclass=org.springframework.transactio n.interceptor.transactioninterceptor> name=transactionmanagerref=<propertyname= <props> <propkey=get*>propagation_required,readonly</prop><propkey=*>propagation_required</prop> </props></property></bean><beanclass=org.springframework.aop.framework.autoproxy.beannameautoproxycreator>篇二:struts2 实验报告_01 篇三:struts2 实验报告实验报告实验课程:struts2框架应用开发院系(部):应用统计与理学系专业班级:数学与应用数学1301学号:1309401012姓名:田从从成绩:实验日期:一、实验名称:struts2开发环境的搭建二、实验目的:1、下载struts2框架;2、搭建struts2开发环境三、实验内容:1、下载最新版本的struts2;2、为web应用搭建struts2开发环境四、实验步骤:2、下载myeclipse,安装并配置在window下选择preferences,在java下选择installedjres,在它的右方选择add…,把jdk的路径添加进去,按finish完成。