




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
药品销售与系统功能的实现毕业论文目录摘要IAbstractII1 引言11.1 系统开发的背景11.2 系统开发的意义21.3 系统开发的目标22. 需求分析32.1 用户需求32.2 功能需求32.3 系统结构42.4 可行性分析53 总体设计73.1 功能模块设计73.2 数据库设计83.3 功能流程图93.3.1 用户登录103.3.2 药品管理113.3.3 库存管理113.3.4 出库单管理123.3.5 入库单管理123.4 页面结构设计134 详细设计144.1 登陆界面设计144.2 药品销售(购买)功能设计154.3 药品销售(管理)功能设计174.4 系统管理功能设计184.5 系统架构204.5.1 MVC简介204.5.2 Struts2简介214.5.3 Struts2与Struts1对比224.5.4 Struts2与WebWork对比224.5.5 业务控制器Action244.6 持久层Hibernate实现244.6.1 创建并配置Hibernate映射文件244.7 控制层Struts实现254.8 web.xml的配置255 系统测试275.1 软件测试的环境275.1.1 开发测试环境Eclipse275.2 软件测试的目的296 总结35致 谢36参考文献37附录38III中原工学院信息商务学院毕业设计(论文)1 引言随着我国经济社会的发展,人民生活水平显著提高,在物质生活显著提高的情况下,人们对自己的健康更加关注。医疗卫生行业与人民的生活息息相关,因此有必要顺应时代发展的要求,引入计算机技术。信息技术在医学领域的广泛应用,带来了很多的好处。信息化的医院也更符合社会的需要,医药信息系统在各级医院的普及则是其体现,而医院药品的管理更是其中十分重要的一个环节。药品与患者联系密切,而且药品在医院内部流动,涉及到药品库房、调剂部门、病房等多个环节。要实现管理目标需要在流动的各个环节设置相应的功能模块,实现对药品流动全过程的管理。在医药行业中,医药经营企业的物流管理以及相应的财务处理、信息处理,长期以来一直采用手工操作,但随着产业结构调整、全新的市场竞争环境,企业管理和运营效率已经成为企业成败的关键所在,手工方式的弊端毕现无遗。这就要求医药管理摆脱过去人手操作的烦琐,充分满足了医药经营企业的各种需求,从医药经营企业的各个环节对人流、物流、资金流、信息流进行统一系统的管理。市场的需求和技术的支持,最终会导致越来越多的优秀医药管理软件的出现,并在竞争中得到不断的完善和优化。本系统是一套药品进销存管理系统。本系统是针对药品销售的区域代理商设计、开发的一套管理系统。该系统按照药品区域代理商的实际业务流程,结合了药品销售的行业特点,能很好的满足用户的使用需求。该系统操作功能齐全,简单易用,查询快速,包含了药品区域代理商需要的大部分细节功能,如:药品的基本信息、药品生产商的信息、经销商的回款查询、药品的进货及库存等等。能够很好的辅助用户管理药品,并且利用计算机做复杂的统计计算和繁琐的业务管理,极大的提高了用户的工作效率,降低了运营成本。该系统还有很多不足之处,会在以后的使用中不断的改进。1.1 系统开发的背景随着当今世界计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业进销存管理势在必行。使用传统的手工管理方式,一方面效率低下,另一方面容易造成错误。企业要实现现代化的主要内容之一就是实现商品的进销存信息管理系统的现代化,只有将计算机引入企业的管理,才能真正形成现代化企业的组织形式、管理和运用方式,才能真正体现企业规范化、科学化、现代化管理的手段。各行各业的管理、控制都越来越离不开计算机的辅助。“进销存管理系统”的开发就是为了辅助大多数企业的基本管理,实现信息管理的系统化、规范化和自动化。以前的手工管理效率低是最明显的缺陷,另外,数据的一致性不好维护,如某个药品信息的某条记录有所改动,那么该要品的其他记录就与此不一致,造成查询的费时费力。要把全部数据都更改又相当不方便。对药品库存的盘点也很不方便,而且需要较多的人来进行管理操作,而且容易出错,造成数据的不一致。因此,运用高效、准确的管理系统来替代手工管理是完善医药业管理的有效手段。1.2 系统开发的意义利用数据库系统可以很好的对数据进行维护,减少由于数据不一致等错误带来的麻烦,方便数据的更新和查询,降低错误率,方便药品信息的维护及库存的盘点。可以运用较少的人员,高效的完成对医药的管理。由于社会的发展不断趋于信息化,各个行业都要加强自身的信息化程度以适应社会的发展。而管理信息化正迎合了这个趋势,数据库系统在医药业的应用业实现了医药业执行工具、业务管理等的信息化,在这个信息化社会为医药业的发展增加了新的动力。相信随着社会的不断发展对该类系统的需求会越来越高。 医药进销存管理系统,即服务于个人,又服务于企业,并最终服务于社会,这是让科技为人类服务的最好例证,其开发意义显而易见。药品管理系统可以实现药品商家的高效管理,还可以节约资源。通过集中式的信息数据库,将商家的进、销、存等经营业务有机的结合起来中,达到数据共享、降低成本、提高效率、改进服务等目的。1.3 系统开发的目标本系统为了实现医药企业轻松方便地实现药品的进、销、存管理,现提出以下目标:(1) 系统应具有实用性、可靠性和适用性;(2) 要有良好的编程风格和界面设计;(3) 要有全面的系统分析与功能分析;(4) 能够按照用户选择的不同的条件进行简单快速查询;(5) 能够完成系统中信息的录入、修改、删除与查询等操作;(6) 方便用户的操作,尽量减少用户不必要的操作。2 需求分析2.1 用户需求这个系统是帮助完成日常繁重业务的工具。借助计算机系统,使他们凌乱的工作变得有条理,解脱需要记忆大量信息的困难。减轻汇总、统计、报告和传递这些信息的负担。尽量符合功能完整,操作简单,响应迅速,界面友善,易学易用成为这类软件必须满足的要求。管理员和业务员登陆以后可以很清晰的看到各种项目列表和可以实现的功能,药品管理、账单管理和人员管理一目了然。这个药品进销存管理系统主要涉及药企的药品进、销、存等业务,以及入库和出库管理,药品管理主要管理药库中所有药品的基本信息、进出和内部统计计算,账单管理主要是进货单、销售单的查询,人员管理主要是对供应商、客户进行添加、删除、查询和修改功能,其中管理员可以对业务员信息进行添加、查询、修改和删除功能。该系统主要是由药品的基本信息管理、进货入库、销售开单等模块的结合实现,并实现了药品具体信息查询等功能。系统从用户的角度出发,使用B/S结构,对于页面的美观也需要做一番苦功。在登陆及各个模块的功能做到最好的人性化和审美的结合。2.2 功能需求(1) 登陆功能只是一个药企的系统,需要有账号和密码才能进入进行操作。(2) 药品销售功能用户登陆后可以对药品进行销售管理,主要是销售明细查询、当日明细查询、销售日期查询,是对药品购买后进行的查询功能。(3) 系统管理功能登陆后可以管理员进行添加、查询、修改和删除功能。业务员还可以修改个人资料,管理员可以对业务员进行添加、查询、修改和删除操作,还可以对人员的登陆情况进行查询。2.3 系统结构首先介绍的是汇鑫药店医药管理系统的系统功能结构设计。通过查看本功能结构图,可以对本系统的主要实现功能和设计思路有个很清晰的认识和了解。本程序主要包含以下六子功能:药品管理功能,类别管理功能,购买药品功能,销售管理功能,进货需求管理功能,系统管理功能。具体实现如图2-1所示。医药管理系统药品管理类别管理购买药品销售管理进货/需求管理系统管理添加药品查看药品高级查询查看库存添加类别查看类别选购药品查看选购查看明细今日明细日期查询销售排行添加进货查看进货添加管理员查看管理员修改密码退出系统其次介绍E-R方法是“实体-联系方法”(Entity-Relationship Approach)的简称。它是描述现实世界概念结构模型的有效方法。是表示概念模型的一种方式,用矩形表示实体型,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体型连接起来;用菱形表示实体型之间的联系,在菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1,1 或m:n)。本系统使用的E-R图如下三图所示:图2-2 用户E-R图药品表属性关系如图2-3所示:图2-3 药品E-R图库存属性关系如图2-4所示:库存表药品名称药品编号数量入库时间有效期药品出场地整量单位库存量图2-4 库存E-R图2.4 可行性分析(1)技术可行性:是指客户提出的系统功能、性能及实现系统的各项约束条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个提供知识交流的学习系统,现有的技术已较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,同时,考虑给予的开发期限也较为充裕,预计该系统可以在规定期限内完成开发。(2)经济可行性:需要预算新系统的成本效益,其中包括估计项目开发的成本、开发费用和今后的运行、维护费用。基础投资:硬件设备:PC机软件设备:Windows7、MyEclipse 8.5、MySQL Server 5.0其它一次性支出:软件设计和开发费用经常性支出:软件维护费用、软件使用费用。(3)操作可行性:新系统的开发充分考虑到用户的操作水平,本着友好、方便、简单的原则,从而能完全满足使用者的要求。(4)法律可行性:新系统的开发,将不会侵犯他人、集体和国家的利益,不会违反国家政策和法律。3 总体设计3.1 功能模块设计本系统包括登陆模块、药品管理模块、采购管理模块和销售管理模块,其中药品管理又包括:添加药品信息、操作药品信息、药品类别管理。采购管理主要是进货入库单查询。人员管理包括供应商管理和分销商管理,每个管理里面都具有添加、查询、修改、删除的功能,其中管理员可以对用户进行管理。我主要负责的是登录模块和销售管理模块。登陆:管理员和业务员在同一个登陆块中登陆,直接连接数据库验证账号和密码的正确性。添加药品信息:用户可以添加新的药品信息,需要填写药品名称、选择类别、参考进价、参考售价等信息,编号和更新日期都是系统自动生成,业务员默认为当前登陆的业务员。操作药品信息:可以通过编号、名称、类别对药品进行查询、修改和删除,支持模糊查询。药品进货入库:需要填写药品进货入库单,填写药品编号(也可以选择药品名称)、数量、单价、备注信息日期是系统自动生成,业务员默认为当前登陆的业务员。该系统的结构图为图3-1所示:图3-1 系统结构图3.2 数据库设计(1)本系统用到了4个表,分别为药品表、用户表、销售表、药品类别表。用户表示用存储用户信息,用户表设置了4个属性,设置主键id、用户名、密码和创建时间。用户表表的设计如表3-1所示:表3-1 用户对象数据表属性数据类型是否可为空键值默认值额外信息idint(11)NOPRINULLauto_incrementusernamevarchar(50)NOUNINULLpasswordvarchar(50)NONULLcreate_timedatetimeYESNULL(2)药品对象所对应的表结构,主要是药品的基本信息如表3-2所示:表3-2 药品对象数据表属性数据类型是否可为空键值默认值额外信息idint(11)NOPRINULLauto_incrementmed_novarchar(100)NOUNINULLnamevarchar(100)NONULLfactory_addvarchar(100)YESNULLdescriptiontextYESNULLpricedoubleNONULLmed_countint(11)YESNULLreq_countint(11)YESNULLphoto_pathvarchar(255)YESNULLcategory_idint(11)YESMULNULL(3)销售明细对象所对应的表结构,主要是销售的信息对象的信息如表3-3所示:表3-3 销售明细对象数据表属性数据类型是否可为空键值默认值额外信息idint(11)NOPRINULLauto_incrementsell_namevarchar(200)NONULLsell_pricedoubleNONULLsell_countint(11)NONULLsell_timedatatimeNONULLmed_idint(11)YESMULNULLuser_idint(11)YESMULNULL(4)药品类别对象所对应的表结构,主要是药品类别的信息如表3-4所示:表3-4 药品类别对象数据表属性数据类型是否可为空键值默认值额外信息idint(11)NOPRINULLauto_incrementnamevarchar(100)NONULLdescriptiontextYESNULLcreate_timedatetimeYESNULL3.3 功能流程图以特定的图形符号加上说明,表示算法的图,称为流程图或框图。流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。例如,一张流程图能够成为解释某个零件的制造工序,甚至组织决策制定程序的方式之一。这些过程的各个阶段均用图形块表示,不同图形块之间以箭头相连,代表它们在系统内的流动方向。下一步何去何从,要取决于上一步的结果,典型做法是用“是”或“否”的逻辑分支加以判断。流程图是揭示和掌握封闭系统运动状况的有效方式。作为诊断工具,它能够辅助决策制定,让管理者清楚地知道,问题可能出在什么地方,从而确定出可供选择的行动方案。流程图有时也称作输入-输出图。该图直观地描述一个工作过程的具体步骤。流程图对准确了解事情是如何进行的,以及决定应如何改进过程极有帮助。这一方法可以用于整个企业,以便直观地跟踪和图解企业的运作方式。流程图使用一些标准符号代表某些类型的动作,如决策用菱形框表示,具体活动用方框表示。但比这些符号规定更重要的,是必须清楚地描述工作过程的顺序。流程图也可用于设计改进工作过程,具体做法是先画出事情应该怎么做,再将其与实际情况进行比较。3.3.1 用户登录(1)功能流图图3-5 用户登录功能流图(2)功能描述 用户根据已知的用户名和密码登录系统,只有登录成功才能进行系列的药品管理、库存管理、入库及出库管理的操作。3.3.2 药品管理(1)功能流图图3-36药品添加功能流图(2)功能描述用户进入系统以后,首先需要添加药品信息,没有药品信息就无法进行库存管理了,更做不到药品入库和出库。药品信息作为库存管理的一部分,是药品入库和出库的编号查询;还有为提供药品有效期的报警来源。3.3.3 库存管理(1)功能流图图3-7库存初始化功能流图(2)功能描述用户登录进入库存管理页面,进行库存初始化。库存初始化是把现有的库存添加到库存表当中去,但是首先这些库存的药品信息已经都是被录入药品表。所以在查询到这些药品信息后便可以进行库存初始化了。3.3.4 出库单管理(1)功能流图图3-8 出库功能流图(2)功能描述用户在出库单管理的时候,出库要先根据已有的可以出库的药品信息才能出库,出库时候进行出库药品信息核对之后便可以完成药品出库了。3.3.5 入库单管理(1)功能流图图3-9 入库功能流图(2)功能描述用户在入库单管理的时候,入库要先根据已有的药品信息才能入库,入库不能入没有名目的药品。入库时候进行入库药品信息核对之后便可以完成药品入库了。3.4 页面结构设计医药管理系统的页面结构采用框架进行设计,通过HTML语言中的呃标签及标签将页面分成三个部分,分别为页面头部、页面导航及内容页面。此种布局方式将每一个页面单独置于一个页面之中,简单整齐。结构图如图4-3所示。页面头部页面导航页面内容图4-3页面结构图4 详细设计4.1 登陆界面设计登陆界面比较简单,主要就是两个用来输入账号和密码的文本框,和两个按钮组成的。点击登陆后会验证账号和密码的正确性验证代码见附录,验证通过方可进入系统主界面,同时会存储有关信息,设计界面如图4-1所示。图4-1登录界面实现登录的后台代码如下:public class LoginAction extends Action / 处理用户登录请求public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception UserForm uf = (UserForm) form;/ 获取ActionFormString userName = uf.getUsername();/ 用户名String password = uf.getPassword();/ 密码User user = null;/ 查询用户if (userName != null & password != null) UserDao userDao = new UserDao();user = userDao.login(userName, password);/ 查询到用户则登录成功,否则登录失败返回到登录页面if (user != null) request.getSession().setAttribute(user, user);return mapping.findForward(manage); else request.setAttribute(error, error);return mapping.findForward(loginFail);成功登录进入主界面如图4-2所示:图4-2主界面4.2 药品销售(购买)功能设计本页面实现药品的销售功能,页面的布局基本一致,所有数据都是通过文本框获得的,药品编号也可以通过选择药品名称来获取,分销商也可以通过选择来获取,也可以不填写。填写完毕有关信息后,点击确定,系统首先判断该药品是否存在,然后判断库存的数量和销售的数量。首先先实现对药品购买功能如图4-3所示:图4-3选购药品核心代码:SellDetailForm sdf = (SellDetailForm) form;if (sdf != null & sdf.getSellPrice() 0 & sdf.getMedId() 0) MedicineDao medDao = new MedicineDao();/加载药品信息Medicine med = medDao.loadMedicine(sdf.getMedId();/如果购买的数量小于库存数量,进行错误处理if (med.getMedCount() sdf.getSellCount() ActionMessages errors = new ActionMessages();ActionMessage message = new ActionMessage(drug.drugCount.error, );errors.add(, message);this.saveErrors(request, errors);return mapping.findForward(error);点击购买后进入购物界面,实现购买药品的提交,如图4-4所示:图4-4选购药品后的页面然后进入购买功能的结算的界面如图4-5所示:图4-5结算界面核心代码:int i = 1;/ 迭代已添加的药品for (; i 0) request.setAttribute(list, list);return mapping.findForward(sequence);4.4 系统管理功能设计系统登陆后可以管理员进行添加、查询、修改和删除功能。业务员还可以修改个人资料,管理员可以对业务员进行添加、查询、修改和删除操作,还可以对人员的登陆情况进行查询。对系统功能设计有管理权限,只有管理员的权限,没有游客的登录,以此保障系统的安全性,有添加功能如图4-12所示:图4-12添加功能还有查看管理员的信息,如图4-13所示:图4-13查看管理用户还有修改密码功能,对系统进行管理,如图4-14所示:图4-14修改密码核心代码:function save() var form = document.formsuserForm; if(form.elementsoldPassword.value = ) alert(原密码为空); form.elementsoldPassword.focus(); return false; if(form.elementspassword.value = ) alert(密码为空); form.elementspassword.focus(); return false; if(form.elementsrePassword.value = ) alert(确认密码为空); form.elementsrePassword.focus(); return false; if(form.elementsrePassword.value != form.elementspassword.value) alert(两次密码不一致); return false; 4.5 系统架构本系统以Struts+Hibernate架构为基础,遵循MVC结构按照实际的开发流程来进行开发。包括如下:Hibernate功能开发:包括创建Hibernate的持久化类、映射文件,开发DAO类;Struts功能开发:开发Form Bean类、Action类、JSP页面并进行页面的国际化、表单的校验,调用Hibernate层的DAO类执行与数据库的交互;Struts功能开发:创建applicationContext.xml文件,并在其中进行基础的Bean组件配置,包括:数据源配置、SessionFactory的配置、配置事务、配置DAO组件以及配置DAO事务;系统功能提升:包括开发分页栏通用模块、图片国际化、MySQL数据库的国际化、系统安全访问等。 4.5.1 MVC简介Struts2是一个兼容Struts1和WebWork的MVC框架,既然,提到了MVC框架,就不得不对MVC框架做一个简单介绍,仅限于简单介绍,如果,想了解更多的MVC的知识可以查看相关的文档,或者找一本Struts1的书籍,相信上面关于MVC的篇幅不会很少。言归正传,其实,Java目前出现的这些框架而言,其最终目的都是为了接触耦合,不论是Spring、Hibernate或MVC框架,目的都是为了接触耦合增加复用。MVC接触的是View和Model间的耦合。MVC包含三个基础部分:Model、View和Controller,这三个部分以最小的耦合协同工作,以增加程序的可扩展性和可维护性。各个部分的实现技术可以总结如下:1)Model:JavaBean、EJB的EntityBean2)View:JSP、Struts的TagLib3)Controller:Struts的ActionServlet、Action概括起来MVC的优点主要有一下方面: 1)多个视图可以对应一个模型。按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护;2)模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,例如,使用JSP页面、Velocity模板或者直接产生Excel文档等;3)应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性;4)控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用户请求权限的概念;5)MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码。4.5.2 Struts2简介Struts2看似是从Struts1发展而来,但实际上Struts2与Struts1在框架的设计思想上面还是有很大的区别,Struts2是以WebWork的设计思想为核心,为什么Struts2不沿用Struts1的设计思想,毕竟Struts1在目前的企业应用中还是有非常大的市场在的,那么,来看下Struts1的一些缺点吧: 1)支持的表现层技术单一; 2)与Servlet API严重耦合,这点可以从Action的Execute的方法声明里面就可以看的出来;3)代码依赖Struts1 API,有侵入性,这点可以从写Action类和FormBean的时候看的出来,Action必须实现Struts的Action类而Struts2之所以以WebWork的设计思想为其核心,一点就是最近WebWork的上升势头,再就是WebWork没有Struts1上面的那些缺点,更符合MVC的设计思想,也更利于代码的复用。基于以上介绍可以看的出,Struts2体系结构与Struts1的体系结构有很大的差别,Struts1是使用ActionServlet做为其中心处理器,Struts2则使用一个拦截器(FilterDispatcher)做为其中心处理器,这样做的一个好处就是将Action类和Servlet API进行了分离。Struts2的简单处理流程如下:1)浏览器发送请求; 2)中心处理器根据struts.xml文件查找对应的处理请求的Action类;3)WebWork的拦截器链自动对请求应用通用功能,例如:WorkFlow、Validation等功能;4)如果Struts.xml文件中配置Method参数,则调用Method参数对应的Action类中的Method方法,否则调用通用的Execute方法来处理用户请求;5)将Action类中的对应方法返回的结果响应给浏览器。4.5.3 Struts2与Struts1对比1)Action类的实现方式:Struts1的Action在实现的时候必须扩展Action类或者Action的子类,Struts2的Action类实现的时候可以不用实现任何类和接口,虽然Struts2中提供一个ActionSupport类,但是,不是必须的; 2)Struts1的Action类是单例模式,必须设计成线程安全的,Struts2则为每一个请求产生一个实例; 3)Struts1的Action类依赖与Servlet API,从其execute的方法签名可看出,execute方法有两个Servlet的参数HttpServletRequest和HttpServletResponse,Struts2则不依赖于Servlet API; 4)Struts1依赖于Servlet API这些Web元素,因此对Struts1的Action进行测试的时候是很困难的,需要借助与其他的测试工具,Struts2的Action可以象测试其他的一些Model层的Service类一样进行测试;5)Struts1的Action与View通过ActionForm或者其子类进行数据传递,虽然也有LazyValidationForm这样的ActionForm的出现,但是,还是不能象其他层面那样通过一个简单的POJO进行数据传递,而Struts2将这样的奢望变成了现实;6)Struts1绑定了JSTL,为页面的编写带来方便,Struts2整合了ONGL,也可以使用JSTL,因此,Struts2下的表达式语言更加强大。4.5.4 Struts2与WebWork对比Struts2实际上就是WebWork2.3,不过,Struts2还是与WebWork有少许的差别:1)Struts2不再支持内置IOC容器,改用Spring的IOC容器;2)Struts2对于Webwork的一些Ajax的特性的标签改用Dojo进行替换;Struts2工作流程;Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。一、核心控制器FilterDispatcher核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。Struts 2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。一个请求在Struts 2框架中的处理大概分为以下几个步骤。1)客户端提交一个(HttpServletRequest)请求。2)请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。3)FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。4)FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。5)ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。例如,用户注册示例将找到UserReg类。6)ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。7)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。Struts 2设计的精巧之处就是使用了Action代理,Action代理可以根据系统的配置,加载一系列的拦截器,由拦截器将HttpServletRequest参数解析出来,传入Action。同样,Action处理的结果也是通过拦截器传入HttpServletResponse,然后由HttpServletRequest传给用户。4.5.5 业务控制器Action业务控制器Action是由开发者自己编写实现的,Action类可以是一个简单的Java类,与Servlet API完全分离。Action一般都有一个execute()方法,也可以定义其他业务控制方法。Action的execute()返回一个String类型值,这与Struts 1返回的ActionForward相比,简单易懂。Struts 2提供了一个ActionSupport工具类,该类实现了Action接口和validate()方法,一般开发者编写Action可以直接继承ActionSupport类。编写Action类后,开发者还必须在配置文件中配置Action。一个Action的配置应该包含下面几个元素:该Action的name,即用户请求所指向的URL;Action所对应的class元素,对应Action类的位置;指定result逻辑名称和实际资源的定位;Action是业务控制器,在编写Action的时候,尽量避免将业务逻辑放到其中,尽量减少Action与业务逻辑模块或者组件的耦合程度。4.6 持久层Hibernate实现4.6.1 创建并配置Hibernate映射文件在进行struts层的功能开发之前,我们需要基于Hibernate开发底层的DAO层。我们将分2个步骤进行开发。创建Hibernate的持久化类和映射文件,并在applicationContext.xml中进行配置;开发并配置Hibernate DAO层UserDAO.java、category DAO.java、medicineDAO.java、sellDAO.java、supperDAO.java。这是Hibernate层开发的第一步,使用MyEclipse的工具Database Explorer来自动创建Hibernate的持久化类和映射文件,对应的数据库分别为tb_category、tb_medicine、tb_selldail以及tb_user表。4.6.2 开发并配置Hibernate DAO层到目前为止,系统已经具备了Hibernate的基础访问功能,下面我们要开发Hibernate DAO层,使用HibernateTemplate实现对数据表的增、删、改、查的操作。4.7 控制层Struts实现在以上经过对Hibernate持久化类、映射文件和DAO类的开发,已经具备了数据层的功能代码,下面我们就要开发Struts层的代码,来调用该数据层实现数据库的操作。增加表单校验功能。主要修改增加页面、修改页面和表单类;调用DAO类操作数据库。修改Actiono类调用DAO类中的函数,进行数据库的关联。接下来实现的是通讯录的请求处理流程的配置和类代码。实现的步骤包括如下:新建并配置表单类:配置元素,并开发AddressForm.java表单类;在struts-config.xml中添加请求配置:配置元素,在applicationContext.xml中添加请求代理:配置与相匹配的元素,接收Struts的委托;在applicationContext.xml中添加日志拦截:为请求地址添加日志拦截器;开发Action类原型功能:设计Action类的请求处理函数,这里的函数现在还只是空架子,只能够进行页面的流转,没有实际的功能,目的是为了在开发完JSP页面后能够进行页面的流转。4.8 web.xml的配置 Web.xml文件是web项目的配置文件,在此系统中,此文件需要配置Struts框架、过滤器等信息。在当前的网络信息时代,信息量不仅庞大而且源自于不同的数据源,信息集成一直是研究的热点。基于多代理(Multi-Agent)的信息资源集成方案有所不足,而XML集成机制的优点,适于网络环境下基于XML的信息集成。本方案:包括系统的总体框图、层次结构、工作过程及信息系统主要部分的具体设计。随着计算机技术,特别是Internet的不断发展,实现信息孤岛之间的集成与交互成为亟待解决的问题。在诸多解决方案中,基于多代理(Multi-Agent)的信息集成就是其中的一种。该系统已被认为是建造大型复杂分布式信息处理系统的重要技术和框架。在基于多代理的方法中,资源集成的具体操作步骤是:用户把请求提交给搜索代理,由搜索代理对请求进行适当的转换,发送给代理路由器;代理路由器通过链接,将查询请求发送给数据库代理;数据库代理接受查询请求,并进行具体的数据库操作,然后把查询结果返回给请求者;搜索代理对返回的结果进行识别,若存在所需的资源,则激活本地数据库代理,对获得的信息进行记录,由专家系统对所搜集的信息进行进一步的处理。这种方法有一个明显的缺陷,即必须明确数据库的格式,代理才能正常工作。而XML技术则可以很好的解决这个问题。用XML进行数据集成,只需对所有的异构数据源增加一个以XML为格式的封装体,即在不改变数据源的前提下,用XML对数据源的定义描述字、数据源的创建等相关信息进行封装。供应链节点上所有数据源的封装体纳入全局的XML Schema或DTD,并存储在XML虚拟服务器,为系统检索、定位提供服务。在XML的集成机制里,可以通过XML封装体实现彼此之间的数据交互,所以不需要了解数据库的格式,从而弥补了基于多代理的集成方法。为了提供初始化参数,对servlet或JSP页面定义一个定制URL或分配一个安全角色,必须首先给servlet或JSP页面一个名称。可通过 servlet元素分配一个名称。最常见的格式包括servlet-name和servlet-class子元素(在web-app元素内),如下所示:actionorg.apache.struts.action.Ac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全培训教学结尾课件
- 2025江苏苏州市吴江区引进教育重点紧缺人才12人考前自测高频考点模拟试题及答案详解(名师系列)
- 2025年高柔性不锈钢金属软管项目发展计划
- 安全培训效果请假报告课件
- IITR01324-Standard-生命科学试剂-MCE
- 小学培训与安全评估课件
- HPK1-IN-61-生命科学试剂-MCE
- 短期外汇贷款合同7篇
- H-151-Alkyne-生命科学试剂-MCE
- 2025杭州青少年活动中心招聘工勤岗位工作人员20人模拟试卷及参考答案详解1套
- 邀请函模板完整
- 2020新译林版高中英语选择性必修二全册课文及翻译(英汉对照)
- 大学物理第14章光的衍射课件
- 家长会 课件(共44张ppt) 九年级上学期
- 钻孔灌注桩施工安全控制培训教材课件
- 福建省莆田市各县区乡镇行政村村庄村名明细
- 大班幼儿随访电访记录表内有内容
- 干细胞精品课件
- 太阳能路灯说明书完整版
- 中国老龄化社会的潜藏价值(中英)
- 初中化学课程标准(修订稿)
评论
0/150
提交评论