时序图4-5显示了导师发布项目的时序流程,从导师对发布项目前端页面的操作到最后系统对发布项目的反馈一共有8个步骤:
1. 用户在页面DistributeProject.jsp上点击发布项目的按钮。
2. DistributeProject.jsp页面向后台发送发布项目信息的http request请求,并在request中包括发布项目所需要的参数,这里的请求采用了Struts的.do请求。
3. 通过Struts对.do请求的拦截,并分发到相应的TeacherAction中,在Action的相应发送中去调用TeacherService中的CreateProject()方法。
4. TeacherService主要负责控制系统的后台逻辑,在CreateProject ()中调用TeacherDao对数据库进行访问,去数据库中创建项目对象。
5. TeacherDao通过Hibernate的封装,采用面对对象的方式对数据库进行创建。
图4-5 导师发布项目时序图
6. 在数据库中创建成功之后,在TeacherDao中已经创建了新项目对象。 7. TeacherService通过TeacherDao获得已创建的项目对象之后进行相应的处理返回给TeacherAction。
32
8. TeacherAction将返回的数据进行对象封装之后通过forward返回http请求到页面进行显示,用户通过前端页面获得了新创建项目的信息。
4.3 登录模块详细设计
时序图4-6显示用户登录过程中的整个时序,一共进行了10个步骤:
图4-6 用户登录时序图
1. 在index.jsp页面中,用户输入用户名和密码。
2. Index.jsp页面向后台发送包括用户名和密码的http request的.do请求到LoginAction。
3. Struts通过对.do请求的拦截,在LoginAction调用LoginService.login()方法。
33
4. LoginService调用LoginDao访问数据库,验证用户名和密码是否正确。
5. LoginDao通过Hibernate访问数据库,查询指定用户名和密码的用户是否存在。
6. LoginDao通过用户名和密码成功获得该用户信息。
7. LoginDao通过该用户的id从数据库查询该用户id的导航列表。 8. LoginDao返回导航列表到LoginService对数据进行处理。 9. LoginService返回处理后的导航信息列表。
10. LoginAction通过http 请求返回导航信息生成到导航列表。
4.4 小结
本章在概要设计基础上,说明了系统的详细设计过程,重点说明了学生模块、导师模块和登陆模块的详细设计,同时给出了各个主要模块的时序图。
34
第5章 系统的具体实现
本章将介绍系统的具体实现,包括学生模块、导师模块和登陆模块的具体实现过程,具体介绍各个包的结构和具体功能。
5.1 学生模块的实现
系统实现的源程序根据不同的层次分在不同的包中,如图5-1所示。各个包的实现模块如下。
图5-1 学生模块包结构
其中,包com.vanceinfo.tutor.module.sm.dao用来完成学生模块的数据访问层接口;com.vanceinfo.tutor.module.sm.dao.impl用来完成学生模块的数据访问层实现;com.vanceinfo.tutor.module.sm.service用来完成学生模块的服务层的接口;com.vanceinfo.tutor.module.sm.service.impl用来完成学生模块的服务层的实现com.vanceinfo.tutor.module.sm.form用来完成学生模块的数据模型;com.vanceinfo.tutor.module.sm.action用来完成学生模块的action实现。
用来注册 Spring 代理类的名DelegatingActionProxy 类使用动作映射名称查找 Spring 环境中的动作代码段为代码段5-1。这就是使用ContextLoaderPlugIn 声明的环境。将一个 Struts 动作注册为一个 Spring bean,这样使得form的配置更加直观。
代码段5-1: struts-config-sm.xml
35
type=\ type=\ 在Struts配置完成之后,就可以在jsp页面中通过发送Http请求找到对应的方法执行,如代码段5-2所示,客户端发送了一个http链接请求,并指定调用的方法名DetailS,这样就可以通过Struts的配置文件区找到相应的DetailS方法查询到所有导师的信息。 代码段5-2: studenthome.jsp 在struts-config-sm.xml配置文件中,指定了/path元素,这样Struts在获得SMname.do请求以后,就会去主动寻找StudentAction这个类的detailS方法,如代码段5-3所示,在TmTeacherAction.java中根据method执行detailS方法。该方法调用了getSService的getDetailS方法,这里调用getSService用到了Spring的注入去实现。这样就从Action层到了service层中区执行。 代码段 5-3: StudentAction.java private GetSService getSService; public void setGetSService(GetSService getSService) { } 36 this.getSService = getSService;