J2EE项目实训Struts框架技术——第12章 Struts2框架技术及应用(第4部分)_第1页
J2EE项目实训Struts框架技术——第12章 Struts2框架技术及应用(第4部分)_第2页
J2EE项目实训Struts框架技术——第12章 Struts2框架技术及应用(第4部分)_第3页
J2EE项目实训Struts框架技术——第12章 Struts2框架技术及应用(第4部分)_第4页
J2EE项目实训Struts框架技术——第12章 Struts2框架技术及应用(第4部分)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料第12章 struts2框架技术及应用(第4/4部分)1.1 在web系统中应用struts2 mvc框架技术1.1.1 构建struts2框架的应用环境1、下载struts2框架的完整系统包文件读者可以从apache网站(/downloads.html)下载struts2框架的完整系统包文件,下载后再进行解压可以看到下图12.4所示的系统包中的各个文件。图12.4 struts2框架中的各个目录及文件的图示其中的lib目录为系统包文件的目录,其内的各个文件名称请见下图12.5所示。而docs

2、目录为struts2框架帮助文件所在的目录、apps目录下的各个文件为示例程序。图12.5 系统包文件lib目录中的各个系统包文件的图示2、在eclipse工具中构建出struts2 web应用项目选择eclipse中的【文件】菜单中的【新建】菜单项目中的【项目】菜单项,将出现【新建项目】对话框,在该对话框中选择【web project】项目,并点击【下一步】按钮。将出现下图12.6所示的web应用项目的对话框,在该对话框的【project name】输入条中输入项目的名称为“struts2web”,在该web项目的【context root url】输入条中输入“/struts2web”。最

3、后的输入结果请见图12.6所示。图12.6 在eclipse中构建struts2 web应用项目3、添加所需要的struts2框架有关的各个jar包文件在本示例web项目中添加与struts2框架有关的各个系统jar包文件,这些jar包文件主要为freemarker-2.3.4.jar、struts2-core-2.0.1.jar、commons-logging-1.0.4.jar、 ognl-2.6.7.jar和xwork-2.0-beta-1.jar等。这只需要在eclipse工具中右击web项目中的web-inf/lib目录,并在弹出的快捷菜单中选择【导入】菜单项目,将弹出【导入】向导对

4、话框;在【导入】向导对话框中选中【文件系统】类型的项目后,再点击【下一步】按钮,将出现一个本地文件导入的对话框。在该对话框中定位到struts2框架有关的各个系统jar包文件所在文件目录中、并选中所需要的*.jar包文件。最后的操作结果请见图12.7所示。图12.7 添所需要的struts2 各个jar包文件的结果图示4、在web.xml中添加本项目中所需要的struts2的过滤器组件的定义项目在 struts2框架中是利用org.apache.struts2.dispatcher.filterdispatcher过滤器组件作为前端控制调度器,因此需要对该filterdispatcher过滤器

5、组件进行部署配置,最后的配置结果请见前面的【例12-1】示例文件内容或者参见下图12.8所示的web.xml结果图示。图12.8 在web.xml中添加本项目中所需要的struts2的过滤器设置1.1.2 在项目中构建出各个功能组件1、添加一个包装用户登录表单信息的userinfoactionform组件类由于struts 2框架中的actionform组件类其实是一个普通的pojo组件类。因此,只需要在action组件类中为该actionform组件类对象实例提供get/set属性访问方法,然后要求jsp页面表单中的各个成员属性字段的名称(name)与actionform组件类对象中的成员属

6、性变量的名称相对应,在表单提交到目标action组件类时,就可以直接在action组件类中取得用户提交的http请求参数值。1)在项目中添加userinfoactionform组件类在eclipse工具中右击本web项目的名称,并在弹出的快捷菜单中选择【新建】菜单,再选择下级的【类】菜单项,将出现下图12.9所示的对话框。在对话框的包名称的输入框中输入包名称为com.px1987.struts2.actionform,而在类名称的输入框中输入类名称为userinfoactionform,。最后的输入结果状态请见下图12.9所示的结果内容的图示。图12.9 在项目中添加userinfoactio

7、nform组件类的输入结果的图示2)在该类中增加username和userpassword成员属性变量在该userinfoactionform组件类中增加username和userpassword成员属性变量,并为它们提供get/set属性访问方法,从而产生出一个普通的javabean组件类。最后的结果代码请见下面【例12-14】所示的userinfoactionform组件类的代码示例。【例12-14】userinfoactionform组件类的代码示例package com.px1987.struts2.actionform;public class userinfoactionform

