Struts架构学习手册.docx
- 文档编号:3443133
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:22
- 大小:47.79KB
Struts架构学习手册.docx
《Struts架构学习手册.docx》由会员分享,可在线阅读,更多相关《Struts架构学习手册.docx(22页珍藏版)》请在冰豆网上搜索。
Struts架构学习手册
1Struts框架2
1.1为什么需要Web框架2
1.2Struts框架介绍3
1.3Struts结构3
1.4安装和配置Struts5
1.4.1简述5
1.4.2在Web应用程序中使用Struts5
1.4.3Struts配置文件6
1.5进一步讨论Struts组成10
1.5.1ActionServelt11
1.5.2Action类12
1.5.3Struts中的错误处理13
1.5.4ActionForm15
1.5.5ActionForward15
1.5.6ActionMapping16
1.6Struts标签库介绍16
1.6.1Bean标签16
1.6.2Login标签17
1.6.3HTML标签17
1.6.4Template标签18
1.7基于Struts的Web应用程序例子18
2案例分析:
设计与数据访问18
3案例分析:
Web界面18
1Struts框架
前几章里我们看到怎样编写JSP、使用自定义标签以及访问相关数据库。
我们已经已经讨论过怎样跟踪用户,并学习了开发基于JSPWeb应用的多种可选结构。
我们也向你介绍J2EEWeb应用程序的概念,和利用系统级别服务(实例安全性)的Web容器的用法。
当从头构建一个应用时,似乎有许多问题要考虑。
如果我们希望把这些基本特性编入自己的应用里,会有许多代码需要编写。
有容易一些的方法吗?
毕竟,一定有设计得很好的JSPWeb应用已经具有这些特性,那么我们为什么不利用这些已经存在的功能呢?
回答是肯定的,而且也应该这么做。
不是每次都重头开始去开发一个基于JSP的Web应用,重用一个已存在的框架更有意义。
它关注公共的结构问题,提供一个组件库以便任务可以重复执行。
以此为基础,你可以开发你的应用所特有的组件。
这些框架可以在你的机构内开发和重用,也可以使用第三方的框架产品。
然而,只要可能,重用第三方软件是一个好主意,因为如果可以获得已经测试过的、能很容易统一到系统里的第三方软件,将缩短分析、设计、开发和测试周期中的一些枯燥的阶段。
这一章里,我们将看一个基于JSP的Web应用框架产品,ApacheStruts框架。
我们将集中学习Struts的以下内容:
●建立和安装Struts
●Struts结构
●Controller与配置
●指令、映射和转发
●指令表单beans
●标签库
●国际化
我们通过使用Struts框架创建一个应用程序来完成这一章的学习。
1.1为什么需要Web框架
如果你研究任何真实的应用程序,将会发现它的组件可以大致分成两类:
●商业组件
●应用服务
多数情况下,跨不同的应用来重用商业组件是困难的,因为由商业组件提供的功能可能在其他应用里不需要:
它可能是惟一针对你的应用的。
然而,应用服务可以在机构里跨应用重用,跟跨机构一样好,因为它们提供的服务对不同类型的应用都有用。
这些应用服务可能包括请求路由(对一个MVC结构)、错误处理、以通用的方式产生的客户端脚本和已准备好的标签库。
任何可以提供这些类型服务,且能通过与商业组件的协作编进你的应用的软件,可以被称为一个Web应用框架。
很多大型的机构开发内部框架,可以在机构内部被不同的应用开发重用。
然而,一些大公司同很小的机构一样,没有足够的时间和资源开发一个内部框架,而使用第三方框架产品:
不管是商业软件还是开放的免费软件。
这个方法的优势是你可以获得已经开发好的和测试过的软件包,因此可以节省时间、金钱和资源。
在本章,我们将学习一个使用最普遍的第三方Web应用框架:
ApacheStruts框架。
接下来的两章,基于学到的知识,用Struts设计和开发一个实际的应用程序。
1.2Struts框架介绍
Struts是一个开放源代码的Web应用框架,基于MVC设计模式,使用servlet和JSPAPI建立,可以用来构建复杂的Web应用。
它允许我们分解一个应用程序的商业逻辑、控制逻辑和表现逻辑的代码,使它的重用性和维护性更好。
Struts框架是Jakarta工程的一部分,由Apache软件基金会管理。
Struts可以从http:
//jakarta.apache.org/struts站点下载。
Struts框架提供以下服务:
●作为MVC结构中的controller的servlet。
●JSP里用于bean管理、HMTL和JavaScript生成,模板处理和流程控制的JSP标签库。
●用于国际化消息的框架。
国际化你的Web应用,意味着你的Web应用在使用时可以让用户以喜爱的语言来显示。
这意味着你需要创建一个应用资源文件,包含每种语言的信息。
●一个JDBC的实现来定义数据源和数据库连接池。
●一个通用的错误和异常处理机制,包括从一个应用程序资源文件读取错误信息。
●XML语法分析。
●文件上载工具。
●注册机制。
本章的其余部分,我们将解释怎样使用其中的很多特性,我们也将通过一个案例学习使用它们来结束本章。
1.3Struts结构
让我们从顶部开始。
Struts使用MVC结构;图1.1所示的逻辑图描述了框架的高层结构。
我们现在讨论图中的每个元素。
一个基于Struts的应用程序的表示层(view)使用Struts标签库(taglibs)构建。
来自客户的请求被传递给叫ActionServlet的servlet,它作为controller。
使用了Struts的应用程序,所有需要通过框架的请求都通过ActionServlet传递。
这个ActionServlet把数据从请求传递到ActionFormJavaBean。
ActionForm是代表从一个表单View组件输入数据的JavaBean。
这些表单由JSP用Strutshtml标签库产生。
这个bean由ActionServlet生成,带request参数,它还请求ActionForm来验证用户提交的数据的合法性。
ActionServlet通过定义一组ActionMapping来配置。
一个ActionMapping是一个对象,它将请求中的URL映射到由应用程序开发者提供的处理请求组件。
ActionServlet和ActionMapping的配置在XML配置文件中完成。
专用的应用程序用于处理请求的组件叫Action类。
在MVC结构中,它们代表模型。
它们可能用于验证用户输入的合法性,假如在信息处理过程中出现了应用程序错误,Action类可以创建一个error对象的实例,然后保存在HTTPrequest对象中。
如果在Action类中的逻辑成功地被执行,类给Controller传递一个ActionForward对象,代表所需的描绘响应的JSP。
ActionForward有两种:
专门转发给特定的Action类或全局转发(任何一个Action类可以把这些ActionForwards转给Controller)。
1.4安装和配置Struts
1.4.1简述
在Jakarta的Web站点http:
//jakarta.apache.org/struts可以下载Struts源码和二进制代码的最新版本。
本节印刷时,最后的发行版本是Struts1.0。
建议你下载这个版本的二进制发行文件,它是压缩文件。
一旦你下载了压缩文件并在本地文件系统中的某文件夹中解压了文件内容,在文件夹中应该包括以下两个文件夹:
●lib这个文件夹包括struts.jar文件、Struts自定义标签的标签库描述文件(tld)和上一节提到的Struts配置文件struts-config.xml的文件类型定义(DTD)。
●Webapps这个文件夹包括关于例子应用程序以及Struts文档的Web应用程序卷文件(WAR)。
1.4.2在Web应用程序中使用Struts
要在你的Web应用程序中使用Struts框架,要执行以下步骤:
1、当编译你的Java类,特别是Action类时,确保struts.jar文件出现在你的CLASSPATH环境变量指定的Struts软件的lib目录中。
当你开发了一个使用Struts的新Web应用程序时,在WEB-INF文件夹的lib子文件夹中放置一份struts.jar的拷贝。
2、把在Struts目录lib文件夹下的所有标签库描述符文件拷贝到你的Web应用程序的WEB-INF文件夹下。
3、修改Web应用程序部署描述文件(web.xm.l),声明StrutsActionServlet,并把必需的请求映射到ActionServlet,如下所示:
--
--StandardActionServletMapping-->
上面从web.xml文件中截取的一段代码用名字声明了ActionServlet,并映射以.do结尾的请求URI到ActionServlet中,
低的整数比高的整数要先装入,因此,这个servlet应该是第二个装入。
ActionServlet有一个初始化参数的host文件。
如果没有指定,所有的参数用默认值。
更详细的信息请参考http:
//jakarta.apache.org/struts/userGuide中的Struts文档。
4、修改web.xml来声明为在JSP中使用的Struts标签库位置的逻辑名,如下所示:
上面摘录的代码把Strutsbean、html、logic、template标签的标签描述文件分别映射到逻辑的URI/bean、/html、/logic、/template中去。
这意味着在JSP文件中可以使用这些标签库。
<%@tagliburi="/bean"prefix="bean"%>
<%@tagliburi="/html"prefix="html"%>
<%@tagliburi="/logic"prefix="logic"%>
<%@tagliburi="/template"prefix="template"%>
5、需要创建一个Struts配置文件struts-config.xml,它包括关于Web应用程序的ActionMapping信息、JDBC数据源信息、ActionFormBean信息和全局转发。
把它复制到你的Web应用程序的WEB-INF目录下。
接下来我们会讨论这个配置文件的内容,并会为我们基于Struts的例子应用程序创建一个配置文件。
1.4.3Struts配置文件
1.4.3.1简述
在StrutsMVC模型的controller元素有以下组成部分:
●ActionServlet(controller的主要组成部分)
●ActionMapping对象
ActionServlet是controller元素的主要组成部分,负责分配请求。
为了完成这一任务,它需要关于哪个请求分别到哪个组件去处理的请示。
换句话说,需要知道关于特定请求的映射,基于URL把请求映射到处理请求的组件上去。
这种映射信息保存在ActionMapping对象中。
ActionMapping在Struts配置XML文件中定义,由应用程序开发者提供。
在启动时,由
ActionServlet装入。
配置文件的名字和位置作为给ActionServlet的初始化参数来定义。
如果没有指定,默认的是../WEB-INF/struts-config.xml文件。
这个文件也定义了JDBC数据源、ActionFormbeans和全局转发。
也可以用程序代码强迫ActionServlet重新装入这个配置信息。
配置文件的根元素是
这个配置文件用于定义下列信息:
●ActionFormbean。
每个bean在
●ActionMapping。
指令定义放在
●全局转发。
可以为JSP页面定义全局转发,在应用程序中使用大量的全局转发。
每个全局转发在
●JDBC数据源。
也可以在这个配置文件下配置与外部数据库的连接。
每个数据源在
这些元素依次成组地放在Struts配置文件的
通过构建一个struts-config.xml文件,我们依次看一看,怎样配置这些内容。
1.4.3.2学习一个Struts配置文件的范例
让我们从顶层
现在让我们配置一个表单bean。
1.4.3.2.1配置ActionFormBean
正像我们已经注意到的,ActionFormbean被ActionServlet用于保存request参数。
这些bean有与HTTPrequest参数的名字相对应的属性名。
Controller从request参数创建ActionFormbean的实例,然后把该实例传递给Action类。
ActionFormbean在配置文件中用
表1.1是这个元素的属性。
表1.1:
元素属性
描述
className
这是由Struts创建ActionFormbean时使用的类的全限定名。
默认通常是org.apache.struts.action.ActionFormBean,尽管如果愿意的话,我们可以定义自己的bean类。
name
在它相关联的范围内表单bean的名字(换句话说,就是request/session对象的保存该bean的属性名),这个属性用于把bean与ActionMapping关联起来。
type
类的全限定名(包括包名)
下面从配置文件范例中摘录的一段显示了怎样声明表单bean:
这是用empForm名在其关联的范围内声明了一个com.example.EmployeeForm类型的表单bean,下一节我们将学习怎样把这个bean映射到一个ActionMapping上。
1.4.3.2.2配置ActionMapping
ActionMapping对象用于把到来的请求URL映射到Action类,把ActionForm与Action类关联起来。
ActionServlet内部保存这个映射,当请求到来时,通过考察请求URI,把控制传送到一个合适的Action类的一个实例。
所有的Action类用perform()方法来实现应用程序专用的代码。
这个方法返回一个ActionForward类的实例,它包含已转发响应的目的资源名字。
ActionMapping用
表1.2:
元素属性
描述
path
相对于Action类的路径
name
该属性定义了与这个指令关联的ActionFormbean的名字,由Action类使用。
这与用于在
type
根据这个映射,Action类链接的合法全名
scope
值为request或session,用以指明ActionFormbean的作用范围
prefix
用于request参数与bean属性匹配的前缀
suffix
用于request参数与bean属性匹配的后缀
attribute
假如与前面描述的name属性不同,这是保存ActionFormbean的request或session范围属性的名字
className
被Struts用于创建ActionMapping对象的类的全限定名,默认为org.apache.struts.action.ActionMapping类。
但如果需要,可以扩展这个类,定义自己的类,来创建这些ActionMapping对象。
input
相对于输入表单的路径,如果遇到一个bean的合法性错误,要返回给该输入表单。
unknown
如果这个属性的值设为true,该指令用作请求URI的默认指令,因为没有定义ActionMapping。
validate
如果这个属性的值设为true,在对Action类实例调用perform()之前,ActionServlet将在ActionFormbean上调用validate()方法来进行输入合法性检查。
我们定义从Action类来的响应被转发到的资源的逻辑名。
用在ActionMapping类中的定义的findForward()方法,这个Action类可以通过名字访问转发。
该方法用代表转发名的字符串作为参数,返回给ActionServlet一个findForward类的一个实例。
表1.3:
属性
描述
className
ActionForward的全限定类名。
这是一个隐含属性,默认的值是传递给ActionServelt的初始参数值。
如果没有指定,默认值为org.apache.struts.action.ActionForward。
一般情况下,总是用默认实现类。
name
逻辑名。
通过它,Action类可以访问这个ActionForward。
path
到要转发的响应资源的相对路径。
redirect
如果设为true,ActionServlet用sendRedirect()方法转发资源,否则在请求分发器上用forward()方法。
(?
forwar与sendRedirect有什么区别?
)
下面摘录的片段展示了典型的
type="com.example.ValidateEmployeeAction" name="empForm" scope="request" input="/inputContent.jsp"> 这个映射用com.example.ValidateEmployeeAction类型的Action类匹配到路径/validateEmployee。 一个逻辑名为empForm的request范围的表单bean与这个映射关联。 到这个产生原始请求的表单页面的相对路径是/inputContent.jsp,而局部转发定义为susscess,它从Action转发响应到/outputContent.jsp。 1.4.3.2.3配置全局转发 全局转发用 可以对ActionMapping的findForward()方法通过名字访问这些转发。 下面摘录的片段展示了全局转发声明: name属性简单地定义了全局转发的名字,path给出了目标URL的相对路径。 1.4.3.2.4配置JDBC数据源 JDBC数据源可以在配置文件中在 用 表1.4: 元素属性 描述 type 实现JDBC扩展API接口的类的名字 description 对这个数据源的描述 autoCommit 用这个数据源创建的连接,默认为自动提交模式 driverClass 被数据源使用的用于实现JDBC驱动程序接口的类 key 被Action类使用的名字用于查找这个连接 loginTimeout 数据库注册超时的值 maxCount 连接到这个数据源的最大连接数 minCount 需要创建的最少的连接数 password 访问数据库的口令 readOnly 创建的连接的只读状态 user 访问数据库的用户名 url JDBCURL的值 下面摘录的片段展示了怎样用这些属性在Struts配置文件中定义一个数据源。 autoCommit=”f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts 架构 学习 手册