Struts2ActionResult.docx
- 文档编号:9429709
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:28
- 大小:273.79KB
Struts2ActionResult.docx
《Struts2ActionResult.docx》由会员分享,可在线阅读,更多相关《Struts2ActionResult.docx(28页珍藏版)》请在冰豆网上搜索。
Struts2ActionResult
引子,过渡
1.Servlet+JSP+JavaBean模型:
l•流程凌乱:
Servlet在完成对用户请求的处理后,下一个页面是谁?
如何跳转过去?
这些都是在Servlet里面直接写代码来完成的。
导致Servlet既要处理请求,还要负责页面的流程,使得Servlet功能不够单一,更要命的是很难整体把握整个系统的页面流程,因为流程被分散到各个Servlet里面了。
•数据传递无序:
在Model2模型里面,通常情况下,数据都是使用JavaBean传来传去的,使用上比较麻烦,而且在面临复杂数据嵌套的时候使用JavaBean,常常感觉力不从心。
•缺乏辅助功能:
几乎所有的东西都要程序员从头做起,没有统一的分发调度、验证框架、国际化、本地化、例外消息处理等等。
正当大家感觉痛苦的时候,Struts1勇敢地站出来解决这些问题。
Struts1是一个按照MVC模式开发的轻量级web应用框架,一经推出就很快风靡全球。
对于那些一直在用Servlet+JSP+JavaBean的web开发者来说,Struts1可以帮助他们解决很多问题。
比如:
合理的代码结构划分,各种各样的实用工具框架(如验证框架、国际化框架)等等。
因此,在Struts1普及之后,大多数面试官进行面试的时候,每面必问到Struts1。
那个时候Struts1真可谓一统江湖,在简历上如果没写能熟练使用Struts的话,就好像给自己判了死缓一样。
那么肿么办?
2.Struts1的缺点:
•Action实现类必须继承Struts1中的Action,降低了灵活性。
•在一个应用中,只能使用一个单一的ActionServlet,可能会导致配置冲突
•Action的API同HttpServletRequest和HttpServeletResponse是耦合的,这使得单元测试变得很困难,虽然最后推出了一个StrutsTestCase,但是使用也比较麻烦。
•页面传值的JavaBean必须继承Struts1中的FormBean,而其本质就是个JavaBean,使用起来照样比较麻烦。
•相比Struts2,Struts1没有独立的拦截器模型,使得所有类似面向切面(AOP)的操作都要写成Filter,而Filter在使用和配置上都较弱。
当上面这些问题在Struts1上出现后,逐渐出现了一些在Struts1基础上的改进型web框架。
具有代表性的有Struts2(WebWork)、Tapestry、SpringMVC等等。
其中,最优秀的当然就是我们即将学习的Struts2了。
3.Strtuts2出现
由于前面提到的Struts1的缺点,使得它越来越无法满足开发人员灵活、多变的开发需求,同时开发效率低下也暴露无遗,很多开发人员开始选择其他更优秀的Web框架。
Struts1的开发团队注意到了这个问题,他们也决定要大力改进,或是合并其他优秀的框架。
这个时候WebWork进入了Struts1开发团队的视野,WebWork设计思想先进,功能强大,但是市场占有率并不理想,因此,两个框架决定合并,就得到了现在的Struts2。
事实上Struts2是在WebWork2的基础上进行开发的,Struts2.0实际就是WebWork2.3,它并没有Struts1的血统。
Struts2既拥有WebWork优良的设计和功能,又拥有Struts1的强大品牌号召力,所以在面世之初就引起了web开发者广泛的兴趣。
经过几年的普及,越来越多的新项目都采用了Struts2,而Struts1基本上就是用来维护历史项目了。
作为web开发人员,Struts2几乎是一个必备的框架,其重要性不言而喻了。
4.Struts2是什么
Struts2是一种基于MVC的轻量级的web应用框架。
•所谓框架:
就是能完成一定功能的半成品软件。
在没有框架的时候,所有的工作都要乖乖的从零做起;但是,有了框架,它为我们提供了一定的功能,就可以在框架的基础上做起了,大大提高开发的效率和质量。
•web应用框架,这说明Struts2的应用范围是Web应用而不是其它地方。
换句话说Struts2更注重将Web应用领域的日常工作和常见问题抽象化,为我们提供一个平台,让我们能基于这个平台快速的完成Web应用开发。
•轻量级:
是相对于重量级而言,指的是Struts2在运行的时候,对Web服务器的资源消耗较少,比如CPU、内存等,但是运行速度相对较快。
•基于MVC,说明基于Struts2开发的Web应用自然就能实现MVC,同时也说明Struts2着力于在MVC的各个部分为我们的开发提供相应帮助。
所以称Struts2为一种基于MVC的轻量级的web应用框架。
5.组成部分
WebWork与Struts合并之后,根据功能的细分和设计,拆分出一个叫xwork的部分,用来处理与Web无关的部分,也就是与Servlet无关的部分,比如:
用户数据的类型转换、动作调用之前的数据验证、动作的调用等等。
其余与Web相关的部分,也就是与servlet相关的部分,被称为struts2部分。
因此请注意,此处的“Struts2”可以理解为一个模块,是Struts2框架的一部分,如:
如何接收用户请求的数据,如何跳转到下一个页面等等。
其中struts2部分调用了xwork部分,但是xwork部分是不依赖于Struts2部分的,xwork是完全独立的、纯Java的应用。
6.能做什么
在了解了Struts2是什么和基本有什么过后,一起来看看Struts2究竟可以做什么。
看看Struts2到底有些什么魔法功能,能让我们的Web开发变得更加轻松愉快呢?
•Struts2通过简单、集中的配置来调度动作类,使得我们配置和修改都非常容易。
•Struts2提供简单、统一的表达式语言来访问所有可供访问的数据。
•Struts2提供内存式的数据中心,所有可供访问的数据都集中存放在内存中,所以在调用中不需要将数据传来传去,大家都去这个内存数据中心访问即可。
•Struts2提供在动作类执行的前或后附加执行一定功能的能力,能实现AOP。
•Struts2提供标准的、强大的验证框架和国际化框架,而且与Struts2的其他特性紧密结合。
类似这样的功能很多,不胜枚举。
在Struts2官方文档的首页上,Struts2开发团队列出了Struts2的一些优势,一起来看看:
•简单的建立-直接拷入自带的空项目(struts-blank.war)的各种配置即可。
•改进的设计-代码不直接依赖各种HTTP(如HttpServletRequest)的API。
这样可以使得单元测试简单、高效。
•强大的标签-使用标签可以有效的减少页面代码。
•良好的ajax支持-增加了有效的、灵活的ajax标签,就像普通的标准struts标签一样。
•简单的spring集成-使用spring注入Action依赖的其他bean,而不需要额外的代码。
•强大的结果-除了简单的JSP或Freemarker等标签,还支持JasperReports,JFreeChart和文件下载等,使得这些技术就像在Struts2中内置一样,而不需要其他结合代码。
•POJO(不实现特殊接口或继承特殊父类的普通对象)的forms-不再有struts1的ActionForm。
任何JavaBean都可以用来向Action传入或传出request的参数,甚至二进制的OutputStream等也可以。
•POJO的Actions-Action也不用实现特定的接口或继承特殊的类了。
甚至可以使我们的Action不经过修改,就可以被其他框架重用。
•简单的插件-简单的放入一个jar包,任何人都可以扩展struts2框架,而不需要什么特殊的配置。
Struts2不再是一个封闭的框架,任何人都可以为其添砖加瓦,我们可以通过实现Struts2的某些特殊的可扩展点,比如自定义拦截器、自定义结果类型、自定义标签等等,就可以为Struts2定制我们需要的
功能,而且还可以快速的发布给别人使用,就像Eclipse的插件机制一样,超酷。
•明确的错误报告-Struts2的异常简单而明了,直接指出错误的地方。
•简单的Action测试-不需要模拟HTTP对象就可以直接测试struts2的action。
这使得我们的单元测试非常方便。
•智能的默认-跳过了冗余的设置。
很多框架级对象都有一个默认的值,可以根本不用去关心它们,使用其默认设置就可以完成95%的日常工作。
7.MVC回顾:
在MVC模式中,一个应用被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。
首先看一下模型、视图、控制器各部分的作用
模型(Model):
负责封装应用的状态,并实现应用的功能。
通常又分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单
信息、用户信息等;而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等。
视图(View):
用来将模型的内容展现给用户,用户可以通过视图来请求模型进行更新。
视图从模型获得要展示的数据,然后用自己的方
式展现给用户,相当于提供界面来与用户进行人机交互;用户在界面上操作或者填写完成后,会点击提交按钮或是以其它触发事件的方式,
来向控制器发出请求。
控制器(Controller):
用来控制应用程序的流程和处理视图所发出的请求。
当控制器接收到用户的请求后,会将用户的数据和模型的更新
相映射,也就是调用模型来实现用户请求的功能;然后控制器会选择用于响应的视图,把模型更新后的数据展示给用户。
实战开始
1.动手
第一课先写案例,再讲解原理。
外部环境的搭建,体会如何利用框架来自主学习过程。
1.下载安装jdk,配置环境变量(非常基础):
主要配置JAVA_HOME和path,参考以前的课程内容
2.下载并安装MyEclipe(Eclipse)
3.下载并解压(或者安装)Tomcat,在MyEclipse中配置tomcat。
(推荐6.0以上版本的tomcat)
4.下载Struts2(本教程以Struts2.3.16为例),解压并观察了解其目录
src目录中是Struts2的源代码
lib目录中是Struts2的jar包和struts2依赖的jar包。
docs目录中是Struts2的官方文档,虽然是英文的,但是很多最新最准确的知识都能从这个官方文档里得到。
apps目录中有5个war文件,是Struts2的官方示例,里面是完整的可以运行的web应用。
5.新建WebProject,建立Struts2的配置文件(struts.xml):
将Struts2的空项目(apps)中的配置文件(struts.xml)复制到项目的src目录下。
配置如下:
—
struts.devMode:
是否设置为开发模式 true:
是开发模式,否则不是注:
在开发模式下,修改Struts的配置文件后不需要重新启动Tomcat服务器即生效。
否则修改Struts配置文件后需要重新启动Tomcat服务器才生效。
-->
/hello.jsp
常见常量:
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
"http:
//struts.apache.org/dtds/struts-2.0.dtd">
--指定Web应用的默认编码集.该属性对于处理中文请求参数非常有用,对于获取中文请求参数值,应该将该属性值设置为GBK或者GB2312;
提示:
当设置该参数为GBK时,相当于调用HttpServletRequest的setCharacterEncoding方法.>
--指定Struts2默认的ObjectFactoryBean,该属性默认值是spring.>
--指定Spring框架的自动装配模式,该属性的默认值是name,即默认根据Bean的name属性自动装配.>
--该属性指定整合Spring框架时,是否缓存Bean实例,该属性只允许使用true和false两个属性值,它的默认值是true.通常不建议修改该属性值.>
--该属性指定处理multipart/form-data的MIME类型(文件上传)请求的框架,该属性支持cos,pell和jakarta等属性值,即分别对应使用cos的文件上传框架,pell上传及common-fileupload文件上传框架.该属性的默认值为jakarta.
注意:
如果需要使用cos或者pell的文件上传方式,则应该将对应的JAR文件复制到Web应用中.例如,使用cos上传方式,则需要自己下载cos框架的JAR文件,并将该文件放在WEB-INF/lib路径下.>
--该属性指定上传文件的临时保存路径,该属性的默认值是javax.servlet.context.tempdir.>
--该属性指定Struts2文件上传中整个请求内容允许的最大字节数.>
--该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理.如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开.>
--该属性设置是否通过JAR文件提供静态内容服务,该属性只支持true和false属性值,该属性的默认属性值是true.>
--该属性设置浏览器是否缓存静态内容.当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false.>
--该属性设置Struts2应用是否使用开发模式.如果设置该属性为true,则可以在应用出错时显示更多、更友好的出错提示.该属性只接受true和flase两个值,该属性的默认值是false.通常,应用在开发阶段,将该属性设置为true,当进入产品发布阶段后,则该属性设置为false.>
--该属性设置是否每次HTTP请求到达时,系统都重新加载资源文件(允许国际化文件重载).该属性默认值是false.在开发阶段将该属性设置为true会更有利于开发,但在产品发布阶段应将该属性设置为false.
提示:
开发阶段将该属性设置了true,将可以在每次请求时都重新加载国际化资源文件,从而可以让开发者看到实时开发效果;产品发布阶段应该将该属性设置为false,是为了提供响应性能,每次请求都需要重新加载资源文件会大大降低应用的性能.>
--该属性指定视图标签默认的视图主题,该属性的默认值是xhtml.>
--该属性指定模板文件的后缀,该属性的默认属性值是ftl.该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、Velocity和JSP模板.>
--该属性设置当struts.xml文件改变后,系统是否自动重新加载该文件.该属性的默认值是false.>
--该属性指定Struts2应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文件名以英文逗号(,)隔开.>
--对于某些JavaEE服务器,不支持HttpServletRequest调用getParameterMap()方法,此时可以设置该属性值为true来解决该问题.该属性的默认值是false.对于WebLogic、Orion和OC4J服务器,通常应该设置该属性为true.>
--指定是否缓存FreeMarker模版。
默认值false。
>
--该属性只支持true和false两个属性值,默认值是true.通常无需修改该属性值.>
--该属性指定XSLTResult是否使用样式表缓存.当应用处于开发阶段时,该属性通常被设置为true;当应用处于产品使用阶段时,该属性通常被设置为false.>
--该属性指定Struts2框架默认加载的配置文件,如果需要指定默认加载多个配置文件,则多个配置文件的文件名之间以英文逗号(,)隔开.该属性的默认值为struts-default.xml,struts-plugin.xml,struts.xml,看到该属性值,所以应该明白为什么Struts2框架默认加载struts.xml文件了.>
--设置映射器是否总是选择完整的名称空间。
该属性的默认值时false。
>
--设置Convention插件定位视图资源的根路径。
默认值为/WEB-INF/content>
--Convention插件以该常量指定包作为根包>
--是否从包中搜索Action>
--官方只说明在jboss下需要设置,情况不明-->
--包括哪些jar包中的action。
逗号分割字符串。
>
/_wl_cls_gen.*? jar(! /)? "/> --确定搜索包的路径。 只要是结尾为action的包都要搜索。 > 3、复制Struts2相应的jar包及第三方包。 将空项目(apps\struts2-blank)中lib目录中的除junit和spring-test之外的所有文件复制到项目的WebRoot/WEB-INF/lib目录下 4、修改对应的web.xml,建立struts2的filter(参考struts自带的项目apps\struts2-blank),添加如下配置: 6、在浏览器中对配置好的struts2第一个程序进行访问;访问方式为: ●http: //localhost: 8080/工程名/命名空间/action名字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2ActionResult