8、private string username=null;private string userpassword=null;public userinfoactionform() public string getusername() return username;public void setusername(string username) this.username = username;public string getuserpassword() return userpassword;public void setuserpassword(string userpassword)

9、 this.userpassword = userpassword;2、在项目中添加一个响应用户登录表单请求的userinfomanageaction组件类1)添加一个userinfomanageaction组件类在eclipse中右击web项目的名称,并在弹出的快捷菜单中选择【新建】菜单,再选择下级的【类】菜单项,将出现下面的图12.10所示的对话框。在对话框中的包名称输入框中输入包名称为com.px1987.struts2.action,而在类名称的输入框中输入类名称为userinfomanageaction,。最后的输入结果状态请见下图12.10所示的结果内容图示。2)编程该userin

10、fomanageaction组件类根据struts2框架中的action类的编程实现的规则,userinfomanageaction组件类继承于com.opensymphony.xwork2.actionsupport类,并重写其中的execute方法、并且也声明一个userinfoactionform类的对象实例oneuserinfo和一个字符串成员属性resultmessage。最终的代码示例请见【例12-15】所示。【例12-15】userinfomanageaction组件类的代码示例package com.px1987.struts2.action;import com.opensy

11、mphony.xwork2.actionsupport;import com.px1987.struts2.actionform.*;public class userinfomanageaction extends actionsupport private userinfoactionform oneuserinfo;private string resultmessage;public userinfomanageaction() public string execute() if(oneuserinfo.getusername().equals(yang) &oneuserinfo.

12、getuserpassword().equals(1234) resultmessage =oneuserinfo.getusername()+您登录成功!; else resultmessage =oneuserinfo.getusername()+您的身份信息无效!; return success;public string getresultmessage() return resultmessage;public void setresultmessage(string resultmessage) this.resultmessage = resultmessage;public u

13、serinfoactionform getoneuserinfo() return oneuserinfo;public void setoneuserinfo(userinfoactionform oneuserinfo) this.oneuserinfo = oneuserinfo;图12.10 添加一个userinfomanageaction组件类的结果图示3、新建struts.xml文件并配置定义userinfomanageaction组件类1)在项目中新建struts.xml配置文件在eclipse工具中右击web项目中的【src】节点,并在弹出的快捷菜单中选择【新建】菜单,再选择下

14、级的【文件】菜单项,将出现下图12.11所示的对话框。在对话框的文件名称的输入框中输入文件名称为struts.xml。最后的输入结果状态请见下图12.11所示的内容图示,eclipse工具同时将自动地将在【src】目录中的struts.xml文件拷贝到项目的web-inf/classes目录中。最后的输入结果状态请见下图12.11所示的内容图示。图12.11 在项目中新建struts.xml文件2)在struts.xml配置文件中添加userinfomanageaction类的配置项目struts2框架中的action组件类需要在struts.xml文件中进行声明,并对每个action组件类规

15、定其名称(name)和类(class)属性。最终的配置结果请见【例12-16】所示,并请注意其中的黑体部分的内容。【例12-16】在struts.xml中添加userinfomanageaction类的配置项目示例 /index.jsp 4、添加实现用户登陆功能的userlogin.jsp页面1)在项目中添加userlogin.jsp页面在eclipse中右击【webroot】节点,并在弹出的快捷菜单中选择【新建】菜单,再选择下级的【jsp】菜单项,将出现下图12.12所示的对话框。在文件名称的输入框中输入文件名称为userlogin.jsp,并在【template to user】的模板类型

16、的下拉式输入框中选择最佳的模板系统设计方案。最后的输入结果状态请见下图12.12所示的内容图示。图12.12在项目中添加userlogin.jsp页面的图示2)设计该页面的内容在userlogin.jsp页面中定义一个基于struts2框架标签技术的页面表单,并在该页面表单中添加username和userpassword文本输入框。最后的结果请参见前面的【例12-7】所示的userlogin.jsp页面内容。5、添加显示响应结果的jsp页面1)在项目中添加显示响应结果的index.jsp页面在eclipse工具中右击【webroot】节点,并在弹出的快捷菜单中选择【新建】菜单,再选择下级的【j

