Struts20框架技术详解Word下载.docx
- 文档编号:22267609
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:102
- 大小:682.23KB
Struts20框架技术详解Word下载.docx
《Struts20框架技术详解Word下载.docx》由会员分享,可在线阅读,更多相关《Struts20框架技术详解Word下载.docx(102页珍藏版)》请在冰豆网上搜索。
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"
struts-config>
data-sources/>
form-beans/>
global-exceptions/>
global-forwards/>
action-mappings>
actionpath="
/helloWorldAction"
type="
zizz.struts.action.HelloWorldActionAction"
forwardname="
view"
path="
/helloworld.jsp"
/>
/action>
/action-mappings>
message-resourcesparameter="
zizz.struts.ApplicationResources"
/struts-config>
在HelloWorldAction.java做如下的修改:
packagezizz.struts.action;
…...
publicclassHelloWorldActionActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse){
request.setAttribute("
hello"
"
zizz"
);
returnmapping.findForward("
}
}
【第7步】创建一个helloworld.jsp文件,如下图所示:
点击finish按钮,修改helloworld.jsp文件
程序代码如下:
html:
htmllang="
true"
head>
/head>
body>
您好:
bean:
writename="
/>
br>
/body>
/html:
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的代码:
filter>
<
filter-name>
struts2<
/filter-name>
filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
/filter-class>
/filter>
filter-mapping>
url-pattern>
/*<
/url-pattern>
/filter-mapping>
【第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
operand2;
String
execute()
throws
Exception
if
(getSum()
=
0)
//
如果代码数和是非负整数,跳到positive.jsp页面
return
"
positive"
;
else
如果代码数和是负整数,跳到negative.jsp页面
negative"
getOperand1()
{
void
setOperand1(int
operand1)
System.out.println(operand1);
this.operand1
getOperand2()
}
setOperand2(int
operand2)
System.out.println(operand2);
this.operand2
getSum()
operand1
+
计算两个整数的代码数和
从上面的代码可以看出,动作类的一个特征就是要覆盖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 框架 技术 详解