MVC课程设计作业_第1页
MVC课程设计作业_第2页
MVC课程设计作业_第3页
MVC课程设计作业_第4页
MVC课程设计作业_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

兰州财经大学网站建设技术课程设计学院、系:信息工程学院专业:信息管理与信息系统姓名:刘美辰学号:指导教师:易纪海 成绩:2023年06月27日目录一、电子商务网站设计模式 21.1MVC设计模式的概述 21.2电子商务网站应用技术及系统框架的介绍 41.3系统的软件开发工具 5二、电子商务网站的需求分析与功能设计 62.1系统的需求分析 6三、电子商务网站的设计与实现 73.1电子商务网站数据库的设计与实现 73.1.1数据库的简介 73.1.2数据库的需求分析 73.1.3数据表结构设计 83.2数据持久层的设计与实现 83.3业务逻辑层的设计与实现 93.4控制器的设计与实现 93.5视图层的实现 12总结 15参考文献 16一、电子商务网站设计模式1.1MVC设计模式的概述MVC是一种设计模式,它强制性的将应用程序的输入、解决和输出分开。使用MVC的应用程序被分为3个核心部件:模型(Model)、视图(View)、控制器(Controller)。它们各司其职,既分工明确又互相协作。MVC设计模式的典型流程[3][4]为:一方面Controller接受用户的请求,并决定应当调用哪个Model来进行解决,然后Model用业务逻辑来解决用户的请求并返回数据,最后Controller用相应的View格式化Model返回的数据,并通过表达层呈现给用户。具体的关系如图1.1所示。图1·1模型、视图、控制器之间的分工协作关系控制层(Controller)可以理解为从用户接受请求,将模型与视图匹配在一起,共同完毕用户的请求。划分控制层的作用也很明显,它清楚地告诉我们,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完毕什么样的用户请求。控制层并不做任何的数据解决。控制层的功能为:接受用户的请求,根据用户的请求调用某个模型进行业务解决,将解决结果送给某个视图进行显示。模型层(Model)就是业务流程/状态的解决以及业务规则的制定。业务流程的解决过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的解决结果。它的作用是反映整个应用程序的状态,对用户请求进行业务逻辑解决,响应状态查询,告知视图并更新业务状态。视图层(View)代表用户交互界面,对于Web应用来说,可以概括为显示界面,随着应用的复杂性和规模性,界面的解决也变得具有挑战性。一个应用也许有很多不同的视图,MVC设计模式对于视图的解决仅限于视图上数据的采集和解决,以及用户的请求,而不涉及在视图上的业务流程的解决。业务流程的解决交予模型(Model)解决。视图层的功能就是显示模型的数据,接受数据更新并请求更新视图数据,接受用户输入的数据并送给控制层。MVC设计模式不仅可以实现功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用行,是一个优秀的创建软件的途径,特别实在JavaWeb应用程序的构架方面。JavaEE把MVC引入Web领域,在此基础上架构出一套称为Model2[5]的体系,使JavaWeb应用程序的健壮性、代码重用和结构方面新上一个新台阶。1.2电子商务网站应用技术及系统框架的介绍在本系统的设计过程中,根据MVC模式,使用Struts2、Spring、Hibernate技术进行系统的开发。(1)Struts[6][7]是Apache基金会Jakarta项目组的一个开源项目,它采用MVC模式,可以很好地帮助Java开发者开发Web应用,它能大量减少开发Web应用的时间,提高产品的重用度。Struts重要是采用Servlet和JSP技术来实现的,它把Servlet、JSP、自定义标签和信息资源(messageresources)整合到一个统一的框架中,Struts它只有一个中心控制器,他采用XML定制转向的URL,采用Action来解决逻辑,开发人员运用其进行开发时不用再自己编码实现全套MVC模式。Struts这是它的一大优点,使开发者能更进一步的了解其内部实现机制。StrutsFramework是MVC模式的体现。在系统中,Struts2充当控制器的角色,它通过核心控制器FilterDispatch与拦截器Interceptor实现了Model2架构,及MVC架构,其体系结构如图1·2所示。图1·2Struts的MVC实现(2)Spring是由RodJohnson创建并且是一个开源框架,是为了解决公司应用程序开发复杂性而创建的。Spring使用基本的JavaBean来完毕以前只也许由EJB完毕的事情。然而,Spring的用途不仅限于服务器端的开发。从简朴性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益[8]。简朴的说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。在系统开发的过程中,Spring充当的是整个应用的Bean资源管家,甚至涉及Struts2的业务控制器Action实例的接管,充当Struts的得力助手。时代在发展,技术在进步,人们对于各种复杂数据及业务逻辑的解决规定也在不断的提高,MVC三层模型已不能满足高性能,低耦合框架结构的分层规定,此时,人们引入了持久层的概念,用于封装底层数据的持久化与访问操作。对象—关系映射ORM(object-RelationMapping)是用来将对象与对象之间的关系相应到数据库与表之间的关系的一种模式。Hibernate是一个面向Java环境的对象/关系数据库映射工具。Hibernate是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的封装,使JAVA程序员可以随心所欲的使用面向对象的编程思想来操作数据库。它负责持久层,直接与底层数据库打交道[9][10]。使用Struts2、Spring、Hibernate组合的框架[11]后,系统的框架如下图2·3所示。图1·3系统的框架图1.3系统的软件开发工具(1)开发工具MyEclipseMyEclipse是公司级工作平台,全称是MyEclipseEnterpriseWorkbench,是对EclipseIDE的扩展。MyEclipse是功能比较丰富的集成开发环境,比如编码、调试、测试和发布功能,并且完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。(2)服务器TomcatTomcat是一个免费的开源的Serlvet容器,它是APache基金会的Jakarta项目中的一个核心项目,由APache,sun和其它一些公司及个人共同开发而成。(3)数据库MySQLMySQL是由MySQLAB公司开发、发布并支持的全世界最流行的开源SQL数据库管理系统,于2023年被Sun公司收购[12]。二、电子商务网站的需求分析与功能设计需求分析在软件开发过程中,具有举足轻重的地位,它具有决策性,方向性,策略性的作用。需求分析的任务就是要解决“做什么”的问题,就是要全面地理解用户的各项需求,并准确地表达所接受的用户需求。功能设计则是具体的说明系统要完毕的功能。2.1系统的需求分析系统的实际应用性很明显,电子商务发展非常迅速,人们追求的是简捷、方便、省时,通过Internet选购商品,不必花费太多的时间去逛商场,坐在家里上网就可以买到称心的商品,符合人们的心愿。但是,系统不仅仅只要有简朴易学的操作界面,还需要考虑交易的安全性,所以在注重界面美观、容易操作的基础上,还要特别注意对信息进行保管。关键要注意:在具有基本的功能这个基础上要保证操作简朴以及界面美观,并要使顾客不久适应这个系统。本系统的应涉及的功能有:消费者可以浏览新闻和商品信息,可以查看商品的具体信息,当注册后可以购物,并可以对其购物车进行管理,购物完毕后提交订单,购物完毕后可以查看订单。会员购物完毕后可以自动增长相应的积分。管理员根据不同的权限可以对新闻模块,订单和商品模块,会员管理模块,流量记录模块进行管理。具有高级权限的管理员可以添加新的管理员。电子商务网站重要有新闻发布模块、会员管理模块、商品管理模块、购物车及订单管理模块、系统用户管理与流量记录模块。系统的总体功能结构图如下3·1所示。图2·1系统总体功能模块图三、电子商务网站的设计与实现3.1电子商务网站数据库的设计与实现3.1.1数据库的简介本系统采用MySQL作为数据库平台,它对存储过程、触发器和视图都有很好的支持,并且MySQL是开源的数据库服务器,有助于减少开发成本。支持上千万条的数据记录。安装简朴,使用方便。3.1.2数据库的需求分析网站的需求重点体现在各种信息的提供、保存、更新和查询。这就规定数据库结构可以满足各种信息的输出和输入。针对网站的需求,通过对网站各个模块的需求分析,可以得到所需实体的数据结构:系统用户信息:系统用户的编号、账户、密码、权限等信息。购物车信息:购物车编号、所属会员编号、购物车的总金额、购物车状态。购物车商品选购记录信息:编号、所属购物车编号、所属商品编号、选购数量、成交价格、成交总价。订单信息:编号、所属的购物车编号、所属的商品编号、订单编号、订单日期、订单状态。注册会员信息:会员编号、所属会员级别号、登录账号、密码、会员真实姓名、电话、地址、邮政编码、邮政编码、最后一次登录的日期、会员积分等。会员级别信息:会员级别编号、会员级别名称、所需积分、优惠比例。商品类别信息:编号、上级商品类别编号、商品类别名称。商品信息:编号、所属商品类别编号、商品名称、商品市场价、商品促销价、商品型号、商品图片、商品视频、商品描述、是否有促销价、商品详情静态页面途径、商品状态。新闻栏目信息:编号、上级栏目编号、新闻栏目编号、新闻栏目名称。新闻信息:编号、所属新闻栏目ID、新闻标题、新闻内容、新闻摘要、关键字、是否图片新闻、图片URL、新闻来源、新闻发布日期、作者、点击数、排序优先、状态等。流量信息:编号、来源URL、受访页面的URL、访客的URL、物理地址、访问时间等。3.1.3数据表结构设计表就是数据库中用来存放数据的场合。在数据库中可以有多个表,但表名应当是唯一的。同一数据库中的表可以互相关联,也可以彼此独立。该系统包含多个表,每张表存储着该系统某项功能的数据信息[20],根据上述的数据需求分析,可以得到表结构。如表3·1为系统用户信息表,记录了系统用户的属性信息。表3·1系统用户表(admin)字段名称数据类型主键自增允许为空描述IDint(11)是增1ID号LoginNamevarchar(20)否√登录账户LoginPwdvarchar(50)否√登录密码Privilegesvarchar(50)否√权限3.2数据持久层的设计与实现持久层是专门负责持久化工作的逻辑层,由它统一与数据库打交道。它封装了所有与数据库相关的操作和细节。持久层是业务逻辑层与底层数据库之间的纽带,除了完毕关系数据表的持久化以外,还要提供统一的数据访问服务。Hibernate作为持久层中间件,功能强大。它可以使开发人员方便的实现数据表的持久化,为其提供统一的数据访问服务。统一数据访问接口。在系统中,所有的模块使用统一的数据访问接口,减少底层的代码开发量,提高系统的维护效率。系统使用BaseDao及其实现为系统提供数据访问服务。2.表的持久化及表的关联运用Hibernate的功能实现新闻栏目表相应的持久化类Newscolumns及其ORM映射文献Newscolumns.hbm.xml实现新闻栏目的自身多对一的关联。3.3业务逻辑层的设计与实现Dao组件已经实现了统一的数据访问,业务逻辑组件则调用Dao组件提供的数据访问服务,替业务控制器实现真正意义上的用户请求解决[14]。通常的业务逻辑单元的划分是针对用户请求进行的,从事务管理的角度而言,这种业务逻辑单元具有原子性,因此,一个用户请求幕后往往会有一个相应的业务解决单元,同时,它也是一个事务管理单元。在SSH2组合框架中,Spring负责接管业务逻辑层。运用Spring的面向切面功能,系统的所有业务逻辑组件统一采用Spring的BeanNameAutoProxyCreatorf自动创建事务代理,这样就不必为每个业务逻辑组件创建事务代理,大大减少了application.xml中代码的冗余度,提高了代码的重用性和可维护性。Spring的控制反转IoC功能,可以使我们将统一的数据访问Dao组件注入到业务逻辑层中,使我们可以方便的调用Dao组件中方法。3.4控制器的设计与实现控制器在本系统是通过Struts2来实现的。Strut2通过核心控制器FilterDispatch与拦截器Interceptor拦截用户请求,针对不同的用户请求,调用相应的业务控制器来进行解决。业务控制器调用不同的业务逻辑解决,最终有业务控制器返回一个Result命名视图。 使用Struts2的流程如下:用户请求均通过直接调用Action类的相应方法进行解决,Action类中的相应方法在收到请求后,一方面送交拦截器LoginedCheckInterceptor进行Session过期、登录有效性及操作权限验证,当Session已过期、尚未成功登录或不具有新闻管理的权限时,由拦截器直接返回相应的错误提醒页面或登录页面。否则继续交由Struts2的默认拦截器进行相关解决,最后调用有Spring2依赖注入进行的业务逻辑解决组件Service实例进行业务逻辑解决,根据Struts.xml中的视图配置,将解决结果交由相应的视图组件返回展现给用户。 下面将以系统用户管理模块为例,讲述控制器的实现。 1.系统用户管理业务控制器AdminAction类系统用户管理业务控制器AdminAction类采用模型驱动,直接使用持久化类Admin充当模型类,用于封装表单属性、请求参数及解决结果。AdminAction类的功能有:解决登录请求,解决推出请求,解决浏览系统用户请求,解决删除系统用户的请求,解决添加系统用户的请求,解决更新系统用户的请求等。下述的代码讲述的是登录,注销,浏览,新增系统的功能。/**系统管理员解决控制器*/@SuppressWarnings("serial")publicclassAdminActionextendsActionSupportimplementsModelDriven<Admin>{ /**通过依赖注入AdminService组件实例*/ AdminServiceservice; /**系统用户管理所有请求中常用的参数值*/ privateStringrand; //随机验证码 privateStringactionMsg; //Action间传递的消息参数 privateList<Admin>adminList; //系统用户列表 //采用模型驱动 privateAdminmodel=newAdmin();//用于封装系统用户属性模型 publicAdmingetModel(){ returnmodel; } /**解决登录请求*/ publicStringlogin(){ if(!rand.equalsIgnoreCase((String)ServletActionContext.getRequest().getSession().getAttribute("rand"))){ addActionError(getText("login_rand_error")); return"login"; }else{ AdmintempAdmin=service.adminLogin(model.getLoginName(),MD5.MD5Encode(model.getLoginPwd())); if(tempAdmin!=null){ ServletActionContext.getRequest().getSession().setAttribute("admin",tempAdmin); return"index"; }else{ addActionError(getText("login_fail")); return"login"; } } } /**解决注销请求*/ publicStringlogout(){ ServletActionContext.getRequest().getSession().invalidate(); return"login"; } /**解决浏览系统用户请求*/ publicStringbrowseAdmin(){ if(actionMsg!=null){ try{ actionMsg=newString(actionMsg.getBytes("ISO8859-1"),"gbk"); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } addActionMessage(actionMsg); } adminList=service.browseAdmin(); returnSUCCESS; } /**解决新增系统用户请求*/ publicStringaddAdmin(){ AdmintempAdmin=newAdmin(); tempAdmin.setLoginName(model.getLoginName()); tempAdmin.setLoginPwd(MD5.MD5Encode(model.getLoginPwd())); tempAdmin.setPrivileges(model.getPrivileges()); if(service.saveOrUpdateAdmin(tempAdmin)){ addActionMessage(getText("admin_add_succ")); }else{ addActionMessage(getText("admin_add_fail")); } returnSUCCESS; } //setXX()和getXX()方法省略}2.在Spring中配置业务控制器AdminAction类 将Struts2的业务控制器交给Spring容器来负责,可以充足的运用Spring容器的IoC特性。Spring使用单例模式,为每个用户的请求生成一个全新的实例。在applicationContext.xml中的配置如下:<!--部署Struts2负责系统用户管理的控制器AdminAction--><beanid="adminAction"class="com.ebuy.struts.action.AdminAction"scope="prototype"> <propertyname="service"ref="adminService"/> </bean>在Spring中配置过业务控制器后,就可以在Struts.xml中直接引用AdminAction的beanid了,无需指定AdminAction的全类名。3.Struts.xml中配置业务控制器 用户的具体请求,业务控制器中的解决方法及结果展现视图之间的相应关系,必须在Struts2的配置文献Struts.xml中进行对的的配置方能生效。对于哪些具有一定命名规则的用户请求可以使用通配符实现动态方法调用,如“admin_*”来表达。在Struts.xml中的配置如下:<packagename="admin"extends="ebuy"namespace="/admin"> <!--配置系统用户管理的AdminAction映射--> <actionname="updateAdmin"class="adminAction"method="updateAdmin"> <resultname="input">/admin/editAdmin.jsp</result> <interceptor-refname="loginedCheck"/> <interceptor-refname="defaultStack"/> </action> <actionname="admin_*"class="adminAction"method="{1}"> <result>/admin/{1}.jsp</result> <resultname="input">/admin/{1}.jsp</result> <resultname="index">/admin/index.jsp</result> <resultname="login">/admin/login.jsp</result> <resultname="toBrowseAdmin"type="redirect-action"> <paramname="actionName">admin_browseAdmin</param> </result> <interceptor-refname="loginedCheck"/> <interceptor-refname="defaultStack"/></action>控制器的配置流程是:一方面完毕业务控制类的功能实现,然后将业务控制类注入到Spring的配置文献中,最后在Struts2中配置相应的视图结果。3.5视图层的实现视图层的功能就是显示模型的数据,接受用户输入的数据并送给控制层,接受数据更新并请求更新视图数据。视图层没有任何的业务操作,它只负责接受用户数据和显示用户数据。本节将给出系统运营时页面的部分效果图。1.前台页面显示画面。用户初次进入网站首页面展示的效果图3·1所示。图3·1网站首页面进入首页后,用户可以浏览商品信息,网站新闻等内容。假如用户需要购物,则需注册账号,注册页面如下图3·2所示。图3·2注册页面用户购买完商品后,可以再购物车中查看所购商品,并在其中可以修改数量,清空购物车等。效果图如下图3·3所示。图3·3购物车管理的页面确认过订单信息后,可以提交订单,订单提交成功后会生成一个订单编号,通过订单编号,可以查看订单的状态,进行订单的管理。订单管理的效果图如下图3·4所示。图3·4订单管理页面2.后台管理员管理页面系统用户进入页面时,一方面要进行登录,登录页面如下图3·5所示。图3·5管理员登录管理员登录后,会根据其权限分派相应的功能。登录后的页面,如图3·6所示。图3·6后台管理主页面后台的订单管理页面的展示如下图3·7所示。图3·7后台的订单管理页面总结电子商务网站是现在流行的一种网上购物方式。随着互联网的普及以及电子商务的发展和人们

温馨提示

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

评论

0/150

提交评论