17、sp】菜单项,将出现下图12.13所示的对话框。在对话框的文件名称的输入框中输入文件名称为index.jsp,并在【template to user】的模板类型的下拉式输入框中选择最佳的模板系统设计方案。最后的输入结果状态请见下图12.13所示的内容图示。图12.13 在项目中添加显示响应结果的index.jsp页面2)设计index.jsp页面内容在该index.jsp页面中利用获得action组件类的成员属性resultmessage的值,然后再将其显示输出。最后的结果请见【例12-17】所示的页面内容的示例,并请注意其中的黑体部分的内容。【例12-17】index.jsp页面内容的示例

18、hello world! 6、部署本web应用系统到tomcat服务器中在eclipse中首先实现与tomcat服务器的集成配置后,点击eclipse工具条中的【部署】按钮,将弹出下图12.14所示的项目部署的对话框。在该对话框中将本示例web项目部署到tomcat服务器中。图12.14 将本web应用系统部署到tomcat服务器中7、执行本系统中用户登陆页面userlogin.jsp1)启动tomcat服务器并执行userlogin.jsp页面在浏览器url输入条中输入:8080/struts2web/userlogin.jsp以执行本页面,最后将能够看到下图1

19、2.15所示的页面内容的提示。图12.15 执行userlogin.jsp页面后的结果图示2)正确地进行系统登陆的测试在登陆表单中输入用户名称和用户密码等各个请求的参数后根据前面【例12-15】中所示的userinfomanageaction组件类的代码,应该输入用户名称为“yang”、密码为“1234”;然后再点击页面表单中的【提交】按钮后,将出现下图12.16中所示的处理结果的提示信息。图12.16 正确地进行系统登陆测试的结果提示信息3)不正确地进行系统登陆的测试在登陆表单中故意输入不正确的身份信息(比如将用户名称或者用户密码输入错误)等各个请求的参数后,然后同样再点击页面表单中的【提交

20、】按钮,将出现下图12.17中所示的错误结果的提示信息。图12.17 不正确地进行登陆测试的结果提示信息1.1.3 对项目中的action类进行单元测试1、在项目中添加单元测试junit框架有关的系统包文件为了能够在测试项目中应用junit框架进行测试用例的编程,需要在本测试项目中引入junit框架的系统jar包文件。这只需要右击测试项目,在弹出的菜单中选择【属性】菜单项,将进入到下图12.18所示的对话框。在对话框的“库”标签页中选择【添加外部jar(x)】按钮以添加junit框架的系统jar包文件,详细过程请见下图12.18所示。图12.18 在项目中添加junit有关的系统包文件2、在测

21、试项目中添加测试用例类1)添加测试用例类testuserinfomanageaction右击测试项目,在弹出的菜单中选择【junit测试用例】菜单项,将弹出图12.19所示的【新建junit测试用例】的对话框。在该对话框中的类名称输入框中输入测试用例类的名称为testuserinfomanageaction,输入包名称为com.px1987.struts2.test,并且将基类选择为junit.framework.testcase,被测试的类选择为com.px1987.struts2.test. testuserinfomanageaction。最后的输入结果请参考下图12.19中所示的操作结

22、果。2)选择被测试类中相关的被测试方法的名称在如图12.19中所示的对话框中点击【下一步】按钮,将出现如图12.20所示的对话框,在该对话框中选择被测试类中的相关的被测试方法的名称。请见图12.20中所示的方法选择的结果。最后点击其中的【完成】按钮后,eclipse工具将自动地创建出一个标准的测试用例的模板程序。图12.19 添加测试用例类testuserinfomanageaction图12.20 选择被测试类中相关的被测试方法的名称3)编程该测试用例testuserinfomanageaction类由于struts2框架中的action组件类不再与servlet api紧密藕合,因此在对它

23、进行单元测试时与普通的javabean组件的单元测试没有什么不同。因此,首先构建一个包装用户请求信息的userinfoactionform类的对象实例,并对其中的各个成员属性进行赋值本测试用例模拟用户正确地进行系统登陆的场景,因此将用户名称设置为yang、用户密码设置为1234;然后再构建出被测试类userinfomanageaction的对象实例,并对被测试类中的被测试方法execute直接进行调用;最后只需要断言并判断被测试方法execute的返回结果是否为所期望的值。最后的结果代码请见【例12-18】中的testuserinfomanageaction类代码示例。【例12-18】测试用例

