版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要随着计算机的普及和计算机科学技术的飞速发展,人们开始越来越多地利用计算机解决实际问题。员工信息管理是企业信息管理的重要部分,面对大量的人事信息,采用人力处理即浪费时间、又浪费人力和物力,并且数据的准确性低。因此,开发一个界面友好,易于操作的人力资源管理软件进行自动化处理变得十分重要,这正是本系统开发的目的和意义。本文所阐述的人力资源管理系统,以浏览器/服务器模式高效地实现了人力资源管理系统的各项功能,可进行多条件查询、更新、密码设置、工资和奖金的统计发放等功能.提升了企业的效率和竞争力,满足了现代企业管理的需要.JSP继承了所有Java语言的特点,而且发展前景十分的广阔,因此本项目才用Jsp语言作为根本,选用经典的Struts作为开发架构,在数据持久层方面则使用了Hibernate.关键字:互联网,JSP目录TOC\o"1-4"\u摘要 I1序言 11.1项目背景 1项目目标与期望 11.2.1树立全新企业形象 11.2.2激发竞争力 11.2.3减轻部门负担 21.3项目设计原则 21.3.1实用性原则 21.3.2经济性原则 21.3.3扩充性原则 22系统分析 32.1需求分析 32.2技术可行性 32.2.1动态网站技术介绍 32.2.2程序语言的选择 32.2.3语言优势 62.2.4操作可行性 62.3环境可行性分析 72.3.1软件环境 72.3.2硬件环境 72.4系统结构可行性分析 72.4.1B/S模式简介 72.4.2B/S模式的优点 83系统设计 93.1总体设计 93.2数据库设计 93.2.1数据库的需求分析 93.2.2数据库表的具体设计 103.3详细设计 123.3.1功能设计 123.3.2具体设计 133.4开发架构 133.4.1软件开发架构的意义 133.4.2Struts架构简介 143.5数据持久层 173.5.1持久化数据 173.5.2持久化技术 184系统实现 204.1用户操作文件总体架构 204.1.1用户登录模块设计 204.1.2人员管理模块设计 264.2.1人力资源管理系统架构图 404.2.2奖惩文件架构图 414.2.3人员管理架构图 414.3.3薪金管理架构图 414.3.4招聘管理文件架构图 424.3技术难点 424.3.1中文乱码 424.3.2图片处理 424.3.3HQL语言 424.3.4安全性 435系统测试 445.1测试的定义及目的 445.2测试的原则 445.3测试的方法 445.3.1界面测试 445.3.2功能测试 455.3.3需求测试 465.3.4性能测试 465.4测试中其他要注意的地方 465.5人力资源管理系统的测试 47总结 48参考文献 491序言1.1项目背景现在网络的发展已呈现商业化、全民化、全球化的趋势。目前,几乎世界上所有的公司都在利用网络传递商业信息,进行商业活动,从宣传企业、发布广告、招聘雇员、传递商业文件乃至拓展市场、网上销售等,无所不能。如今网络已成为企业进行竞争的战略手段。企业经营的多元化拓展,企业规模的进一步扩大,对于企业的管理、业务扩展、企业品牌形象等提供了更高的要求。在以信息技术为支撑的新经济条件下,越来越多的企业利用起网络这个有效的工具。全球范围内的企业内部组织正在发生巨变,未来企业成功的关键的依靠企业人力资源,人才之争已经成为市场竞争中的核心内容之一,以人为本成为企业立足和发展的根本。有效力管理企业的人力资源,为企业提供强有力的储备力量,使之成为企业发展的主动力。通过人力资源的有效管理,掌握最新的、准确的企业人力资源信息,并对其进行复杂的统计与分析,从而充分发挥每个员工的潜能,为企业创造更大的价值。项目目标与期望树立全新企业形象对于任何一个企业而言,企业的品牌形象至关重要。特别是对于互联网技术高度发展的今天,通过人力资源管理的网站,员工可通过网站侧面的了解企业形象及企业实力,因此,建立具有国际水准的网站能够极大的提升企业在员工心中的整体形象。激发竞争力在登录后,员工能看到优秀的上榜员工,而如果这里没有他的名字,会极大的激发他的斗志,这也是本系统的作用之一。通过这种方式,使员工自动的全身心投入工作,这要比开动员大会效果明显得多,效率很高很多。减轻部门负担许多人知道,一个公司的所有和员工有关的运作,包括加薪,出差,请假,人员的调动,离任等等都由人力资源部门来完成,如果是一家拥有上千人的大型企业,这个工作量是相当惊人的。因此本系统的开发,大大缓解了该部门的工作压力,也避免了以前人工作业的错误几率。总结上述几点,长红机械网站建设目标可总结如下:1)帮助企业建立有效的企业形象宣传、企业风采展示、打造企业新形象。2)增加员工间竞争机制,鼓舞大家工作积极性,3)采取电脑管理人的方法,为企业节省人力,物力。1.3项目设计原则实用性原则充分考虑到在人力资源管理中可能遇到的种种问题,尽量全面的做好需求分析,以减少日后更新软件的次数。经济性原则建立适合企业自身需求的网络平台,提供广泛的涵盖用户多种需求的功能,数据处理方式灵活以满足需求,节省网站建设成本,并确保其较好的拓展性和开放性;同时网站具有基于WEB界面的管理后台,能够自主的对网站中大部分内容作更新、修改操作,节省了企业网站的运营成本,提高了信息更新、传播效率。1.3.3扩充性原则网站的整体规划及框架设计是具可扩充性的,前台页面的设计能保证网站在增加栏目后不会破坏网站的整体结构。后台数据库的设计具有高度的扩充性,能够根据需要对栏目、类别的增、删、修改。2系统分析2.1需求分析网络化的今天,网络人力资源管理系统,使新的人力资源协作管理模式成为可能。通过网络管理系统,专门的人力资源管理人员可以提高自身的工作效率,作好人力资源管理的协调工作,提高人力资源利用率;通过网络管理系统,员工可以直接管理自己的技能,有效地发现和挖掘自身的潜能,及时与自己的上级、下属、同事进行的沟通与交流,同心协作,积极为企业的发展与决策贡献力量。通过网络人力资源管理系统对企业人力资源进行管理,使企业人力资源管理适应时代的发展要求,大大提高了企业的核心竟争力。2.2技术可行性2.2.1动态网站技术介绍Internet起源于20世纪60年代的美国,它在近几年迅速风靡全球,其根本原因不仅在于她拥有卓越的国际通信功能,更在于它拥有巨大的信息资源.所谓的Internet是指由分布在全世界成千上万的计算机网络遵循一定的通讯协议,并相互联系在一起而形成的国际互连网络,也就是说,Internet是建立和使用这些网络的人群,群体,公司以及各种网络资源的集合体.随着网络技术的不断发展,单纯的静态页面已经不能满足发展的需要,因为静态页面是用单纯的HTML语言组成的,它没有交互性.因此,为了满足实际的需要,许多网页文件扩展名不再只是”htm”,”html”,出现了以”php”,”asp”,”jsp”,”shtml”等为后缀的网页文件,这些都是采用动态网页技术制作出来的.2.2.2程序语言的选择·CGICGI(CommonGatewayInterface,通用网关接口).首先,客户端(即Web浏览器)根据某资源的URL(UniformResourceLocator,统一资源定位器)向Web服务器提出请求,Web服务器的Daemon(守护进程)将此请求的参数通过标准输入stdin和环境变量传递给指定的CGI程序,并启动此应用程序进行处理,如要存取数据库服务器上数据库的数据,则向数据库服务器发出处理请求,数据库服务器将执行结果返回给CGI程序,CGI程序处理结果通过标准输出stdout返回给Daemon进程,再由Daemon进程返回给客户端,由浏览器解释执行,将最终结果在用户面前显示.CGI允许Web服务器运行外部应用程序,以通过外部程序来访问数据库等一些外部资源,并产生HTML文档给浏览器.但每次请求CGI程序都要重新启动程序,影响了响应的速度,且CGI程序不能被多个客户请求共享,影响了各种资源的使用效率.为了克服CGI的这些缺点,一些Web服务器厂商开发出了专用的API(ApplicationsProgramInterface应用程序接口),这样就允许程序员编写程序来扩展服务器的功能.API相对于CGI与Web服务器的结合更加紧密,占用的资源较少,运行的效率大有提高,安全性与保护性更好.但是开发API应用程序比开发CGI应用程序复杂得多,要求程序员掌握更多的计算机软件知识,且各种API之间的兼容性不好,业界没有一个统一的标准,使得API程序只能工作在专用的Web服务器与操作系统之上.编写CGI的程序设计语言有许多种,常用的有C,PERL,VisualC++等,由于对程序员的要求较高,且编写与调试比其它队编程技术困难,故近年来基于B/S的信息系统工程时间中已很少被采用.·ASPASP的程序比HTML更方便而更富有灵活性.是在Web服务器端运行,运行后再将运行结果以HTML格式传送至客户端的浏览器.因此ASP与一般的脚本语言相比要安全得多.ASP最大的好处就是可以包含HTML标签,也可以直接存取数据库及使用无限扩充的ActiveX控件,用户可以直接使用ActiveX控件,调用对象方法和属性,以简单的方式实现强大的交互功能.但ASP技术也并非完美无缺,由于它基本上是局限于微软的操作系统平台,主要的工作环境是微软的IIS应用程序结构,又因ActiveX对象具有平台特性,所以ASP技术要实现在跨平台Web服务器上工作,不是很容易.Microsoft的ASP技术目前已发展到.NET版.对很多人来说,用ASP来创建Windows服务器平台上的动态Web网页,整个站点和基于Web的应用程序已经成为及其自然的方法.在浏览器地址栏中,文件扩展名.asp同表示动态创建的网页的文件扩展名.pl或.cgi一样,已被浏览者所接受.开发ASP程序,常常先设计静态网页的栏目格式和排版形成HTML语言,接着在HTML的基础上添加脚本程序,形成ASP程序后再实现动态的Web网页.在ASP的程序开发中,它所用的脚本语言是JavaScript和VBScript,在默认情况下使用的是VBscript,它是VB程序设计语言的一个子集,语法与VB基本相同.ASP中的ADO对象用来执行与数据库相关的操作,ADO再以OLEDB或ODBC的方式访问数据库,在.NET版本中这一对象称为ADO.NET.·PHPPHP即HypertextPreprocessor(超文本预处理器),它是当今Internet上最为火热的脚本语言,其语法借鉴了C,Java,Perl等语言,而且只需要很少的编程知识就能使用PHP建立一个真正交互的Web站点.它与HTML语言具有非常好的兼容性,使用者可以直接在脚本代码中加入HTML标签或者在HTML标签中加入脚本代码从而更好地实现页面控制.PHP提供了标准的数据库接口,数据库连接方便,兼容性更强,扩展性强,可以进行面向对象编程.但是PHP对组件的支持不够,扩展性差,常用它与免费的数据库系统MySQL协同一起用来构建中小型网B/S应用大网站或信息系统.·JSPJSP(JavaServerPages)是由Sun公司倡导,许多别的公司参与一起创建的一种新动态网页技术标准,类似其他技术标准.在传统的网页HTML文件(*.htm,*.html)中加入Java程序片断(Scriptlet)和JSP标签,构成了JSP网页(*.jsp)Servlet/JSPContainer收到客户端发出的请求时,首先执行其中的程序片断,软后将执行结果以HTML格式响应给客户端,其中程序片断可以是:操作数据库,重新定向网页以及发送E-Mail等等,这些都是建立动态网站所需要的功能.所有程序操作都在服务器端运行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP称为Server-sideLanguage.所以被许多人认为是未来最有发展前途的动态网站技术之一.经过如上的程序语言的比较,PHP功能相对简单,不适合作大程序,而CGI效率相对较低,所以也不考虑,因为该系统并没有原有的基础平台需要扩展,也不需要与其他系统进行太多的交互,所以使用J2EE的模式并不能够体现出J2EE本身的优势,而JSP又是J2EE的核心技术之一,可以随时升级为J2EE程序,,这里暂时不考虑采用J2EE,这样只需要在ASP和JSP中进行选择.在进行了诸多因素的比较之后,最终认为目前这个阶段比较合适的是JSP,,而选择Struts架构作为开发的主体框架,选用Hibernate作为数据持续性处理层,则是考虑到了其高速的开发效率,及代码重用性高,易于维护等各种优势.其最终目的是希望提高系统底层业务逻辑的可重用性,增加系统的可扩展性,降低系统维护成本.2.2.3·将内容的生成和显示进行分离使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面.使用JSP标识或者小脚本来生成页面上的动态内容.生成的内容的逻辑被封装在标识和JavaBeans组件中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面而不影响内容的生成.·一次编写,到处运行作为Java平台的一部分,JSP拥有Java编程语言”一次编写,到处运行”的特点,随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,但并不影响当前的应用.·JSP的平台适应性更广这是JSP比ASP的优越之处,几乎所有的平台都支持Java,它们可以在任何平台下通行无阻.虽然NT的OS占据了很大的市场的份额,但在服务器方面UNIX的优势仍然很大.从一个平台移植到另一个平台,JSP和JavaBeans甚至不用重新编译,因为Java字节码都是标注的字节码与平台无关.·健壮的存储管理和安全性由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译为JavaServlet,JSP页面就具有Java技术的所有优点,包括健壮的存储管理和安全性·数据库连接技术很多的OS中都带有JDBC驱动程序,Java就通过JDBC与数据库连接,执行查询,提取数据等操作.Sun公司还提供了JDBC-ODBC的桥连方式,因此Java也可以访问带有ODBC驱动的数据库,目前大多数数据库系统都带有ODBC驱动,所以Java能访问诸如Oracle,Sybase,MSSQLServer和Access等类型的数据库.2.2.4操作可行性对于用户来说,本系统只要求使用者掌握一定的上网经验,经过仔细设计和测试之后的系统具有操作简单,方便灵活等优点,足可以满足各种用户的不同需求,同时也方便了公司的内部管理。管理人员及用户一定会在短时间内掌握并熟练使用。只要动一动鼠标键盘就可以达到想要的效果。2.3环境可行性分析2.3.1软件环境·操作系统:Win2kServersp4·数据库:MicrosoftSQLServer2000EnterpriseEditionsp4·Web服务器:TOMCAT·IDE;Eclipse+Myeclipse4.1.1GA+Lomboz+emf,Dreamweaver8·外部包:Struts.jarHibernate.jar2.3.2硬件环境AMDAthlon643000+,KingMaxPC3200512MB×2,GainwardNV35XTSeagateSATA8M120GB×22.4系统结构可行性分析2.4.1B/S模式简介本系统采用B/S模式。B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。2.4.2B/S模式的优点·维护和升级方式简单目前,软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性.对一个稍微大一点单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护.无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享.所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向.今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的.因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器.·成本降低,选择更多大家都知道windows在桌面电脑上几乎一统天下,浏览器成为了标准配置,但在服务器操作系统上windows并不是处于绝对的统治地位.现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高.所以服务器操作系统的选择是很多的,不管选用那种操作系统都可以让大部分人使用windows作为桌面操作系统电脑不受影响,这就使的最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行.比如说很多人每天上“网易”网,只要安装了浏览器就可以了,并不需要了解“网易”的服务器用的是什么操作系统,而事实上大部分网站确实没有使用windows操作系统,但用户的电脑本身安装的大部分是windows操作系统.3系统设计系统设计是在系统分析的基础上由抽象到具体的过程.主要目标是将系统分析阶段所提出的反映了信息需求的系统逻辑方案转换成可以实施的基于计算机与通信系统的物理(技术)方案,为下一阶段系统实施提供必要的技术资料,应符合系统性,灵活性,可靠性,经济性的要求.人力规划招聘信息管理企业人才库培训计划培训实施人力规划招聘信息管理企业人才库培训计划培训实施培训材料薪酬登记薪酬修改薪酬查询添加用户用户管理主管部门审批人事部门审批员工考勤登记员工考勤登记考勤分析报表考勤规划设置人事管理考勤管理招聘管理培训管理薪酬管理系统管理人力资源管理系统图3.1人力资源管理系统功能模块图本系统从前台页面到后台数据库设计完全由我个人设计完成3.2数据库设计数据库的需求分析依据项目的处理需求,对应数据表的设计及功能如下:·培训信息表:主要用于保存培训信息·奖惩表:主要用于保存奖惩信息·应聘信息表:主要用于保存应聘信息·薪金表:主要用于保存薪金信息·用户表:主要用于保存用户信息数据库表的具体设计:培训信息表字段名数据类型长度是否主键描述idint4是数据库流水号namevarchar100培训名称purposevarchar500培训目的begintimedatetime8开始培训时间endtimedatetime8结束培训时间datumvarchar2000培训人员teachervarchar50培训讲师studentvarchar50学生createtimedatetime8创建时间educatebit1培训级别effectvarchar500培训影响度summarizevarchar2000培训材料表3.2:奖惩表字段名数据类型长度是否主键描述Idint4是数据库流水号Namevarchar2000奖惩名称Reasonvarchar50奖惩原因explainvarchar50描述createtimedatetime8创建时间表3.3:应聘信息表字段名数据类型长度是否主键描述idint4是数据库流水号namevarchar50姓名sexbit1性别ageint4年龄jobvarchar50应聘职位specialtyvarchar50所学专业experiencevarchar50工作经验studyeffortvarchar50在校所学专业schoolvarchar50毕业学校telvarchar50emailvarchar50电子邮件createtimedatetime8创建时间contentntext16详细经历isstockbit1标识表3.4:薪金表字段名数据类型长度是否主键描述idint4是数据库流水号namevarchar50员工姓名basicfloat8基本薪资eatfloat8饭补housefloat8房补dutyfloat8全勤奖scotfloat8赋税punishmentfloat8额外补助otherfloat8罚款granttimedatetime8发放时间totalizefloat8总计表3.5:用户表字段名数据类型长度是否主键描述idint4是数据库流水号usernamevarchar50用户名称passwordvarchar50用户密码sexbit1用户性别birthdaydatetime8用户出生年月日createtimedatetime8用户创建的时间isadminbit1是否超级管理员contentvarchar2000管理员级别3.3详细设计功能设计本系统主要用于对企业中的“人”进行管理。具体地讲,人力资源管理系统就是通过人力资源规划、员工考核、薪酬管理、员工激励、人才培训和开发等一系列手段来提高劳动生产率,最终达到发展目标的一种管理行为。具体实现目标如下:实现对员工信息进行全面管理的功能。设置人力资源基础信息管理功能。设置员工考勤管理功能模块。员工薪酬信息管理。实现企业员工培训信息全程跟踪的功能。实现企业的招聘信息、应聘信息的管理功能。企业人才库管理功能。系统用户信息的管理。系统最大限度地实现了易安装性、易维护性和易操作性。系统运行稳定、安全可靠。3.3.2具体设计人力资源管理系统是针对中小企业对现有员工和新聘员工的一个WEB管理平台。主页功能模块主要包括以下功能模块:人员管理:主要包括浏览人员信息、添加人员信息、人员信息的添加、人员信息的修改。招聘管理:主要包括应聘人员信息的详细查看、删除、添加以及信息入库。培训管理:主要包括培训计划的详细信息、信息删除、添加培训计划和填写培训总结。奖惩管理:主要包括奖惩详细信息、删除详细信息、添加详细信息、修改详细信息。薪金管理:主要包括薪金的修改、添加、删除。3.4开发架构软件开发架构的意义对于已经习惯了使用传统的JSP设计方式实现动态网站的程序员,在刚开始接触Struts时经常会出现一种困惑:专业书籍和文章中总是使用StrutsFramework这种说法,Struts通常也被称为是一种Web应用开发的架构(Framework),那么到底什么是架构,软件开发架构的意义又是什么呢?如果将早期的软件开发方式比喻为传统手工业生产方式的话,那么基于软件开发架构的开发方式则是大型现代化工厂生产方式的体现.虽然二者都能够制作出产品,但是在生产效率及产品质量的保证上显然会有巨大的差异.汽车生产厂家在制造一辆汽车时,总是先在各条生产线上制作出不同类型的零件,最终再由专业的技师在专业的组装生产线上将成百上千的零件组装成一台完整的汽车,显然,设计者的主要精力并不是用于重复地制造相同的车轮,相同的方向盘,而是利用现成的车轮组装出一辆辆不同的汽车.同样,开发人员也可以利用软件架构中提供的组建库(如同已经生产好的规范化的汽车核心零部件库),按照既定的组装方式将不同的组建应用在软件产品的各个环节,最终开发出一个完整的,高质量的软件产品.实际上,如果需要,汽车设计者也可以将原有的车轮进行改造,例如涂上不同的颜色,贴上不同的装饰物等.同理,软件开发人员可以在现有组件的基础上进行扩展和改进,这实际上充分地实现了软件开发的可扩展性.组件复用是面向对象编程思想的结晶,而在软件架构的基础上进行开发可以最大限度地实现组件的复用.在大型,多层结构的软件开发项目中,开发和使用具有可重用性,可扩展性,经过良好测试的软件组织,可以使开发者从大量繁琐的代码工作中解脱出来,专注于软件设计和业务逻辑的实现.通常将被验证为有效的,相同类型问题的解决方案进行抽象,即可提取形成一个应用程序框架,即Framework.每一种Framework都有自己的一套明确的实现机制,通常在Framework结构中都会包含一个”命令和控制”组件(“commandandcontrol”component),类似于工业生产中的”控制中心”,开发人员通过它可以很容易地控制,扩充和实现该Framework上的开发结构.Struts架构简介随着Web开发技术的日益成熟,在Web开发开发领域中出现了许多设计好的软件开发框架,Struts就是一种基于MVC经典设计模式的框架,也是当前Web开发中比较成熟的一种框架..1经典的MVC模式MVC(Model-View-Controller)模式,即模型-视图-控制器模式,其核心思想是将整个程序代码分成相对独立而又能协同工作的3个组成部分.·模型(Model):业务逻辑层.实现具体的业务逻辑,状态管理的功能.·视图(View):表示层.即与用户实现交互的界面,通常实现数据输入和输出功能.·控制器(Controller):控制层.起到控制整个业务流程(FlowControl)的作用,实现View和Model部分的协同工作.MVC设计模式可以针对需要为同样的数据提供多个不同视图的应用程序,例如:公司产品数据库中同样的产品信息数据,但需要根据用户的不同需求在页面中显示其所需的不同产品信息.MVC设计模式中,事件一般是指客户端Web浏览器提交的各种不同请求,这些请求由控制器进行处理,控制器根据事件的类型来改变模型或各个视图,视图也可以接受模型发出的数据更新的通知,依据数据更新的结果调整视图效果,呈现在用户面前.而模型也可以通过视图所获得的用户提交的数据进行具体业务逻辑的处理.显然这样的运行机制可以起到分工明确,指责清晰,各尽所长的效果.而在软件开发的过程中,这样的开发方式无疑可以有效地区分不同的开发者,尽可能减少彼此之间的互相影响.充分发挥每个开发者的特长.这在开发大型复杂的Web项目时体现得尤为突出.模型模型视图1视图2控制器事件改变改变改变更新更新获得数据获得数据图MVC设计模式的结构.2Struts1.2开发框架作为基于MVC设计模式的Web应用的一种典型体现,Struts架构实际上是建立在Model2基础上的,对Model,View和Controller都提供了现成的实现组建..2.1Controller控制器部分Struts中的Controller控制器部分是通过专门的Servlet来实现的,该Servlet是一个StrutsAPI中提供的ActionServlet类型的实例,ActionServlet类继承了javax.servlet..Servlet类,因此该类的实例可以和普通的Servlet一样工作,其作用是接收客户端浏览器的请求,然后选择执行相应的业务逻辑,再把响应结果送回到客户端.”做什么”,相当于一个低层面的控制器,因此也可以将Action归纳为Controller的组成部分..2.2Model模型部分MVC系统中的Model模型部分从概念上可以分为两类:系统的内部状态和改变系统状态的动作.Struts中的Model部分一般由JavaBean以及EJB组成.在Struts架构中使用JavaBean来提供具体的业务逻辑,即”怎么做”可以代码的可重用性..2.3View视图部分Struts中的View视图部分依然可以采用JSP来实现.此外,Struts还提供了丰富的自定义标记库,View部分使用这些自定义标签同样可以实现与Model部分的有效交互并能够增强显示功能..3Struts开发环境安装在Tomcat安装完成后,即可将Struts框架工具安装到对应的WEBContainer中.可以通过Struts的二进制发布包安装Struts框架,具体操作步骤:下载二进制发布版将下载的Struts二进制发布包进行解包,将解包目录下的lib目录下的所有.jar文件全部复制到项目目录的WEB-INF/lib下,如果在多个项目中都用到了Struts,则将上述文件直接复制到Tomcat目录下的common/lib下.将对应的lib目录下的struts.jar文件添加到环境变量CLASSPATH中即可.以上资源可以从安装和相关配置的说明信息.3.5数据持久层数据是软件系统中不可缺少的环节,数据持久化的解决之道也一直是企业计算标准中最有影响力的部分.如今关系型数据库已经稳定地占据着主要的数据库市场,XML技术和XML数据库技术也日渐成熟.持久化数据数据是我们软件开发人员必须考虑的对象.无论你使用哪种技术,借助哪种工具,以及购买哪种软件平台产品,当接受一个实际的问题时,你都需要面对实际的数据,考虑实际数据的各种问题.在这些问题中往往都包含数据持久化的问题,这不仅是因为我们的计算机内存有限,更主要的原是业务逻辑的需要,作为一个接触软件技术,尝试写程序的人,我们要接触各种类型的数据.下面列举了三种常见的数据类型:.1随机数据这种数据指的是不确定结构,不了解数量,目前也搞不清关系的数据.它听起来很奇怪,但在实际的程序设计中十分常见.例如,从一个震动源传递到计算机采集卡的数据,再比如一个自然物生长过程中的数据.可能有些数据实际上是很有规律的,但是在设计程序时由于对它的了解很少,使它对于我们来说也成了随即的数据了.我没曾经在遇到这种搞不大清楚的数据时,使用很大的数组或者多个链表来表述,不管下一个数据的值是什么,先存储起来再说.有时候当遇到的数据总也摸不到规律,或者越来越多,内存也容纳不下时,就找个文件存放起来,后来发现其实存入文件的方式很不错,起码可以一直继续下去.也许这就是最佳的持久化策略了..2属性数据在接触具体的项目开发任务时,更多的时候要接触到属性类型的数据,这些数据来源于对象的属性,当然这些属性之间还存在关系,对于此类数据,似乎最好的持久化方法就是利用关系型数据库表了,在存入数据表的过程中还可以借助Hibernate来提高开发的效率,或者直接使用JDBC来传递SQL语句.这两种方法有些相似但还有细微的差别..3XML数据现在很多网络上的应用程序都使用XML类型的数据,或者说是一种树状的数据,如何将这两种数据持久化保存下来呢?一种方法是将XML数据拆分为属性数据,然后存储到关系型数据库中.另一种方式比较新,是将XML数据存储到XML数据库中,在XML数据库中存储这种数据时,数据的结构不变,XML数据在XML数据库中,在XML数据库中以文档对象形式保存,使用XPaht和XQuery查询语言来查询XML数据中的节点数据,或者多个XML文档中的多个节点数据.相对于属性数据而言,XML数据是很宽松的.首先,XML数据的结构没有被确定下来,起码没有被定死为某种僵化的结构.其次,对于XML数据的各个节点来说,数据的类型并没有被确定下来,在XML中如果不加特殊的约束(例如DTD或者Schema),XML文档中的数据和结构可以有十分大的变化空间,在XML中以字符串形式存在的数据,很难确定它的类型是int或是String.最后,XML是可以被转换处理的,利用XSLT可以将XML转换成希望的结果.因此可以说对XML数据的约束是比较宽松的,XML数据类型甚至可以用来模拟实现一些随即性质的数据.持久化技术一直以来,在Java开发领域中基于数据库应用的设计实现一直是面向关系的,也就是说与数据库相关的处理过程并没有实现真正的面向对象.如何在数据存取的操作中实现真正的面向对象,一直是开发人员探索的问题.正在使用中的对象序列化技术,EJB中EntityBean技术等,都是在这方面很好的探索.但是实体Bean设计实现过程中的繁琐和复杂,使得许多开发人员望而却步.而Hibernate的出现,提供了一个符合Java面向对象编程思想,易于使用的数据库持久化解决方案.因此,在目前行业的Java数据库应用项目中,有越来越多的开发人员开始尝试使用Hibernate在数据库外面包裹上一层面向对象的外衣,从而将开发人员从繁琐,重复,技术含量不高的数据库编程中结果出来..1Hibernate概述Hibernate在英文中的意思是”冬眠”,从这个角度也可以体会到Hibernate架构下提供的相关技术可以实现度十角状态的持久性保存.在传统的数据库编程中,开发人员要面对大量重复行代码的编写,以实现对不同数据表中的数据的获取,并将获取到的记录数据封装成对象,在处理完成之后,如果需要进行对象状态的存取,需要将对象中的数据拆卸成数据库记录中的对应字段的值,然后向数据库中进行存取.这种工作方式显然没有实现真正意义上的数据存取阶段的面向对象.虽然数据存取过程中的工作步骤是基本固定的,但是由于操作的数据表中字段列表数据的不同,使得开发人员必须要不厌其烦地书写与相应的实体类对应的封装处理过程.而在Hibernate中,类似这种重复性高,工作量大,但是又必须保证高质量完成的体力活,全部由Hibernate接管过去.这对广大的Java开发人员无疑是个非常好的消息.Hibernate本质上是一个面向Java开发环境的对象/关系数据库映射工具.在Hibernate之前,开发人员要将面向对象的软件和关系数据库结合在一起,往往会费长麻烦.而借助Hibernate对象/关系数据库映射技术,可以非常轻松地将以面向对象思想封装的对像的各个状态数据映射到基于SQL的关系模型数据结构中去.Java应用Java应用HibernateHQL语句数据库SQL语句XML映射文件图3.2Hibernate工作示意图4系统实现4.1用户操作文件总体架构用户操作模块主要包括用户登录和人员管理模块,具体功能如下:用户登录模块:用于登录系统。人员管理模块:用于浏览、添加和修改人员信息。4.用户登录模块设计用户登录模块是用户进入主页面的入口,其运行结果如图所示。图4.1用户登录模块运行结果系统登陆是人力资源管理中最先使用的功能,因为用户登陆在数据库中使用的是人员表,人员表中有一个isadmin字段,是来标识是否是管理员的。在登陆时要根据数据库的这个字段来判断此用户是否具有管理员的权限。在网页里添写用户名和密码后点击【登陆】按钮,网页会访问一个URL,这个URL是“logon.do?action=logon”,代码如下: <formname="usersForm"method="post"action="logon.do?action=logon"><tr><tdwidth="170"height="40"align="center">用户名:</td><tdwidth="230"height="40"><inputname="username"type="text"class="input"></td></tr><tr><tdheight="40"align="center">密 码:</td><tdheight="40"><inputname="password"type="password"class="input"></td></tr><tr><tdheight="40"colspan="2"align="center"><inputtype="submit"name="Submit"value="登陆"class="button"> <inputtype="reset"name="Submit2"value="重置"class="button"></td></tr> </form>在这个表单的name的值是usersForm,它是Struts的ActoinForm的实现类在配置文件中的名字,如下所示:rm.UsersForm"/>action是Struts的Action的URL,他们在Struts的配置文件中都是已经配好的,如下所示:<actionpath="/logon"type="com.bOS.bPRO_PersonManage.action.UsersAction"name="userForm"scope="request"><forwardname="success"path="/manage.jsp"/><forwardname="failed"path="/failed.jsp"/></action>在这个配置文件中,可以了解到如下信息:根据name="userForm"可以找到与之相对应的ActionForm的实现类“”。根据type="com.bOS.bPRO_PersonManage.action.UsersAction"可以找到处理用户数据的Action类。根据<forwardname="success"path="/manage.jsp"/>和<forwardname="failed"path="/failed.jsp"/>可以了解,这个Action返回success时,页面会被转到文件,这就是登陆成功的页面。如果当Action返回failed时,页面会被转到failed.jsp文件,这个文件是当用户登陆失败将要转到的页面。Struts的Action的实现类是这个登陆页的核心内容,就来看看它是怎么实现的吧,如下所示:e.action;importjavax.servlet..ServletRequest;importjavax.servlet..ServletResponse;importnet.sf.hibernate.HibernateException;importorg.apache.struts.action.Action;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importcom.bOS.bPRO_PersonManage.actionform.UsersForm;importcom.bOS.bPRO_PersonManage.en.Users;importcom.bOS.bPRO_PersonManage.service.UsersDao;publicclassUsersActionextendsAction{privateUsersDaodao=newUsersDao();publicActionForwardexecute(ActionMappingmapping,ActionFormform,ServletRequestrequest,ServletResponseresponse)throwsException{Stringaction=request.getParameter("action");//System.out.println("\nUsersAction*********************action="+action);if(action==null||"".equals(action)){returnmapping.findForward("error");}elseif("listuser".equals(action)){returnlistUser(mapping,form,request,response);}elseif("adduser".equals(action)){returnaddUsers(mapping,form,request,response);}elseif("logon".equals(action)){returnlogon(mapping,form,request,response);}elseif("updateuser".equals(action)){returnupdateUser(mapping,form,request,response);}elseif("deleteuser".equals(action)){returndeleteUser(mapping,form,request,response);}elseif("selectuser".equals(action)){returnselectUser(mapping,form,request,response);}returnmapping.findForward("error");}privateActionForwardselectUser(ActionMappingmapping,ActionFormform,ServletRequestrequest,ServletResponseresponse)throwsHibernateException{Longid=newLong(request.getParameter("id"));Usersu=dao.loadUsers(id.longValue());request.setAttribute("user",u);returnmapping.findForward("success");}privateActionForwarddeleteUser(ActionMappingmapping,ActionFormform,ServletRequestrequest,ServletResponseresponse)throwsHibernateException{Longid=newLong(request.getParameter("id"));Usersusers=newUsers();users.setId(id);dao.deleteUsers(users);returnmapping.findForward("success");}privateActionForwardupdateUser(ActionMappingmapping,ActionFormform,ServletRequestrequest,ServletResponseresponse)throwsHibernateException{UsersFormusersform=(UsersForm)form;Usersusers=usersform.populate();dao.updateUsers(users);returnmapping.findForward("success");}privateActionForwardlogon(ActionMappingmapping,ActionFormform,ServletRequestrequest,ServletResponseresponse)throwsHibernateException{UsersFormusersform=(UsersForm)form;Usersusers=newUsers();users.setUsername(usersform.getUsername());users.setPassword(usersform.getPassword());booleanflag=dao.logonUsers(users);if(flag){request.getSession().setAttribute("users",users);returnmapping.findForward("success");}else{returnmapping.findForward("failed");}}privateActionForwardaddUsers(ActionMappingmapping,ActionFormform,ServletRequestrequest,ServletResponseresponse)throwsHibernateException{UsersFormusersform=(UsersForm)form;Usersusers=usersform.populate();dao.addUsers(users);returnmapping.findForward("success");}privateActionForwardlistUser(ActionMappingmapping,ActionFormform,ServletRequestrequest,ServletResponseresponse)throwsHibernateException{request.setAttribute("list",dao.listUser());returnmapping.findForward("success");}Struts的Action实现类的execute()方法是最先被执行的,这个方法本身也没有具体的事务,而是根据action的参数不同执行相应的方法。在登陆页里面可以找到有一个“action=logon”的字样,它的目的就是在这里做逻辑判断。当action=logon时调用logon()方法。logon()方法从UsersForm中得到用户提交的数据,然后在调用UsersDao()的logonUsers()方法。并且把UsersForm转成Users类做为logonUsers()方法的参数。调用后会返回一个boolean型的值。如果为真,则返回“mapping.findForward("success");”否则返回“mapping.findForward("failed");”也就是当用户登陆成功后,返回给用户登陆成功的页面,登陆失败后返回用户一个登陆失败的页面。那么UsersDao的logonUsers()方法是根据什么得到的返回值呢,现在就让我们看看这个方法,如下所示:publicbooleanlogonUsers(Usersusers)throwsHibernateException{Sessionsession=HibSessionFactory.currentSession();Transactiontx=session.beginTransaction();Queryquery=session.createQuery("selectcount(*)fromUsersasuwhereu.username=:nameandu.password=:passwordandu.isadmin=:isadmin");query.setString("name",users.getUsername());query.setString("password",users.getPassword());query.setByte("isadmin",newByte("1").byteValue());Listlist=null;list=query.list();txmit();HibSessionFactory.closeSession();if(list!=null){Iteratorit=list.iterator();if(it.hasNext()){if(((Integer)it.next()).intValue()==1){returntrue;}}}returnfalse;}这个方法先通过HibSessionFactory得到一个Hibernate的Session并且开始一个事务,Session再像使用一个欲编译似的命令似的东西,设定参数、提交事务和最后在关闭Session.。得到一个List里面就存储着所有查询出的结果。根据这个结果就可以判断出该用户是否有登陆的权根了,在返回true或者false。就这样合法的用户就可以顺利的登陆了。那刚才那些有些类似于欲编译的东西是什么呢,这些就是Hibernate特有的查询语言,被称为Hibernate查询语言(HQL),而它本身也就是使用的JDBC的欲编译技术。4.人员管理模块设计人员管理模块主要包括浏览人员信息、添加人员信息、人员信息的添加、人员信息的修改。此模块文件架构如图4所示。各项管理工作都是在用户成功登陆后的管理页面进行的,在管理控制页面的左侧是各项的相关链接,右侧是操作平台。管理控制页面右侧实际上是一个iframe,如下所示:<tdheight="550"valign="top"><iframename="frame"src="main.do"width="100%"height="100%"frameborder="0"hspace="0"></iframe></td>在左侧的链接中使用target="frame"就可以在这个iframe中打开新的链接了。单击“添加人员信息”,即打开添加人员信息的页面如图所示。图4.2添加人员信息页面添加人员信息的链接是这样的,如下所示:<tdheight="22"align="center"><ahref="adduser.do"target="frame">添加人员信息</a></td>在Struts配置文件中,添加人员信息的链接没有使用ActionForm类,也没有使用Action的实现类,如下所示:<actionpath="/adduser"forward="/adduser.jsp"/>adduser.jsp文件,只是一个普通的JSP文件,但是它的表单元素都是与UsersForm相对应的,UsersForm如下所示:packagecom.bOS.bPRO_PersonManage.actionform;importcom.bOS.bUtil.DateUtil;importjavax.servlet..ServletRequest;importorg.apache.struts.action.ActionErrors;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionMapping;importcom.bOS.bPRO_PersonManage.en.Users;publicclassUsersFormextendsActionForm{publicStringgetContent(){returncontent;}publicvoidsetContent(Stringcontent){this.content=content;}privateLongid;privateStringusername;privateStringpassword;privateBytesex;privateStringbirthday;privateStringcreatetime;privateByteisadmin;privateStringcontent;publicStringgetCreatetime(){returncreatetime;}publicvoidsetCreatetime(Stringcreatetime){this.createtime=createtime;}publicLonggetId(){returnid;}publicvoidsetId(Longid){this.id=id;}publicBytegetIsadmin(){returnisadmin;}publicvoidsetIsadmin(Byteisadmin){this.isadmin=isadmin;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicvoidreset(ActionMappingarg0,ServletRequestarg1){this.id=null;this.username=null;this.password=null;this.isadmin=null;this.createtime=null;this.content=null;this.sex=null;this.birthday=null;}publicActionErrorsvalidate(ActionMappingarg0,ServletRequestarg1){returnnull;}publicStringtoString(){StringBuffertoStr=newStringBuffer();toStr.append("[UsersForm]=[\n");toStr.append("id="+this.id+";\n");toStr.append("username="+this.username+";\n");toStr.append("password="+this.password+";\n");toStr.append("sex="+this.sex+";\n");toStr.append("birthday="+this.birthday+";\n");toStr.append("createtime="+this.createtime+";\n");toStr.append("isadmin="+this.isadmin+";\n");toStr.append("content="+this.content+";\n");toStr.append("];\n");returntoStr.toString();}publicStringgetBirthday(){returnbirthday;}publicvoidsetBirthday(Stringbirthday){this.birthday=birthday;}publicBytegetSex(){returnsex;}publicvoidsetSex(Bytesex){this.sex=sex;}publicUserspopulate(){Usersu=newUsers();u.setId(getId());u.setIsadmin(getIsadmin());u.setContent(getConten
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度智能化打桩机械租赁服务规范协议4篇
- 2025年度特色菜品研发厨房厨师长聘用合同4篇
- 2024物流运输合同参考模板
- 2024版债权转股权协议书
- 中国猪的饲养市场前景及投资研究报告
- 2025年度二手房交易担保合同模板4篇
- 2025年度个人股权投资基金设立与运营协议4篇
- 2025年洗车店租赁及售后服务保障合同3篇
- 2025年度高端制造行业个人技术工人派遣合同2篇
- 2025年度个人房产买卖合同税收筹划协议3篇
- 肺动脉高压的护理查房课件
- 2025届北京巿通州区英语高三上期末综合测试试题含解析
- 公婆赠予儿媳妇的房产协议书(2篇)
- 煤炭行业智能化煤炭筛分与洗选方案
- 2024年机修钳工(初级)考试题库附答案
- Unit 5 同步练习人教版2024七年级英语上册
- 矽尘对神经系统的影响研究
- 分润模式合同模板
- 海南省汽车租赁合同
- 2024年长春医学高等专科学校单招职业适应性测试题库必考题
- (正式版)SHT 3046-2024 石油化工立式圆筒形钢制焊接储罐设计规范
评论
0/150
提交评论