struts2 实验报告.docx_第1页
struts2 实验报告.docx_第2页
struts2 实验报告.docx_第3页
struts2 实验报告.docx_第4页
struts2 实验报告.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东北大学软件学院 实践考核类课程(四)实验报告1. 系统分析与设计1.1 系统功能描述本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate三个框架,系统功能单一,业务逻辑简单。当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。1.2 系统功能流程Regist.actionRegist.jsp处理用户注册的流程图 提交注册请求 输入校验失败(input result) 登录 成功success.jsp 注册失败(failure result) login.actionlogin.jsp 提交登录请求 输入校验失败(input result) 登录 成功success.jsp 登录失败(failure result) 1.3 数据库设计相关的映射文件:将User映射到user_table数据表使用ID元素来映射标识属性并指定主键生成器策略 一旦提供了上面的映射文件,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方法public String execute() throws Exception取出Action在执行时需要用到的对象Map session = ActionContext.getContext().getSession(); String ver2 = (String )session.get(rand);获取随机验证码session.put(rand , null); if (vercode.equals(ver2) if (mgr.addUser(user, pass , email) 0)return SUCCESS;调用业务逻辑层的添加用户的方法elseaddActionError(注册失败,请重试!);return failure; elseaddActionError(验证码不匹配,请重新输入); return failure;业务逻辑层:public int addUser(String user , String pass , String email) throws ExceptiontryUser u = new User();u.setUser(user);调用DAO层的save方法,将用户存储到数据库中u.setPass(pass);u.setEmail(email);userDao.save(u);return u.getId();catch (Exception e)e.printStackTrace();throw new Exception(新增用户时出现异常);public void save(User user) getHibernateTemplate().save(user); SessionFactory是Hibernate的持久化操作的基础对象,是整个数据库经过编辑后的内存镜像,通常对应一个底层数据库。进行Hibernate的持久化操作前,必须先完成SessionFactory的初始化。本系统通过Spring容器管理SessionFactory,从而允许开发人员无需手动管理Hibernate的SessionFactory。代码如下: Hibernate的映射文件 User.hbm.xml 因使用MySQL数据库,故使用MySQL方言 org.hibernate.dialect.MySQLDialect true update 20 DAO组件是基于Hibernate的持久化操作的,因此必须获得SessionFactory的引用才可以进行持久化操作。由于系统的DAO组件将由Spring容器来管理,而且系统的SessionFactory也是由Spring的容器来管理,因此DAO组件无需显示去的SessionFactory的引用,而是接受Spring容器注入即可。配置如下:配置业务逻辑组件所依赖的DAO组件。代码如下: 在Spring容器中配置了业务逻辑组件后,还必须为业务逻辑方法增加事物控制。因为用户的业务逻辑方法对应用户的一次业务请求,通常而言,用户的每次业务请求都是逻辑不可分的,一次应该为该方法增加事物控制。本系统采用Spring的BeanNameAutoProxyCreator后处理器完成。代码如下: 为业务逻辑组件注入SessionFactory引用配置事物拦截器Bean 为事物拦截器Bean依赖注入一个事务管理器 PROPAGATION_REQUIRED,readOnly PROPAGATION_REQUIRED定义事物传播属性 定义BeanNameAutoProxyCreator后处理器 mgr 定义BeanNameAutoProxyCreator所需的事物拦截器 transactionInterceptor 由于Struts2的Action也是由Spring容器负责管理,因此,必须保证Spring容器在Web应用初始化时立即创建。代码如下:初始化Spring容器的listener org.springframework.web.context.ContextLoaderListener使用Ajax验证用户名:一旦用户完成了用户名得输入,系统可以提示该用户名是否可用,而不是等到用户提交注册请求是才判断该用户名是否可用。为了让注册页面在输入注册用户名以后立即发送验证请求,可以在用户名输入框上添加onblur属性,该属性指定了一个javascript函数,该函数会在该输入框失去焦点时触发。代码如下:本系统还提供了一个Emial格式的校验规则,当输入无效的Email格式时,系统给出相应的提示。代码如下:您输入的电子邮件必须是一个合格的邮件地址!本系统还提供的对用户名、密码等的校验当输入的用户名不符合规则是给出相应的提示。以用户名为例,代码如下:验证字符串不能为空用户名必填!指定user属性必须满足正则表达式 您输入的用户名只能是字母和数组,且长度必须在4到25之间2.4 运行结果注册界面:注册成功界面:当输入的用户名不符合要求时:当用户名已存在时:Email格式不正确:3分析与总结本系统基于Struts2、Spring和Hibernate构建,保持良好的Java EE分层思想,充分利用了Struts2框架的MVC实现,让Struts2框架负责与用户请求交互,通过调用业务逻辑方法来处理用户请求。本系统利用了Struts 2的Spring插件来整合Spring框架,从而允许Struts 2 Action调用Spring容器中的业务逻辑组件,也利用了Struts 2的JSON插件来王城Ajax交互。下面是我在本次实验中学到的一些Struts2、Spring和Hibernate的相关知识:Struts 2:Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开Spring:一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 轻量:从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 控制反转:Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 面向切面:Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。应用对象只实现它们应该做的完成业务逻辑仅此而已。它们并不负责其它的系统级关注点。 容器:Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 框架:Spring可以将简单的组件配置、组合成为复杂的应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论