Struts20框架技术详解.docx
- 文档编号:9131503
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:102
- 大小:682.23KB
Struts20框架技术详解.docx
《Struts20框架技术详解.docx》由会员分享,可在线阅读,更多相关《Struts20框架技术详解.docx(102页珍藏版)》请在冰豆网上搜索。
Struts20框架技术详解
本文描述了Struts2的框架技术详解,希望对大家有所补益。
第十五章Struts2的框架技术3
15.1MVC思想3
15.1.1ModelI模式和ModelII模式3
15.1.2MVC模式的优势4
15.1.3常用MVC框架及其特征5
15.2Struts2框架技术概述6
15.2.1Struts1和Struts2的对比7
15.2.2Struts1的MVC实现8
15.2.3Struts2的简单实现16
15.3Struts2.0的常用标记21
15.3.1Struts2.0标记列表(TagList)21
15.3.2常用Struts2.0标记的应用23
15.4处理一个form多个submit37
15.5struts.xml常用配置解析41
15.5.1使用
15.5.2action的别名42
15.5.3为action指定参数43
15.5.4 选择result类型44
15.5.5全局result45
15.6验证数据方式46
15.6.1使用validate方法验证数据46
15.6.2使用Validation框架验证数据49
15.7在Action类中获得HttpServletResponse对象的四种方法57
15.8国际化60
15.8.1在Struts2.0中国际化(i18n)您的应用程序60
15.8.2国际化HelloWorld60
15.8.3资源文件查找顺序62
15.8.4参数化国际化字符串63
15.8.5让用户方便地选择语言63
15.9文件上传65
15.9.1上传单个文件65
15.9.2上传任意多个文件68
15.10拦截器概述71
15.10.1记录拦截器和execute方法的执行时间(timer)73
15.10.2通过请求调用Action的setter方法(params)74
15.10.3通过配置参数调用Action的setter方法(static-params)74
15.10.4使用拦截器栈75
15.10.5使用自己的拦截器75
15.10.6拦截器的参数80
第十五章Struts2的框架技术
虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts1而言。
Struts2与Struts1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:
WebWork基础上发展起来的。
从某种程度上来讲,Struts2没有继承Struts1的血统,而是继承WebWork的血统。
或者说,WebWork衍生出了Struts2,而不是Struts1衍生了Struts2。
因为Struts2是WebWork的升级,而不是一个全新的框架,因此稳定性、性能等各方面都有很好的保证:
而且吸收了Struts1和WebWork两者的优势,因此,是一个非常值得期待的框架。
本章是以项目中实际应用为例全面讲解Struts2各个常用知识点。
本章目录
1MVC思想
2Struts2的框架技术概述
3Struts2.0中常用的Tag介绍
4处理一个form多个submit
5struts.xml常用配置解析
6验证数据的方式
7在Action类中获得HttpServletResponse对象的四种方法
8国际化(I18N)
9上传文件
10拦截器
15.1MVC思想
15.1.1ModelI模式和ModelII模式
15.1.1.1ModelI模式
在ModelI模式下,整个Web应用几乎全部由JSP页面组成,JSP页面接收处理客户端请求,对请求处理后直接做出响应。
用少量的JavaBean来处理数据库连接、数据库访问等操作。
ModelI体系结构结合使用JSP页面和JavaBean来开发Web应用程序。
如图1所示
图1:
ModelI模式
ModelI模式的实现比较简单,适用于快速开发小规模项目。
但从工程化的角度看,它的局限性非常明显:
JSP页面身兼View(视图)和Controller(控制器)两种角色,将控制逻辑和表现逻辑混杂在一起,从而导致代码的重用性非常低,增加了应用的扩展性和维护的难度。
早期有大量ASP和JSP技术开发出来的Web应用,这些Web应用都采用了ModelI架构。
15.1.1.2ModelII模式
ModelII下JSP不再承担控制器的责任,它仅仅是表现层角色,仅仅用于将结果呈现给用户,JSP页面的请求与Servlet交互,而Servlet负责与后台的JavaBean通信。
在ModelII模式下,模型(Model)由JavaBean充当,视图(View)由JSP页面充当,而控制器(Controller)则由Servlet充当。
如图2
在ModelII架构中,Servlet作为前端控制器,负责接收客户端发送的请求,在Servlet中只包含控制逻辑和简单的前端处理;然后,调用后端JavaBean来完成实际的逻辑处理;最后,转发到相应的JSP页面处理显示逻辑
图2:
ModelII模式
ModelII是一种设计模式,也称为模型–视图–控制器组件体系结构(MVC)。
15.1.2MVC模式的优势
如图3
图3:
MVC模式
15.1.2.1ModelII体系结构的各种对象包括
@模型对象(Model):
表示Web应用程序的数据元素,用户可与这些数据元素进行交互。
@视图对象(View):
提供模型组件以开发用户界面。
@控制器对象(Controller):
充当应用程序视图对象和模型对象之间的中间对象。
15.1.2.2ModelII体系结构的优点:
如图4
图4:
MVC优点
注意
MVC并不是Java语言所特有的设计思想,也并不是Web应用所特有的思想,它是所有面向对象程序设计语言都应该遵守的规范。
MVC思想将一个应用分成三个基本部分:
Model(模型)、View(视图)和Controller(控制器),这三个部分以最少的耦合协同工作,从而提高应用的可扩展性及可维护性。
对于非常小型的Web站点,如果后期的更新、维护工作不是特别大,可以使用ModelI的模式来开发应用,而不是使用ModelII的模式。
虽然ModelII提供了更好的可扩展性及可维护性,但增加了前期开发成本。
从某种程度上讲,ModelII为了降低系统后期维护的复杂度,却导致前期开发的更高复杂度。
15.1.3常用MVC框架及其特征
目前常用的MVC框架还有如下一些:
1.JSF
准确地说,JSF是一个标准,而不是一个产品。
JSF的行为方法在POJO中实现,JSF的ManagedBean无需继承任何特别的类。
因此,无需在表单和模型对象之间实现多余的控制器层。
JSF中没有控制器对象,控制器行为通过模型对象实现。
作为新兴的MVC框架,用户相对较少,相关资源也不是非常丰富。
JSF并不是一个完全组件化的框架,它依然是基于JSP/Servlet架构的。
JSF的成熟度还有待进一步提高。
2.Tapestry
Tapestry并不是一种单纯的MVC框架,它更像MVC框架和模板技术的结合,它不仅包含了前端的MVC框架,还包含了一种视图层的模板技术,使用Tapestry完全可以与Servlet/JSPAPI分离,是一种非常优秀的设计。
Tapestry具有很高的代码复用性,在Tapestry中,任何对象都可看作可复用的组件。
JSP开发者是真正面向对象,而不是URL解析。
对于对页面要求灵活度相当高的系统,Tapestry是第一选择。
精确地错误报告,可以将错误定位到源程序中的行,取代了JSP中那种编译后的提示。
3.Spring
Spring提供了一个细致完整的MVC框架。
该框架为模型、视图、控制器之间提供了一个非常清晰的划分,各部分耦合极低。
Spring的MVC是非常灵活的,它完全基于接口编程,真正实现了视图无关。
视图不再强制要求使用JSP,可以使用Velocity、XSLT或其他视图技术。
甚至可以使用自定义的视图机制——只需要简单地实现View接口,并且把对应视图技术集成进来。
Spring的Controllers由IoC容器管理。
因此,单元测试更加方便。
缺点也有,如:
Spring的MVC与ServletAPI耦合,难以脱离Servlet容器独立运行,降低了SpringMVC框架的可扩展性。
太过细化的角色划分,太过烦琐,降低了应用的开发效率。
过分追求架构的完美,有过度设计的危险。
15.2Struts2框架技术概述
Struts2以WebWork优秀的设计思想为核心,吸收了Struts1的部分优点,建立了一个兼容WebWork和Struts1的MVC框架,Struts2的目标是希望可以让原来使用Struts1、WebWork的开发人员,都可以平稳过渡到使用Struts2框架。
15.2.1Struts1和Struts2的对比
@Struts1概述
从过去的岁月来看,Struts1是所有MVC框架中不容辩驳的胜利者,不管是市场占有率,还是所拥有的开发人群,Struts1都拥有其他MVC框架不可比拟的优势。
Struts1的成功得益于它丰富的文档、活跃的开发群体。
当然,Struts1是世界上第一个发布的MVC框架:
Struts1.0在2001年6月发布,这一点也可能是使它得到如此广泛应用的主要原因。
Struts1框架以ActionServlet作为核心控制器,整个应用由客户端请求驱动。
当客户端向Web应用发送请求时,请求将被Struts1的核心控制器ActionServlet拦截,ActionServlet根据请求决定是否需要调用业务逻辑控制器处理用户请求(实际上,业务逻辑控制器还是控制器,它只是负责调用模型来处理用户请求),当用户请求处理完成后,其处理结果通过JSP呈现给用户。
对于整个Struts1框架而言,控制器就是它的核心,Struts1的控制器由两个部分组成:
核心控制器和业务逻辑控制器。
其中核心控制器就是ActionServlet,由Struts1框架提供;业务逻辑控制就是用户自定义的Action,由应用开发者提供。
Struts1的程序运行流程如图5所示。
图5Struts1的程序运行流程
@Struts2概述
Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是使用Struts1的设计核心。
Struts2大量使用拦截器来处理用户请求,从而允许用户的业务逻辑控制器与ServletAPI分离。
图6Struts2的体系结构图
Struts2框架的处理流程如下:
✧浏览器发送请求,例如请求/mypage.action、/reports/myreport.pdf等。
✧核心控制器FilterDispatcher根据请求决定调用合适的Action。
✧WebWork的拦截器链自动对请求应用通用功能,例如workflow、validation或文件上传等功能。
✧回调Action的execute方法,该execute方法先获取用户请求参数,然后执行某种数据库操作,既可以是将数据保存到数据库,也可以从数据库中检索信息。
实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求。
✧Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像,也可以是PDF文档或者其他文档。
此时支持的视图技术非常多,既支持JSP,也支持Velocity、FreeMarker等模板技术。
经过上面简要介绍,不难发现,Struts2确实在Struts1上做出了巨大的改进,的确是一个非常具有实用价值的MVC框架。
15.2.2Struts1的MVC实现
简单实现在MyEclipse下开发Struts1Web应用程序
【第1步】打开MyEclipse,新建一个WebProject
【第2步】点击Next按钮,到下一页,输入项目名称,比如StrutsTraining
点击Finish按钮
在PackgeExplorer将会看到刚刚创建的工程,如下图所示
【第3步】点击StrutsTraining,右键,在弹出的菜单当中选择myeclipse,myeclipse的子菜单当中选择“AddStrutsCapabilities...”
在弹出窗口当中选择Struts1.2版本(建议使用1.2版本),并修改“BasePackagefornewclasses”的值为其他包名,如下图所示:
新的目录结构如下图所示:
【第4步】创建一个新的StrutsAction,如下图所示:
点击Next按钮,在Usercase上面填上你需要创建一Action名称,比如HelloWorldAction,Path写上/helloWorld,如下图所示:
【第5步】点击Forward页,点击Add按钮,将弹出如下对话框
在Name当中填入view
在Path当中填入/helloWorld.jsp
点击Add按钮,接着点击Close按钮
【第6步】点击Finish按钮,MyEclipse将会生成HelloWorldAction.java类及修改struts-config.xml文件。
生成的struts-config.xml文件为:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.2//EN""http:
//struts.apache.org/dtds/struts-config_1_2.dtd">
在HelloWorldAction.java做如下的修改:
packagezizz.struts.action;
…...
publicclassHelloWorldActionActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse){
request.setAttribute("hello","zizz");
returnmapping.findForward("view");
}
}
【第7步】创建一个helloworld.jsp文件,如下图所示:
点击finish按钮,修改helloworld.jsp文件
程序代码如下:
htmllang="true">
您好:
writename="hello"/> html> 【第8步】发布应用程序 在发布之前,要配置一下服务器,MyEclipse支持的服务器有多种,以Tomcat6.0为例 配置tomcat需要有三步 1、将tomcatserverEnable 2、 指定tomcat所在的目录 3、 指定JDK路征(注意,tomcat5.5以前的版本必须使用JDK,不能使用JRE) 配置结果如下图所示: 【第9步】在Server的标签当中,点击tomcat,右键,选择ManageDeployments 【第10步】在弹出的对话框当中点击Add按钮,在弹出的对话框当中,选择要进行Deploy的工程,如下图所示: 最后点击Finish按钮完成发布。 假如看不到Servers标签,可以在Windows-->OpenView-->Server,将Server标签页拿出来即可,如下图所示: 【第11步】运行应用程序 【第12步】访问测试页: 15.2.3Struts2的简单实现 开发工具: MyEclipse6 Web服务器: Tomcat6 Struts版本: Struts2.0.11.1 JDK版本: JDK1.5.0_12 J2EE版本: JavaEE5.0 由于MyEclipse6,7目前并不支持Struts2,所以我们需要到struts.apache.org去下载Struts2安装包。 要想正常使用Struts2,至少需要如下五个包。 struts2-core-2.0.11.1.jar xwork-2.0.4.jar commons-logging-1.0.4.jar freemarker-2.3.8.jar ognl-2.6.11.jar Struts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了Struts1.x的方式(当然,Struts2仍然是基于MVC模式的,也是动作驱动的,可能这是唯一没变的东西)。 Struts2实际上是在Webwork基础上构建起来的MVC框架。 我们从Struts2的源代码中可以看到,有很多都是直接使用的xwork(Webwork的核心技术)的包。 所以从技术上来说Struts2是全新的框架。 下面我们就按着编写struts1.x程序的那五步和struts2.x程序的编写过程一一对应,看看它们谁更“酷”。 这个程序的功能是让用户录入两个整数,并提交给一个StrutsAction,并计算这两个数的代数和,如果代码和为非负数,则跳转到positive.jsp页面,否则跳转到negative.jsp页面。 【第1步】安装Struts2 这一步对于Struts1.x和Struts2都是必须的,只是安装的方法不同。 Struts1的入口点是一个Servlet,而Struts2的入口点是一个过滤器(Filter)。 因此,Struts2要按过滤器的方式配置。 下面是在web.xml中配置Struts2的代码: org.apache.struts2.dispatcher.FilterDispatcher 【第2步】编写Action类 这一步和Struts1.x也必须进行。 只是Struts1.x中的动作类必须从Action类中继承,而Struts2.x的动作类需要从com.opensymphony.xwork2.ActionSupport类继承。 下面是计算两个整数代码和的Action类,代码如下: package action; import com.opensymphony.xwork2.ActionSupport; public class FirstAction extends ActionSupport { private int operand1; private int operand2; public String execute() throws Exception { if (getSum() >= 0) // 如果代码数和是非负整数,跳到positive.jsp页面 return "positive"; else // 如果代码数和是负整数,跳到negative.jsp页面 return "negative"; } public int getOperand1() { return operand1; } public void setOperand1(int operand1) { System.out.println(operand1); this.operand1 = operand1; } public int getOperand2() { return operand2; } public void setOperand2(int operand2) { System.out.println(operand2); this.operand2 = operand2; } public int getSum() { return operand1 + operand2; // 计算两个整数的代码数和 } } 从上面的代码可以看出,动作类的一个特征就是要覆盖execute方法,只是Struts2的execute方法没有参数了,而Struts1.x的execute方法有四个参数。 而且execute方法的返回值也不同的。 Struts2只返回一个String,用于表述执行结果。 【第3步】编写ActionForm类 ActionForm也是当然要使用的。 在Struts1.x中,必须要单独建立一个ActionForm类,而在Struts2中ActionForm和Action已经二合一了。 所以在第2步,本例的ActionForm类已经编写完成(就是Action类的后半部分)。 【第4步】配置Action类 这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts20 框架 技术 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)