24、testuserinfomanageaction类的代码示例package com.px1987.struts2.test;import junit.framework.testcase;import com.px1987.struts2.action.*;import com.px1987.struts2.actionform.userinfoactionform;import com.opensymphony.xwork2.actionsupport;public class testuserinfomanageaction extends testcase public void tes

25、texecute() userinfoactionform oneuserinfo=new userinfoactionform();oneuserinfo.setusername(yang);oneuserinfo.setuserpassword(1234);userinfomanageaction userinfomanageaction = new userinfomanageaction();userinfomanageaction.setoneuserinfo(oneuserinfo); string resultmessage = userinfomanageaction.exec

26、ute(); asserttrue(actionsupport.success.equals(resultmessage); 在对struts2框架中的action组件进行单元测试时所应该要注意的问题是,如果在action类中涉及httpservletrequest、httpservletresponse和httpsession等与servlet api紧密相关的对象参数时,则不能采用该方式。因此,在编程struts2框架中的action组件类时,应该尽可能不要与httpservletrequest、httpservletresponse和httpsession等对象进行交互。3、执行该测试用

27、例1)启动并执行该测试用例右击测试用例testuserinfomanageaction类,在弹出的菜单中选择【运行方式】菜单项,然后再选择【junit测试】菜单项。请参考下图12.21所示的操作结果的图示。图12.21 执行testuserinfomanageaction测试用例类的菜单项2)将产生出下图12.22所示的测试结果从下图12.22所示的测试结果中,读者可以观察到对testuserinfomanageaction测试用例类执行过程是正确的。反推断出被测试类userinfomanageaction中的被测试方法execute应该是功能正常的。图12.22 执行testuserinfo

28、manageaction测试用例类的测试结果1.2 本章小结1、本章的学习重点本章以对比的方式为读者介绍了struts2框架系统体系架构及各种资源文件、业务控制器action组件类及拦截器组件技术及应用,最后也还通过具体的实例介绍了如何对struts2框架中的action组件类实施单元测试。因此,对这些方面内容的学习将构成本章的学习重点。由于struts 2框架是通过webwork框架发展起来的,而不是简单地对原有的struts框架进行升级,但在有些技术实现方面又延续了原有的struts框架的一些思想和技术实现。因此,读者在学习本章的内容时,会产生出既陌生又熟悉的感觉。希望读者在学习时要明确他

29、们两者之间的主要差别,并通过具体的项目开发的实践来加深对struts2框架的应用体验。2、本章的学习难点由于本书的重点是介绍struts框架技术,同时也考虑到技术的发展并希望能够引导读者逐步地进行技术更新。因此,在本书中增加了本章的内容,由于本章只是对struts2框架进行了初步的介绍,还不能完整地体现struts2框架的各个方面的技术特性。从只对本章所涉及的内容来看,主要的学习难点之一应该是struts2框架中的核心配置文件struts.xml中的各个配置标签项目,由于配置标签项目比较多、并且每个标签项目有多个不同的属性,读者要熟悉这些标签项目的具体含义和应用要求;另一个学习难点应该是拦截器

30、组件技术及应用。3、本章的学习要点struts2框架在控制层设计中提供各种拦截器组件技术支持的主要目的,其实是对aop中所倡导的“分离核心关注点和辅助关注点”的设计原则的具体应用,有关aop的内容请读者参考本系列教材中的“软件工程j2ee项目实训spring框架技术”一书中的有关章节。由于struts 2框架仍然定位于j2ee 技术平台中的表示层类型的框架,因此也象原有的struts框架一样,没有对应用系统中的模型层组件提供太多的技术支持和帮助。开发人员仍然需要自己利用javabean组件技术或者ejb组件技术构建应用系统的模型层组件的功能实现。1.3 本章练习1、请描述struts框架有哪些主要的优点?有哪些主要的缺点?2、请描述struts2框架和struts框架、webwork2框架三者之间的关系?它们有什么不同之处?3、struts2框架中的filterdispatcher过滤器有什么作用?如何在web.xml文件中对它进行配置?4、结合图12.1所示的struts2框架的系统架构图示描述struts2框架的主要工作流程?5、struts2框架是如何达到action组件类不再与j2ee servlet容器紧密藕合的设计目标?6、结合具体的程序示例说明str

温馨提示

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

评论

0/150

提交评论