中间件实验5分析和总结.docx
五SSH一、实验内容本程序是一个J2EE的框架程序。该程序是一个员工管理系统。通过人力资源管理系统可使管理者快速高效地完成企业日常事务中的人事工作,降低人 力资源管理的成本,使管理者能集中精力实现企业战略目标。人力资源管理系统的具体目标如 下: 对企业人力资源管理的基本信息进行管理。 管理企业的员工信息(即人事管理功能)。 实现为个人提供网络工作平台的功能。 实现企业的应聘信息的管理功能。 实现企业员工培训的一系列相关信息的管理。 员工薪酬信息管理。 系统用户信息的管理。 系统运行稳定、安全可靠。二、实验目的>加深对讲授内容的理解,了 SSH框架的基本开发原理;>练习上机调试程序,加强发现及解决问题的能力。三、实验环境> Windows 7> MyEclipse 6.5> Tomcat 5.5> MySQL 5.0四、实验设计本系统采用流行的Struts+Spring+Hibernate组合框架:Struts专注于表现层结构,使用典 型的MVC结构;Hibernate处于该架构的持久化层,用于管理系统与数据库打交道的所有过 程,实现最基本的数据库操作,以及完成数据持久化任务;而Spring处于中间层,利用其 优秀的反转控制(loC)和事物管理特性,实现表现层、业务层和持久化层三者之间的松散 耦合,并负责完成和实现系统所有事务。系统架构如下图所示:上图各层的功能如下:表现层(Struts):提供与用户交互的程序界面,使用ActionForm获取用户输入数据, 在Action中调用相应的业务处理方法完成业务处理,最后再根据业务方法的返回结果,使 用不同的页面显示处理结果。该层不关心业务处理的过程,不与数据库直接打交道,只是为业 务方法提供必要的数据输入。此外,为了加强系统的靠性,该层应该负责表现数据库的校验,例如输入的用户名 是否合法、密码是否超过长度等等。从而为业务层提供比较合理的数据。业务层(Spring):完成复杂事物逻辑处理和业务校检,提供完善的事务管理功能。该 层隔离了表现层和持久化层,降低了系统的耦合性,使二者只需关注本层任务。此外,本系统中的Spring还负责管理数据源(DataSource),为Hibernate数据库操作提 供连接。使用反转控制特性,将DAO和业务方法注册,使得系统运行时Action只需调用业 务逻帽接口(Service接口),而业务方法只需要调用各持久化对象的DAO接口。持久化层(Hibernate):实现0/R映射,利用HQL完成基本的数据库操作,包括添加、 删除和修改。在完成需求分析、功能设计和架构设计后,开发的第一个步骤就是完成数据库的设计, 以及建立数据库服务器。根据前面的功能分析,可以抽象出本系统的数据库实体对象五、关键代码分析及运行结果DROP database IF exists hrSystem;CREATE database hrSystem;use hrSystem;CREATE TABLEtype_table( type Jd integer autojncrement, type_name varchar(50) not null, amerce_amount double not null, primary key(typejd);CREATE TABLEmgr_table( mgr Jd integer autojncrement, dept_name varchar(50) not null, primary key(mgr_id);CREATE TABLEemp_table( em p_id integer autojncrement, emp_name varchar(50) not null, emp_pass varchar(50) not null, emp_salary double not null, mgr_id integer, primary key(empjd), unique key(emp_name)zforeign key(mgr_id) references mgr_table(mgr_id) );CREATE TABLEattend_table( attendjd integer auto_incrementz duty_day varchar(50) not null,punch_time datetime,is_come boolean not null,type_id integer not null,emp_id integer not null, primary key(attendjd), foreign key(type_id) references type_table(type_id), foreign key(emp_id) references emp_table(emp_id);CREATE TABLEapp_table( appjd integerautojncrement, attendjdinteger not null, app_reasonvarchar(255), app_resultboolean,type_id integer not null,primary key(appjd),foreign key(type_id) references type_table(type_id)z foreign keyfattendJd) references attend_table(attendJd) );CREATE TABLEpay_table( pay_ id integer autojncrement, pay_month varchar(50) not null, pay_amount double not null, emp_id integer not null, primary key(pay_id),foreign key(empjd) references emp_table(emp_id) );CREATE TABLEcheck_table( check_id integer autojncrement,appjd integer not null,check_result boolean not null, check_reason varchar(255)zmgr_id integer not null,primary key(checkjd),foreign key(app_id) references app_table(app_id),foreign key(mgrjd) references mgr_table(mgr_id);INSERT INTO type_table (type_name, amerce_amount)VALUES ('正常,0);INSERT INTO type_table (type_name, amerce_amount)VALUES ('事假20);INSERT INTO type_table (type_name, amerce_amount)VALUES ('病假10);INSERT INTO type_table (type_name, amerce_amount)VALUES ('迟到10);INSERT INTO type_table (type_name , amerce_amount)VALUES (,早退',-10);INSERT INTO type_table (type_name, amerce_amount)VALUES (旷工 30);INSERT INTO type_table (type_name, amerce_amount)VALUES ('出差',10);#插入经理INSERT INTO mgr_table ( dept_name)VALUES ('DB 部');INSERT INTO mgr_table ( dept_name)VALUES (Server 部力#插入员工INSERT INTO emp_table ( emp_name , emp_pass, emp_salary, mgrjd)VALUES ('oracle; 'oracle', 5000, null);INSERT INTO emp_table ( emp_name , emp_pass, emp_salary, mgrjd)VALUES ('weblogic', 'weblogic', 6000 , null);INSERT INTO emp_table ( emp_name , emp_pass, emp_salary, mgrjd)VALUES ('mysql', 'mysql', 3000,1);INSERT INTO emp_table ( emp_name , emp_pass, emp_salary, mgrjd)VALUES ('hsql'/hsql', 3200,1);INSERT INTO emp_table ( emp_name , emp_pass, emp_salary, mgrjd)VALUES ('tomcat; 'tomcat' z 2800,2);INSERT INTO emp_table ( emp_name , emp_pass, emp_salary, mgrjd)VALUES ( 'jetty', 'jetty' # 2560,2);以 db_department 表为例,创建与其对应的持久化 对象类,命名为DepartmentForm.java。db_department持久化类的源代码如下:这个当中是 没有直接用,而是在动作中体现(form)DepartmentForm.java package com.wy.form;import org.apache.struts.action.ActionForm;public class DepartmentForm extends ActionFormprivate String id=""private String dt_name=""private String dt_createTime=""private String dt_bz="无"; public String getDt_bz() return dt_bz;)public void setDt_bz(String dt_bz)this.dt_bz = dt_bz;)public String getDt_createTime()return dt_createTime;)public void setDt_createTime(String dt_createTime)this.dt_createTime = dt_createTime;)public String getDt_name()return dt_name;public void setDt_name(String dt_name)this.dt_name = dt_name;)public String getld()return id;)public void setld(String id)this.id = id;)六、实验总结与感想通过本次实验,让我熟悉了 Java Web开发中的一个新的技术一SSH框架的 应用。在实验中,我接触的较多的是spring技术,所以在实验中我对spring有了 更进一步的了解,增强了运用理论知识去解决实际问题的能力。Spring是一个轻量级的控制反转和面向切面的容器框架,使用基本的 JavaBean来完成以前只可能由EJB完成的事情。通过使用spring让我明白了原来 上学期学的EJB是很复杂的,将对象之间的依赖关系交由Spring进行控制从而使 开发者更关注于上层的应用。Spring包含并管理应用对象的配置和生命周期,它 是一种容器,你可以配置你的每个bean如何被创建,你的bean是创建一个单独 的实例还是每次需要时都生成一个新的实例以及它们如何相互关联等。