《2668.于MVC设计模式的Struts架构的研究毕业论文.doc》由会员分享,可在线阅读,更多相关《2668.于MVC设计模式的Struts架构的研究毕业论文.doc(33页珍藏版)》请在课桌文档上搜索。
1、毕业设计摘 要电子商务已经成为目前商务领域中非常重要的一种运作方式,如何快速、高效的构建出客户所需的电子商务网站已经成为java web程序员最关心的问题。作为对经典的mvc设计模式的一种具体实现,struts是建立在当前动态网站设计中jsp,servlet,xml等相关开发技术基础之上的一种主流的开发架构,是一种基于mvc的经典mvc设计模式框架。Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个
2、很好的起点。虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式。关键词: Struts;J2EE;MVCABSTRACTThe electronic commerce already becomes present commerce domainCentral Africa often the important one operation way, How fast, highly effective the electronic commerce website whichconstructed the customer to need already becomes j
3、ava the webprogrammer most issue of concern. As the classics mvc design pattern one kind of concreterealization, struts is the establishment in the current dynamicwebsite design jsp, servlet, correlation development technology baseand so on the above xml one kind of mainstream development overheadco
4、nstruction, is one kind based on the mvc classics mvc design patternframe. Struts with Tomcat, Turbine and so on many Apache project is same,operates source software, this is its big merit. Enables thedevelopment the more thorough understanding its interior realizationmechanism. Moreover, speaking o
5、f at present the domestic JSPdevelopment, besides uses the commonly used mark which JSP brings,very little develops own mark, perhaps Struts is a very goodbeginning.Although it now also has manyshortcomings, but it is one kind of extremely outstanding J2EE the MVCrealization way.Key word: Struts;J2E
6、E;MVC目 录摘 要IABSTRACTI1.绪论11.1 选题及研究意义11.2 课题研究的背景及内容12 J2EE知识12.1 J2EE概述12.2 J2EE技术23 Struts框架-基于MVC的设计模式23.1 MVC模式23.2 框架的概念43.3 Struts概述43.3.1 Struts组件43.3.2 Struts工作流程53.3.3 Struts实现MVC的机制74 开发工具的安装和配置84.1 JDK的安装和配置84.2 Tomcat的安装和配置94.3 Eclipse和Myeclipse的安装和配置105 基于Struts的课程查询中心系统开发105.1 需求分析105.
7、2 功能设计115.3 创建视图135.4 构建模型175.5 创建控制器组件215.6 发布和运行课程查询中心系统27总结28参考文献29致谢3031基于MVC设计模式的Struts架构的研究1 引言1.1 选题及研究意义 寻求在软件开发过程中设计级的重用的想法由来已久,这个领域的一个突破就是设计模式的提出。所谓设计模式,实际上就是对以往成功的解决方案的重复利用。就如同一个建筑设计师要设计一栋商用写字楼,一定会借鉴许多在商用楼设计方案中成功的设计经验一样。软件设计领域中的设计模式则是对以往成功软件设计方式的重用,是对专业软件开发人员技术和经验的重复利用,这无疑能够有效地降低软件开发的风险,提
8、高软件开发的效率。 mvc模式是国外用的比较多的一种设计模式,很多的开源项目,就是利用这一设计思想,已将其做成了web框架。web框架有很多,例如:turbine,jetspeed,struts。它们各有特点,而且功能强弱不同,这里只使用struts框架作为研究对象。1.2 课题研究的背景及内容 Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行
9、开发时不用再自己编码实现全套MVC模式,极大的节省了时间,是一个非常不错的应用框架。struts构架一经推出,即受到各java开发群体的广泛重视,从2004年开始逐渐升温,并日渐成为java创建web应用开发的最流行的框架工具,在目前java web程序员的招聘要求中,几乎都提出了对struts的要求,精通struts架构已经成为java web程序员必备的技能。 在这样的一个情况下,我选择了这个课题作为我的毕业设计题目,一是为了掌握一种语言,但更重要的是为毕业以后的工作做更充分的准备。2 J2EE知识2.1 J2EE概述 J2EE是美国Sun公司刚刚推出的一种全新概念的模型,与传统的互联网应
10、用程序模型相比有着不可比拟的优势。 当今许多企业都需要扩展他们的业务范围,降低自身经营成本,缩短他们和客户之间 的响应时间,这就需要存在一种简捷,快速的服务于企业,合作伙伴和雇员之间。 典型的说,提供这些服务的应用软件必须同企业信息系统(EIS)相结合,并提供新的能向更为广阔的用户提供的服务。这些服务要具备以下的特点: a 高可用性:来满足现在的全球商业环境 b 安全性:保护用户的隐私和企业数据的安全 c 可依赖性和可扩展性:保证商业交易的正确和迅捷 通常这些服务是由分布的应用程序组成的,包括前端数据端和后端数据源以及它们之间的一层或几层,这些中间层提供了把商业功能和数据与EIS相结合的功能。
11、这些中间层把客户端从复杂的商业逻辑中分离出来,利用成熟的INTERNET技术使用户在管理上所花费的时间最小化。 J2EE正式降低了开发这种中间层服务的成本和复杂程度,因而使得服务可以被快速的展开,并能够更轻松的面对竞争中的压力。 2.2 J2EE技术J2ee包括的技术如下:1) Enterprise JavaBeans (EJB)EJB定义了服务器方组件编写的规则和,同时定义了如何管理组件和应用程序以及他 们之间如何通信。EJB促进了组件交易市场的发展,在这里,组件提供商可以出售可重用的组件。2) Java Remote Method Invocation (RMI) and RMI-IIOP
12、RMI允许内部通信并且提供和其他服务通信的能力。RMI-IIOP是使用IIOP协议的RMI的精简扩充,可以和corba整合在一起。3) Java Naming and Directory Interface (JNDI)JNDI鉴别组件或者其他网络资源的位置。4) Java Database Connectivity (JDBC)JDBC是一个关系数据库的桥,允许操作关系型数据库5) Java Transaction API (JTA) and Java Transaction Service (JTS)JTA和JTS规范允许组件支持交易保护。6) Java Messaging Service
13、 (JMS)JMS 允许分布式对象异步通信。7) Java Servlets and Java Server Pages (JSPs)Servlets 和 JSPs 是网络组件,观念上符合面向请求/回应计算,象通过http协议和client端通信。8) Java IDL.java IDL是sun公司实现基于java的corba技术。Java IDL 允许和其他语言的应用整合,同时也允许基于corba的分布式计算。3 Struts框架-基于MVC的设计模式3.1 MVC模式MVC是一种设计模式,它强制性地把应用程序的输入、处理和输出分开。MVC应用程序分成三个核心模块:模型、视图和控制器,它们分
14、别担负不同的任务。如图3-1。1)视图视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接受用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。控制器接受用户请求调用模块响应用户请求选择视图显示响应结果视图显示模型状态接受数据更新请求把用户输入数据传给控制器模型代表应用程序状态响应状态查询处理业务流程通知视图业务状态更新选择视图业务处理用户请求状态查询通知数据更新图3-1 MVC模式图2)模型模型是应用程序的主体部分。模型表示业务数据和业务逻辑。一个模型能为多个视图提供数据。由
15、于同一个模型可以被多个视图重用,所以提高了应用的可重用性。3) 控制器控制器接受用户的输入并调用模型和视图去完成用户的需求。当web用户单击web页面中的提交按钮来发送html表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。4)MVC处理过程首先控制器接受用户的请求,并决定应该调用哪个模型来进行处理,然后模型根据用户请求进行相应的业务逻辑处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。5)MVC的优点首先,多个视图能共享一个模型。如今,同一个web应用程序会提供多个用户界面,例如用户希望既能通过浏览器来收发电
16、子邮件,还希望通过手机来访问电子邮箱,这就要求web网站同时提供internet界面和wap界面。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。其次,模型是自包含的,与控制器和视图保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。如果把数据库从Mysql移植到Oracle,或者把RDBNS数据源改变成LDAP数据源,只需改变模型即可。一旦正确的实现了模型,不管数据来自数据库还是LDAP服务器,视图都会正确的显示它们。由于MVC的三个模块相互独立,改变其中一个
17、不会影响其他两个,所以依据这种设计思想能构造良好的松耦合的构件。3.2 框架的概念框架,即Framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展
18、性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的中间层。3.3 struts概述Struts就是在JSP Model2的基础实现了MVC设计模式的WEB Framework。基于Struts构架的WEB应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。3.3.1 struts组件1)控制器组件Struts架构的核心是一个mvc风格的控制器,该控制器实际上是模型组件和视图组件之间的桥梁,是整个web应用程序的“控制中枢”。Struts架构中控制器组件所承担的主要功能如下。接受浏览器
19、客户端的处理请求根据用户的不同请求,调用对应的模型组件来执行相应的业务逻辑。获取模型组件业务逻辑的处理结果。根据当前的状态数据及业务逻辑的处理结果,选择合适的视图组件呈现在浏览器客户端。下面是对这些组件的一些介绍(1) Actionservlet: 在struts架构中controller组件的核心控制器组件是actionservlet,所有客户端提交的用户请求都由它进行处理,actionservlet负责接受到客户端请求后将其分发到相应的action bean处理,再根据处理的结果将不同的显示请求重定向到响应的jsp页面中进行显示。(2) Requestprocessor:包含了struts
20、控制器在处理servlet请求时所遵循的控制逻。在struts中只允许应用中提供一个actionservlet类,可以存在多个requestprocessor类。(3) Actionform在struts架构中,通常使用一种名为actionform的系统状态bean,来实现应用系统的非持久性数据存储和维护功能。具体来说,这种类型的对象主要用于保存用户请求表单中的数据,并可保持其状态的连续性,即在不同的页面间传递这些数据。(4)Actionaction类是struts架构中控制器组件的重要组成部分,它是用户请求和业务逻辑之间沟通的媒介。每个action类型的对象实际上都在充当客户的业务代理。它就
21、像政府部门接待群众来访的接待室工作人员,负责倾听群众的要求,然后按不同的要求,点用不同的业务逻辑处理方法进行处理,即转达给对应的部门进行处理。(5)actionmappingactionservlet负责转发客户端请给相应的action对象进行处理,同时还转发了其他一些相关信息,这种请求和处理动作之间具体的映射关系保存在配置文件struts-config.xml文件中。具体情形是,在系统启动初始化的时候,会对这些配置信息进行处理,系统针对每个元素都创建一个与之对应的org.apache.struts.action.actionmapping类的实例,以供struts应用程序运行期间使用。当ac
22、tionservlet转发请求时,actionmapping实例被作为参数之一传递给相应action对象的execute()方法。2)模型组件在struts架构中并没有为设计和创建模型组件提供现成的框架。java开发人员一般使用javabean来实现模型组件,对应着其作用可以分为两方面,记录系统状态和封装业务逻辑,即包含了业务实体和业务逻辑bean。在设计模型时应该尽量和视图以及控制器之间保持独立。3)视图组件视图组件主要负责为浏览器客户端提供动态页面的显示,是模型的外在表现形式。在mvc设计模式中,用户是通过视图来了解模型状态的,同一个模型可以对应着多个不同的视图。struts的view组件
23、主要表现为jsp页面、用户标记库,有时人们也将映射了用户请求表单的actionform bean作为view组件。这些组件提供了对国际化、接受用户输入的表单数据、表单验证及错误处理等功能的支持。3.3.2 struts工作流程 对于采用struts框架的web应用,在web应用启动时就会加载并初始化actionservlet,actionservlet从struts-config.xml文件中读取配置信息,把它们存放在各种配置对象中,例如action的映射信息存放在actionmapping对象中。当actionmapping接收到一个客户请求时,将执行如下流程。(1)检索和用户请求匹配的ac
24、tionmapping实例,如果不存在,就返回用户请求路径无效的信息。(2)如果actionform实例不存在,就创建一个actionform对象,把客户提交的表单数据保存到actionform对象中。(3)根据配置信息决定是否需要表单验证。如果需要验证,就调用actionform的validate()方法(4)如果actionform的validate()方法返回null或返回一个不包含actionmessage的actionerrors对象,就表示表单验证成功。 图3-2 struts工作流程图(5)actionservlet根据actionmapping实例包含的映射信息决定将请求转发给
25、哪个action。如果相应的action实例不存在,就先创建这个实例,然后调用action的execute()方法。(6)action的execute()方法返回一个actionforward对象,actionservlet再把客户请求转发给actionforward对象指向的jsp组件。(7)actionforward对象指向的jsp组件生成动态网页,返回给客户。3.3.3 struts实现mvc的机制 struts实质上就是在jsp model2的基础上实现的一个mvc框架。在struts框架中,模型由实现业务逻辑的javabean或EJB组件构成,控制器由actionservlet和ac
26、tion来实现,视图由一组jsp文件构成。如图3-3模型JavabeanEJB浏览器Web服务器Struts-config.xml控制器(actionservlet)视图JspActionActionAction图3-3 struts的MVC机制 1)视图视图就是一组jsp文件。在这些jsp文件中没有业务逻辑,也没有模型信息,只有标签,这些标签可以是标准的jsp标签或客户化标签,如struts标签库中的标签。此外,通常把struts框架中的actionform bean也划分到视图模块中。actionform bean也是一种javabean,除了具有一些javabean的常规方法,还包括一些
27、特殊的方法,用于验证html表单数据以及将其属性重新设置为默认值。struts框架利用actionform bean来进行视图和控制器之间表单数据的传递。struts框架利用把用户输入的表单数据保存在actionform bean中,把它传递给控制器,控制器可以对actionform bean中的数据进行修改,jsp文件使用struts标签读取修改后的actionform bean的信息,重新设置html表单。2)模型 模型表示应用程序的状态和业务逻辑。对于大型应用,业务逻辑通常由javabean或EJB组件来实现。 3)控制器控制器由actionservlet类和action类来实现。act
28、ionservlet类是struts框架中的核心组件。actionservlet继承了javax.servlet.http.httpservlet类,它在mvc模型中扮演中央控制器的角色。actionservlet主要负责接收http请求信息,根据配置文件struts-config. xml的配置信息,把请求转发给适当的action对象,如果该action对象不存在,actionservlet会先创建这个action对象。 action类负责调用模型的方法,更新模型的状态,并帮助控制应用程序的流程。对于小型简单的应用,action类本身也可以完成一些实际的业务逻辑。对于大型应用,action充
29、当用户请求和业务逻辑处理之间的适配器,其功能就是将请求与业务逻辑分开,action根据用户请求调用相关的业务逻辑组件。业务逻辑由java bean或EJB来完成,action类侧重于控制应用程序的流程,而不是实现应用程序的逻辑。通过业务逻辑放在单独的java包或EJB中,可以提高应用程序的灵活性和可重用性。 当actionservlet控制器收到用户请求后,把请求转发到一个action实例。如果这个实例不存在,控制器会首先创建它,然后调用这个action实例的execute()方法,action的execute()方法返回actionforward对象,它封装了把用户请求再转发给其他web组件
30、的信息。用户定义自己的action类,即action基类的子类时,必须覆盖execute()方法,在action基类中该方法返回null。4 开发环境的安装和配置4.1 JDK的安装和配置首先要安装JDK,下载后假定装到d:jdk,如图4-1图4-1 JDK安装完成图JDK安装结束后需要配置三个环境变量,分别是“JAVA_HOME”、“path”和“classpath”。环境变量在“我的电脑”右键属性的“高级”选项卡中。点击“环境变量”出现环境变量配置页面。我们要配置的是系统变量,点击新建按钮来新建上面提到的三个环境变量。“JAVA_HOME”变量的变量值是JDK的安装路径。 “path”变量
31、的变量值指到JDK的安装路径的bin文件夹,如图5所示:JDK本身提供编译、运行等命令,这些命令都在JDK安装路径的bin文件夹中,为了能够找到这些命令,要在“path”变量中制定这些命令的位置也就是配置“path”变量的变量值。配置“classpath”变量是为了引入编译“.java”文件时,“.java”文件中使用的基础类库。如果采用JDK来编译“.java”文件,必须配置“classpath”变量。“classpath”变量的变量值为一些“.jar”文件,这些文件是一种压缩文件,最基本的两个是在JDK安装路径的lib文件夹下的“dt.jar”和“tools.jar”文件,这两个文件中包含
32、了最常用的基本类库,一定要引入,当引入的“.jar”文件为多个时,中间用“;”号隔开,除了JDK提供的类库外,如果用到了一些外来类库,也要在“classpath”变量中引入。以上就是JDK安装和配置中要注意的问题,一般学生都不使用集成开发环境,所以都是通过JDK来编译“.java”文件的,所以一定要配置“path”变量和“classpath”变量,如果学生在编译过程中出现问题,很可能是环境变量没配置或配置不正确引起的。4.2 Tomcat的安装和配置然后安装tomcat5.5假设安装到d:tomcat 5.5,如图4-2图4-2 tomcat运行图下面设置环境变量:TOMCAT_HOME=d:
33、tomcat;到c:tomcatbin下,双击startup.bat启动tomcat,打开IE,输入http:/localhost:8080,小猫出现了吧,说明tomcat已经配置成功了。4.3 eclipse+myeclipse的安装和配置首先下载eclipse 3.1安装程序,下载地址:http:/www.eclipse.org/downloads/index.php。下载的是一个压缩包,例如解压到d盘的根目录下,进入eclipse的目录就可以直接运行了。然后下载EnterpriseWorkbenchInstaller_4.1.1GA_E3.1.exe,下载地址图4-3 myeclipse
34、安装图安装完myeclipse后,将其安装目录下的features和plugins目录复制到eclipse的目录下,将其原来的两个同名目录覆盖掉。其实myeclise是eclipse的一个插件。然后就可以将myeclipse删除了。要是长期使用的话,还要对myeclipse进行破解,这里就不进行破解了,试用期也有一个月的时间。环境安装配置完成,运用myeclipse+eclipse+tomcat进行系统开发。5 基于struts的课程查询中心系统开发5.1需求分析课程查询中心主要是为了实现网上课程信息实时动态查询显示的系统。对于没有任何培训目标和意向、初次访问网站的用户,动态页面中应该能够分类
35、列出目前可以提供的所有课程信息,如果用户需要了解某个培训课程的更详细信息,也能够方便的进行查看。而对于熟悉公司产品及服务的老客户,应该提供迅速敏捷的课程信息查询功能,以使客户迅速获取所需要了解的课程信息。本系统需要完成的具体任务如下:课程信息分类显示:在进入课程查询中心主页时,应该能够根据数据库中存放的课程信息分类显示最近开设课程的课程表,例如,程序员就业班所开设课程的情况,实战技能班所开设课程的情况。课程信息查询:客户可以在课程查询中心主页中进行所需课程信息的快速查询。例如,可以按照课程名称、班号、上课地点分别选择符合条件的相关课程信息。这里应该能够支持模糊查询,即用户只需要输入待查询条件的
36、关键字,例如“java”,即可查出所有课程名称中有包含有java的课程信息。课程详情显示:课程表中有关每个课程信息的显示中都应该提供对应的超级链接,在客户单击选择该课程后,可以跳转到有关该课程详细内容的显示页面。如图5-1。课程关键字查询课程分类查询课程详情显示图5-1 系统链接图5.2 功能设计1)课程信息的分类显示该模块实现课程信息的分类显示,例如,所有课程可以分为程序员就业课程培训长期班及实战技能课程培训短期班两大类,在课程查询中心主页用户可以选择查看不同类别中的课程信息,同时用户选择了某个课程后,还可以借助提供的超级链接显示有关该课程更加详细的课程信息。2)课程信息查询该模块为用户提供
37、了分类模糊查询的功能,即用户可以选择按照班号、课程名称以及上课地点等,方便的进行查询,结果中将依据用户设置的查询条件显示不同的课程信息,在查询结果的基础上,用户同样可以借助超链接查看有关该课程更详细的信息。3)数据库设计与实现数据库的需求分析,对应数据表的设计及功能如下:课程基本信息表:存放与每个开设课程对应班级相关的信息。课程类别信息表:存放课程类别的相关信息。4)数据库的逻辑设计根据以上需求分析,在确定了各个表主键字段的基础上,依据表与表之间相关字段之间的联系建立了两个表之间的关系,如图5-2所示。CoursetypeId int Name varchar(20)CourseId int
38、Classno varchar(20)Cousename varchar(20)Price intPlace varchar(50)Time varchar(10)Detail varchar(200)Condition varchar(200)Coursetypeid int图5-2 数据库关系图课程基本信息表用来保存与课程相关的所有基本信息的数据表,是显示课程相关数据信息的依据。字段描述信息,如表5-1:表5-1 课程基本信息表字段名描述类型长度是否允许空是否主键Id记录编号int4否是Classno班号varchar20否否Coursename课程名称varchar20否否Price价格
39、Float8是否Place上课地点varchar50是否Time上课时间varchar10是否Detail课程介绍varchar200是否Condition入学条件varchar200是否coursetypeid类型编号Int4否否数据库中显示如图5-3所示。其中,课程记录中类型编号决定了该课程信息属于哪一种课程类型,这将最终决定课程信息在页面中分类显示的位置。课程分类信息表记录了开设课程的类别信息,依据课程基本信息表中的课程类别编号,可以在该表中确定课程所属类别的名称。图5-3 课程信息图 表5-2 课程分类信息表字段名描述类型长度是否为空是否主键Id分类idInt4否是name名称Varc
40、har20否否数据库中显示界面如图5-4所示。5.3 创建视图使用者用来浏览的第一个界面是coursemain.jsp。这个窗体生成一个表单,表单的antion图5-4 课程分类信息图属性指定为控制器的名称:coursesearch.do,当使用者点击搜索按钮时,窗体的数据就会转交给控制器,控制器调用相应的模块进行处理,返回要查询的数据,将其显示在表单下面的表格里。控制器在响应了查询请求后,从对应的数据库获取到与课程分类及课程的相关信息,然后显示在该页面中。在用户单击该页面某条课程信息的详细图标后,将发出“coursedetail.do?courseid=”请求,同时提交用户所选课程记录的编号,以便于后续控制层和业务逻辑层进行处理。1)coursemain.jsp %if(typeList != null ) for(int i = 0;i a href=courseMain.do?courseTypeId= 请输入关键字: 班号 课程名称 上课地点 课程信息总目录: 班号课程名称价格时间上课地点详细 %if(courceList != null ) for(int i = 0;i %=cours