




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章STRUTS实现MVC设计在前一章,通过实现“电子会议厅”系统,我们对MVC的实现过程已经比较清楚了。在这个结构的实现中,借助ECLIPSE环境提供的创建向导,可以建立JSP、SERVLET和JAVABEAN组件,同时随着SERVLET的创建,WEBXML文件实时地描述了视图与控制器之间的关系。然而在WEB开发应用中,为了提高软件开发的速度和效率、使得软件开发更加容易,开发者需要构思一个软件应用的框架。STRUTS便是一个基于J2EE平台的开源MVC框架方案,它采用了MVC模式把SERVLET、JSP、JAVABEAN等元素组织起来,使它们协同工作。在利用STRUTS框架开发MVC的过程中,开发者只需要理解该框架实现MVC结构的原理,依据其开发向导设计各个组件即可,无需全程编码实现MVC结构,节省了时间,提高了开发效率。这一章将围绕下面的主题进行讲述,为读者演示STRUTS框架的设计过程。本章内容包括在ECLIPSE环境中添加STRUTS支持理解配置文件的含义STRUTS组件分析及创建STRUTS项目的实现61实例介绍在用STRUTS框架实现MVC结构之前,我们先了解一个项目的运行过程,以便明确实现过程的细节。鉴于初次学习STRUTS,所以案例比较简单。随着STRUTS框架的讲解和设计,在后面的小节中案例会逐步复杂起来,读者会进一步了解STRUTS的实现过程。一个应用背景假设用户在客户端完成关于图书信息的录入,服务器端获取信息后给客户一个反馈,以新的页面显示客户录入的图书信息。运行结果如图61所示。图61图书信息的录入与反馈按照MVC的处理方式实现这个过程很简单视图部分仅为两个JSP页面,一个用于录入信息,一个用于显示信息;控制器部分用来从录入界面接收数据,存储到内置对象里并交给视图页面显示即可;由于数据较少,模型部分甚至没有必要去设计。现在要借助STRUTS框架实现这个过程,实际上还是围绕MVC中的三个模块进行设计,只是要明确STRUTS架构与MVC各模块的对应关系。62STRUTS框架结构STRUTS最早是作为APACHEJAKARTA项目的组成部分来开发的,目的在于改进和提高JAVASERVERPAGESJSPS、SERVLET、标记库以及面向对象的技术水准。目前STRUTS很好地解决了早期使用JSP和SERVLET进行开发时遇到的问题,成为一个独立的WEB应用程序的开发框架。可以通过HTTP/STRUTSAPACHEORG网站了解STRUTS的详细信息,并且在HTTP/STRUTSAPACHEORG/DOWNLOADHTML中可以获得STRUTS的发行包,以便获得其功能。621STRUTS的工作流程服务器启动后,STRUTSWEB会根据配置文件WEBXML加载ACTIONSERVLET,并读取配置文件STRUTSCONFIGXML的内容到内存;客户端发出请求,控制器根据配置将请求提交到对应的逻辑处理单元;处理单元实例化表单数据,接收客户端数据,在执行特定方法中的代码段后,向控制器返回处理结果;控制器根据处理结果会得到页面的URL,并交给客户端进行显示。根据对STRUTS工作流程的描述,读者可以深切地体会到MVC的处理方式,图62展示了STRUTS的工作流程,现在的任务是要明确图中各个环节的具体含义和实现者。图62STRUTS工作流程在图62中出现了几个新的概念,下面逐一介绍。控制器用于接收客户端发来的请求,按照STRUTSCONGFIGXML文件中的配置分配工作。逻辑处理单元用客户端的请求数据初始化表单属性,即实例化表单数据,再根据事务逻辑完成具体的处理工作。数据模型泛指用于存储或处理数据的BEAN,但这里特指STRUTS中用来存储客户端请求数据的BEAN,即ACTIONFORM类。视图URL当处理单元完成任务后,会给控制器返回一个ACTIONFORWARD对象,控制器就能根据它找到对应视图的URL,将结果返回给客户端浏览器。与前面所讲的MVC设计不同的是控制器有且仅有一个,归STRUTSWEB所共有;当不同的请求到达时,由这个控制器再把任务分配给具体的业务处理单元,所以业务单元是多个且具有针对性的,如图63所示。在后面的设计中,处理任务转移到了对逻辑处理单元的设计而不是对控制器的设计。在有的参考书中往往把这个设计归纳到对控制器的设计范围内,按照MVC的设计理念以及与STRUTS实现结构的对应关系,这个说法也是合理的,只要读者能够深刻理解STRUTS的工作流程,在实现过程中遇到什么样的设计概念并没有什么影响。图63控制器的工作方式622STRUTS的组件结构基本组件包从图62中可以看出,实现STRUTS结构的工作由各环节紧密配合来完成,每一步工作都需要具体的实施者。面向对象的程序设计将每一份工作交给相关的类或接口完成,所以STRUTS结构的实现也必然由若干个类协同完成,即STRUTS的组件包。目前STRUTS的最新版本是2011年5月5日发布的STRUTS223版本,包含了若干个开发STRUTS的基本组件包,同时提供了很多可扩展的组件包用于在STRUTS架构上构建其它WEB层的应用系统。在后面的设计中我们将直接利用MYECLIPSE71软件提供的STRUTS功能完成设计,由于该版本提供了对STRUTS11STRUTS13版本的支持,所以下面对这个系列中涉及到的几个基本组件包做一个说明。在对项目添加了STRUTS功能支持后,读者可以对照下面的讲解查看项目的库结构。ORGAPACHESTRUTSACTION控制整个STRUTS运行的核心类、组件基本都在这个包中;ORGAPACHESTRUTSACTIONS提供客户的HTTP请求和业务逻辑处理之间的特定适配器转换功能;ORGAPACHESTRUTSCONFIG提供了对配置文件STRUTSCONFIGXML元素的映射;ORGAPACHESTRUTSUTIL为了更好地支持WEBAPPLICATION的应用,该包提供了一些常用服务的支持,如CONNECTIONPOOL、MESSAGESOURCE等;ORGAPACHESTRUTSTAGLIB是一个客户标签类的集合,提供了五个标签库,即HTML、BEAN、LOGIC、TEMPLATE和NESTED。在构建用户界面时,使用标签可以解决JSP代码量大、难以阅读和维护的问题。ORGAPACHESTRUTSVALIDATOR用于对表单数据进行验证。几个重要的核心类接下来我们要了解几个实现STRUTS架构的核心类(也称核心组件),它们是STRUTS结构的实现者,在工作流程中担任重要角色,对它们的认识和了解是设计工作的基础。ACTIONSERVLET继承于JAVAXSERVLETHTTPHTTPSERVLET类,在STRUTS中扮演控制器的角色。它可以根据配置文件的描述将任务提交到适当的处理器,在WEBXML文件中可以看到对它的声明。ACTION协助ACTIONSERVLET完成业务操作,实现了请求与业务逻辑的分离。通常的做法是定义用户类继承于ACTION类,重写这个类的EXECUTE方法,在EXECUTE方法中编程完成处理逻辑。STRUTSCONFIGXML配置文件对项目中所有的ACTION组件进行了描述,供控制器ACTIONSERVLET进行选择和任务分配。ACTIONFORM其主要功能是为ACTION的操作提供与客户表单相映射的数据。通常的做法是定义用户类继承于ACTIONFORM类,以BEAN的形式定义客户端所提交的各种数据。设计ACTION的时候,往往将它与某个ACTIONFORM对象关联起来,以便通过GETXXX方法提取用户数据。设计者还可以重写其VALIDATE方法以便对用户数据进行校验。ACTIONMAPPING代表当前ACTION的配置信息。该对象是STRUTS依据配置文件创建的,其各个属性在STRUTSCONFIGXML文件中进行配置。ACTIONFORWARD对应URL地址,其它组件可以通过ACTIONFORWARD的名称找到其对应的URL地址,并把控制转移到该URL。63STRUTS实例设计介绍了STRUTS的工作流程及核心类之后,下面针对图书信息实例实现STRUTS设计。FOLLOWME请跟着小向导做一做建立普通的WEB项目,并为项目添加STRUTS支持。建立一个名为STRUTS_BOOK的WEB项目,右键单击项目名,选择“MYECLIPSE”“ADDSTRUTSCAPABILITIES”选项,弹出添加STRUTS支持的窗口,如图64所示。图64为项目添加STRUTS支持在这个窗口里需要配置一些参数,具体含义如下STRUTSCONFIGPATH用来存放STRUTSCONFIGXML配置文件的路径。ACTIONSERVLETNAMEACTIONSERVLET实例的对象名称。ACTIONSERVLET是STRUTS中MVC结构中惟一的SERVLET类,起控制器的作用,用以接收客户端的请求,并选择相应的ACTION处理请求,最后把执行结果回送给客户端。这里选择了默认的实例名称ACTION。URLPATTERNACTION请求的形式,这里为DO的默认方式。BASEPACKAGEFORNEWCLASSES和DEFAULTAPPLICATIONRESOURCES分别表示STRUTS组件存放的路径和STRUTS应用资源名称。设置好页面参数后,点击“完成”按钮,即完成了STRUTS工程的建立,此时的项目结构如图65所示。图65添加STRUTS支持后的项目结构读者可以展开STRUTS12LIBRARIES目录查看STRUTS的包结构,与622小节的讲解进行对照。在这个项目结构中有两个很重要的配置文件WEBXML文件和STRUTSCONFIGXML文件。在以后的设计中,相关的设置会反映到配置文件中,STRUTSWEB也是依据配置文件进行工作的。WEBXML文件的核心配置如下12ACTION3ORGAPACHESTRUTSACTIONACTIONSERVLET45CONFIG6/WEBINF/STRUTSCONFIGXML78910ACTION11DO12从配置文件中可以看出元素定义了SERVLET实例一个名为ACTION的SERVLET。其中有一项比较重要的初始化参数CONFIG,指明了STRUTS的配置文件的名称和所在的位置;元素建立SERVLET映射。这个SERVLET处理的URL是以DO为结尾的用户请求。WEBXML文件相当于在STRUTS项目中作了如下说明凡是以“DO”形式发送到WEB项目中的请求,全部调用ACTION所代表的ACTIONSERVLET处理,所以我们把ACTIONSERVLET称为STRUTS中的控制器。STRUTSCONFIGXML文件的内容如下123456789此时的配置信息还没有生成,随着STRUTS其他核心组件的创建,这些配置会随之变化。详细的参数意义及配置在后面讲解。建立STRUTS核心组件JSP页面。现在开始进入MVC的设计过程,首先从视图部分JSP页面开始这个实例涉及到两个视图,分别起名为INPUTJSP和DISPLAYJSP。STRUTS提供了建立STRUTS组件的便捷方法,如图66所示。双击STRUTSCONFIGXML文件,以DESIGN的方式查看,出现了可视化设计界面。图66STRUTS提供的可视化设计界面图的左侧排列出了创建STRUTS核心组件的图标集合,此时在JSP图标上单击一下,随即将鼠标移到设计区域,就会出现图中带加号标志的鼠标图形,再点击一下鼠标便会出现设计窗口,如图67所示。图67创建JSP组件设计窗口中的参数含义如下FILEPATH用来存放JSP文件的路径,系统已设定好。FILENAME创建的JSP文件的名字,这里起名为INPUTJSP。点击完成按钮后,INPUTJSP文件就生成了。以同样的方法再创建一个JSP组件,文件名为DISPLAYJSP,结果如图68所示。图68创建JSP组件后的结果创建完JSP组件后的变化有两个在WEBROOT目录下生成了新建立的JSP文件;在STRUTSCONFIGXML文件的视图显示区可以看到两个JSP组件,此时也可以按照“SOURCE”格式查看代码,没有发生任何变化。接下来补充两个JSP文件的代码。INPUTJSP文件的补充代码如下12请录入图书信息34图书类型56文学评论7小说8诗歌9散文1011书名12作者131415代码说明在系统生成的JSP文件基础之上,将核心代码补充进去,形成符合设计要求的代码文件;在提交表单时,ACTION参数的值是“INPUTDO”,说明客户端URL是以DO的方式进行请求的,它将被ACTIONSERVLET所捕获并处理,与前面所讲的WEBXML文件的配置不谋而合。DISPLAYJSP文件的补充代码如下1278您录入的信息如下9图书类型10图书名称11图书作者12代码说明由于要显示图书信息,所以预先设定这些信息由控制器处理完后存储在REQUEST对象里,那么在显示之前需要从REQUEST对象里取出;由于其他组件还没有设计,尤其控制器部分还没有处理数据,所以此时运行是错误的。建立STRUTS核心组件ACTIONFORM。在MVC设计中,客户端提交的数据我们可以在SERVLET中通过REQUEST对象取出来,再做其他处理。而STRUTS的实现思路是这样的单独设计一个JAVABEAN,通过定义属性描述客户端表单中的数据,是表单的实例化表示,由后面的ACTION组件调用该对象接收这次请求发送过来的表单数据。在STRUTS中,这个JAVABEAN被称为ACTIONFORM组件,除了标准的GETTER和SETTER方法外,还提供了RESET、VALIDAE等方法供其他STRUTS组件调用。创建ACTIONFORM组件的过程如下在STRUTSCONFIGXML文件的可视化界面中,单击鼠标右键,选择“NEW”“FORM”,弹出创建ACTIONFORM组件的窗口,如图69所示。图69创建ACTIONFORM组件设计窗口中的参数含义如下NAMEACTIONFORMBEAN实例的名称,ACTION组件会初始化该实例,用于接收客户端录入的图书信息。鉴于组件的功能,起名为INPUTFORM,即符合对象的命名规则,又通过“FORM”体现了组件的含义。FORMTYPEACTIONFORM组件的类名。这里为“FORMINPUTACTIONFORM”,将类存放在FORM包里,便于管理和维护。OPTIONALDETAILS用于设置ACTIONFORM类的细节,比如该类中需要定义的各个属性。关于图书的信息有三个图书类型、书名和作者,所以ACTIONFORMBEAN中应该有三个属性对应这三个信息。图69中通过点击“ADD”按钮添加了一个属性NAME属性名称。这里是BOOKTYPE,必须与INPUTJSP文件表单中的属性名称一样。TYPE参数在JAVA语言中的类型。由于得到的图书类型是“文学评论”、“小说”、“诗歌”等值,所以选择该类中的属性为STRING类型。JSPINPUTTYPE定义了JSP页面中表单的数据类型。由于在JSP页面中,图书类型由下拉列表提供,所以这里为SELECT类型。添加完一个属性之后,可以通过“ADD”按钮再添加其他两个属性,分别为BOOKNAME、JAVALANGSTRING、TEXT;BOOKAUTHOR、JAVALANGSTRING、TEXT。如此设置完成后,有两个变化STRUTSCONFIGXML文件中添加了关于元素的定义123这个定义是图69中关于NAME和FORMTYPE参数的设置。INPUTACTIONFORMJAVA文件的关键代码如下1PUBLICCLASSINPUTACIONFORMEXTENDSACTIONFORM2PRIVATESTRINGBOOKTYPE3PRIVATESTRINGBOOKNAME4PRIVATESTRINGBOOKAUTHOR5PUBLICACTIONERRORSVALIDATEACTIONMAPPINGMAPPING,HTTPSERVLETREQUESTREQUESTRETURNNULL67PUBLICVOIDRESETACTIONMAPPINGMAPPING,HTTPSERVLETREQUESTREQUEST8PUBLICSTRINGGETBOOKTYPE9RETURNBOOKTYPE1011PUBLICVOIDSETBOOKTYPESTRINGBOOKTYPE12THISBOOKTYPEBOOKTYPE1314PUBLICSTRINGGETBOOKNAME15RETURNBOOKNAME1617PUBLICVOIDSETBOOKNAMESTRINGBOOKNAME18THISBOOKNAMEBOOKNAME1920PUBLICSTRINGGETBOOKAUTHOR21RETURNBOOKAUTHOR2223PUBLICVOIDSETBOOKAUTHORSTRINGBOOKAUTHOR24THISBOOKAUTHORBOOKAUTHOR2526代码说明建立的这个JAVABEAN类是ACTIONFORM类的子类,当客户端浏览器发出“INPUTDO”的请求时,ACTION对象通过这个类的实例INPUTFORM调用SETBOOKTYPE、SETBOOKNAME和SETBOOKAUTHOR方法获取表单中关于图书类别、书名和作者的数据。ACTIONFORM组件还提供了RESET方法用于重置其中的属性,提供了VALIDATE方法用于对表单数据进行验证。建立STRUTS核心组件ACTION。前面已经多次提到,ACTIONSERVLET是STRUTS结构中惟一的控制器,它负责捕获客户端请求,并依据配置信息将任务转交给相应的ACTION组件去处理,当ACTION组件执行完任务后给ACTIONSERVLET返回一个ACTIONFORWARD对象,控制器便能够根据该对象找到相应的URL返回给客户端。当客户端提交了图书信息后,ACTIONSERVLET也需要将具体的任务交给一个指定的ACTION组件,这个ACTION组件会通过ACTIONFORM组件对象(INPUTFORM)获取图书信息,进而在特定的方法中让用户编程完成具体的处理工作。创建ACTION组件的方法有两种在STRUTSCONGFIGXML的可视化编辑界面中点击图标后,在编辑区点击鼠标弹出设置窗口;或者在编辑区单击鼠标右键,选择“NEW”“ACTION”命令弹出设置窗口。创建方法如图610所示。图610创建ACTION组件的方法当选择某一种创建ACTION组件的方法后,弹出如图611的配置窗口。图611配置ACTION组件在这个窗口中,配置信息如下所述PATH请求路径,以“/”开头,但不包括“DO”后缀。与INPUTJSP文件中表单的ACTION属性对应起来,说明凡是以“INPUTDO”发出的请求均由这个ACTION组件来处理。TYPE要建立的ACTION类的类名,这里起名为INPUTACTION,同时又把它放在ACTION包里。OPTIONALDETAILS配置ACTION组件类的各个细节,如FORMBEAN、参数、方法、FORWARDS组件、异常等。图611演示了FORMBEAN的配置NAMEACTIONFORM组件的对象名,在第步中已经声明并配置过了(INPUTFORM是FORMINPUTACIONFORM类的对象),体现了ACTIONFORM组件与ACTION组件的绑定关系。ACTION组件会通过它接收向本ACTION发送的关于图书信息的表单数据。当输入不方便时,可以通过点击“BROWSE”按钮,选择已经声明了的FORMBEAN对象。SCOPEACTIONFORMBEAN的有效使用范围,默认为SESSION,这里选择为REQUEST。INPUTSOURCE指向一个视图。当执行了ACTIONFORM的VALIDATE方法时,如果返回了错误信息,那么STRUTS将会返回到这个INPUT属性所指定的页面中。当然可以通过点击“BROWSE”按钮,选择已经存在的页面视图。温馨提示建立STRUTS核心组件FORWARD。刚刚创建的ACTION组件要负责接收用户信息,并指定另一个视图页面显示图书信息,所以需要为它添加页面跳转功能,而STRUTS的FORWARD组件提供了页面跳转机制。STRUTS中存在两种FORWARD组件全局FORWARD为整个项目范围所使用;局部FORWARD在一个ACTION内有效。下面我们将在图611配置的基础上,继续讲解局部FORWARD的创建过程,全局FORWARD的创建将在实训部分完成。配置完FORMBEAN后,点击图611中的FORWARDS选项卡,弹出图612的配置窗口。图612配置局部FORWARD组件没有配置前的FORWARDS列表中没有任何信息,此时可以点击“ADD”按钮添加局部的FORWARD组件,具体配置信息如下所述INPUTSOURCE属性指定的页面是表单处理出错时要跳转的错误处理页面,这里就选择了INPUTJSP页面,使其重新返回到录入页面。NAMEFORWARD组件的名称,即要转发的名称,这里为RESULT,设计者可以根据见名之意的原则起名。PATH转发的目的页面,可以通过“BROWSE”选择前面已经建立好的DISPLAYJSP页面。这样就建立了针对INPUTACTION这个组件的跳转功能ACTION组件可以依据FORWARD的名称RESULT将ACTIONFORWARD对象返回到SERVLET中,控制器根据ACTIONFORWARD的名称找到其对应的URL地址DISPLAYJSP的URL值,并把控制转移到该URL。观察结果,补充代码。连续创建完ACTION组件和FORWARD组件后,STRUTS项目的结构基本上完整了,发生的变化主要有两个在SRC目录下生成了ACTION包,里面存放着ACTION组件对应的类文件INPUTACTIONJAVA;在STRUTSCONFIGXML文件的视图显示区可以看到各组件的关系图。这些变化可以从图613中直观地看到。图613STRUTS项目的结构变化下面来看两个文件的代码。STRUTSCONFIGXML文件中添加了关于元素的代码。1291011元素定义所有的ACTION组件,能够把ACTIONFORM、ACTIONFORWARD等组件和ACTION组件联系起来。其中的ATTRIBUTE、INPUT、NAME、PATH、SCOPE、TYPE等属性在前面配置ACTION核心组件时都已经很熟悉了,定义在这里的FORWARD元素只能被这个ACTION所使用。温馨提示这个例子比较简单,只涉及到一个ACTION组件,所以在元素中只定义了一组。随着开发的进展,会有多个ACTION组件工作,反映在配置文件里,会有多组被定义。补充INPUTACTIONJAVA文件的代码。开发到这里,INPUTACTIONJAVA文件的代码如下1PUBLICCLASSINPUTACTIONEXTENDSACTION2PUBLICACTIONFORWARDEXECUTEACTIONMAPPINGMAPPING,ACTIONFORMFORM,3HTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSE4INPUTACIONFORMINPUTFORMINPUTACIONFORMFORM5RETURNNULL67分析这个程序,反映了两个要点ACTION组件提供给设计者的“工作空间”是EXECUTE方法,设计者可以在这个方法中编写逻辑代码,以便完成数据处理。EXECUTE方法通过提供的4个参数,既得到了STRUTS的配置信息、用户提交的表单信息,又可以处理请求和响应。第4行代码明确地反映出ACTIONFORM对象获取了表单信息,并被转换成FORM类(INPUTACTIONFORM),初始化给了INPUTFORM对象,在这之后就可以通过INPUTFORM对象获取表单中关于图书的任何信息了。现在的问题是ACTION组件要通过INPUTFORM对象获取图书信息,再把这些信息交给DISPLAYJSP文件去显示。补充EXECUTE方法,代码如下1PUBLICACTIONFORWARDEXECUTEACTIONMAPPINGMAPPING,ACTIONFORMFORM,2HTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSETHROWSIOEXCEPTION3INPUTACIONFORMINPUTFORMINPUTACIONFORMFORM4STRINGBOOKTYPEINPUTFORMGETBOOKTYPE5STRINGBOOKNAMEINPUTFORMGETBOOKNAME6STRINGBOOKAUTHORINPUTFORMGETBOOKAUTHOR7REQUESTSETATTRIBUTE“BOOKTYPE“,BOOKTYPE8REQUESTSETATTRIBUTE“BOOKNAME“,BOOKNAME9REQUESTSETATTRIBUTE“BOOKAUTHOR“,BOOKAUTHOR10RETURNMAPPINGFINDFORWARD“RESULT“11代码说明通过FORM类中定义的GETXXX方法获取表单中的图书信息;将信息存储到REQUEST对象里,为显示视图提供数据,存储的关键字名称与前面编写的DISPLAYJSP文件相呼应;依据FORWARD组件的名称(RESULT),返回到SERVLET中,再根据配置信息获取DISPLAYJSP文件的URL,交给客户端显示。到此,STRUTS项目的配置和编写全部完成,用户可以部署该项目,完成测试了。温馨提示在测试这个项目的时候,可能不会正确显示汉字,请读者通过调试的手段判断问题所在,并且在必要的位置上进行编码处理,以便能够正确显示信息。64利用STRUTS实现“班级事务发布”模块63小节讲述了STRUTS结构中各个环节的设计,而在实际开发中,有些组件是无需在ECLIPSE环境中一一设计的。比如,视图部分会在其他的工具中开发,只需将文件复制过来即可;又比如,有些用户请求是不传递页面数据的,只需得到处理结果,那么ACTIONFORM组件也不用设计了。在这一小节,我们针对前一章的“电子会议厅”系统,将其中的一个模块“班级事务发布”模块用STRUTS结构实现,体会STRUTS设计中的一些变化。641准备项目结构重新设计这个模块时,只需在前期设计的基础上做必要的改动即可。为了明确设计要素,图614给出了相关视图的逻辑关系及需要实现的设计要素,其中涉及到的视图、BEAN全部来自第5章的设计。图614模块的逻辑结构及实现思路对图614有以下几点说明三个视图的页面设计保留原样,只是根据STRUTS的实现要求,在后面的设计中会改变请求形式。所以只需要将三个文件复制到STRUTS项目中的WEBROOT目录下即可,这也演示了JSP组件的另外一种创建形式。还需要注意一点LEFTJSP仅是页面框架中的一部分,它不能单独存在,所以需要将页面框架中的其他文件也复制过来。根据处理逻辑,设计分为两个阶段进行。图中给出的设计要素因实现情况不同而有所选择,比如第一阶段无需设计ACTIONFORM组件,这将在设计中具体给予说明。在ACTION组件中进行编程时,具体的实现过程仍然调用处理BEAN去完成,所以保留了与SORT和AFFAIR两个表相关的数据BEAN和处理BEAN,只需将SRC目录中的TABLESORT包和TABLEAFFAIR包复制过来即可。由于系统的实现是基于数据库存取的,所以涉及到数据库的连接及操作仍然以BEAN的方式来实现,只需将SRC目录中的DATABASE包复制过来即可。根据上面的分析,在实现这个模块时所做的操作有两步建立一个普通的WEB项目,添加STRUTS支持,使其成为STRUTS项目,同时配置构建路径中关于MYSQL的库文件;将上面所提到的使用资源复制到这个项目的恰当位置。按照这两步操作,形成的目录结构如图615所示。图615STRUTS设计前的项目结构图617第一阶段组件之间的关系642获取事务分类信息的设计根据前面的分析,现在来实现点击“班级事务发布”功能后的超级链接功能。在出现班级事务信息填写页面之前,需要获得事务分类信息,这样可以在下拉列表中供用户选择,所以这里需要将获取分类信息的工作交给一个ACTION组件来完成。由于视图中是通过超级链接向SERVLET发出请求的,没有任何用户数据向控制器提交,所以这个模块无需设计ACTIONFORM组件。整个设计工作分两个环节完成设计组件。图616是设计ACTION组件和FORWARD组件的过程,从中可以清楚地看到每一个细节的设置。图616ACTION组件及FORWARD组件的创建过程要点说明PATH接收“GETSORTDO”形式的请求,所以把LEFTJSP文件中关于“班级事务发布”的超级链接代码改为。TYPE在ACTION包中,增加了SORTLISTACTION类,用于ACTION组件设计逻辑处理代码。FORM选项卡只配置了INPUTSOURCE细节,使其指向LEFTJSP页面。FORWARDS选项卡ACTION组件得到分类信息后,通过“INPUT”名称跳转到信息的录入界面。设计好组件之后,STRUTSCONFIGXML文件中DESIGN视图显示的结果如图617所示,而关于元素的代码如下12678编写代码。编写ACTION组件中关于分类信息的获取代码,其实现过程与前一章中的代码几乎一样,只是在细节上发生了一些变化,读者可以进行对比。SORTLISTACTIONJAVA文件的代码如下1PUBLICACTIONFORWARDEXECUTEACTIONMAPPINGMAPPING,ACTIONFORMFORM,2HTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSE3SORTHANDLEHANDLENEWSORTHANDLE4LISTLISTHANDLEGETSORTS5REQUESTSETATTRIBUTE“SORTLIST“,LIST6RETURNMAPPINGFINDFORWARD“INPUT“7643班级事务发布的设计当第一阶段的任务顺利完成之后,运行结果会出现事务信息录入界面,且下拉列表中的分类信息显示正确。现在来实现AFFAIRS_ADDJSP视图中点击“事务发布”按钮后的功能。由于要提交用户数据供ACTION组件进行存储处理,所以针对录入界面要设计ACTIONFORM组件,以便ACTION组件能够通过FORM对象获取数据进行编程。整个设计工作分两个环节完成设计组件。图618显示了ACTIONFORM组件的设计细节。注意FORMPROPERTIES选项卡中三个属性的设置一定要与视图中的表单数据一一对应。图618ACTIONFORM组件的创建过程图619显示了ACTION组件和FORWARD组件的设计细节。根据配置,需要将AFFAIRS_ADDJSP页面中表单的ACTION属性代码改为ACTION“AFFAIRSADDDO“。图619ACTION组件和FORWARD组件的创建过程设计好组件之后,STRUTSCONFIGXML文件中关于元素的代码如下12678151617从代码中可以看出所有的ACTION组件都在元素中设计,SERVLET就是根据这些配置调用相应的ACTION完成数据处理的。此时STRUTSCONFIGXML文件中DESIGN视图显示的结果如图620所示。图620第二阶段组件之间的关系编写代码。在ACTION组件中设计代码,完成用户数据的获取,并通过处理BEAN完成数据的存储,实现过程与前一章中的代码几乎一样。AFFAIRSADDACTIONJAVA文件的代码如下1PUBLICACTIONFORWARDEXECUTEACTIONMAPPINGM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备运输方案模板 (一)
- 国家开放大学《教育心理学》形考任务1-4答案
- 设计基础教案
- 幼儿园大班《树真好》活动教案
- 财务会计人员的岗位职责(25篇)
- 2025年Android小菜鸡2 个月的面试亲身经历告诉大家如何进入 BAT 等大厂
- 2024-2025学年下学期高二生物沪科版期末必刷常考题之生态系统具有维持动态平衡的能力
- 森林报春的题目及答案
- 2023-2024学年山东省烟台市高二下学期7月期末学业水平诊断数学试题(解析版)
- 2023-2024学年湖南省邵阳市高二下学期期末考试数学试卷(解析版)
- 中职教师数字素养提升策略研究与实践效果分析
- EPC总承包管理实施方案
- 广东省广州市越秀区2023-2024学年五年级下学期数学期末考试试卷(含答案)
- 工程认证背景下软件工程专业实践课程平台研究与建设
- 2024年广东省东莞市事业单位公开招聘教师岗考试题带答案分析
- 浙江开放大学2025年《社区治理》终考测试答案
- 《危险化学品企业动火作业安全管理规定》知识培训
- 云南省大数据有限公司招聘专业技术人员招聘笔试真题2024
- 2025-2030年中国跨境电商零售行业市场现状分析及竞争格局与投资发展研究报告
- 终止妊娠协议书模板
- 2025年光伏产业技能竞赛理论考试题库(含答案)
评论
0/150
提交评论