- 浏览: 229360 次
- 性别:
- 来自: 惠州
文章分类
最新评论
-
woodding2008:
好文,拜读
这个金钱堆砌的互联网时代,也许你根本看不到真相 -
zhaoshaofang:
很好···我开始学习··有用·
一个简单的UDP聊天室 -
JavaScanner:
很不错啊,谢谢转载一份,自己看!
Java导出Excel文件实例
作者:务实
基本概念
Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用。和其他的java架构一样,Struts 也是面向对象设计,将MVC模式"分离显示逻辑和业务逻辑"的能力发挥得淋漓尽致。Structs 框架的核心是一个弹性的控制层,基于如 Java Servlets,JavaBeans,ResourceBundles与XML等标准技术,以及 Jakarta Commons 的一些类库。Struts有一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。基于struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是一个传统 MVC设计模式的一种变化类型。
Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,如 JDBC / EJB ,以及其它第三方类库,如 Hibernate / iBATIS ,或者 Object Relational Bridge(对象关系桥)。在视图层,Struts能够与JSP,包括 JSTL 与 JSF,以及 Velocity 模板,XSLT 与其它表示层技术。
Struts 为每个专业的 Web 应用程序做背后的支撑,帮助为你的应用创建一个扩展的开发环境。
Struts的体系结构与工作原理
MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示:
图1
Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的体系结构与工作原理如下图2所示:
图2
从图2中我们可以知道,Struts的体系结构包括模型(Model),视图(View)和控制器(Controller)三部分。
下面让我们从MVC角度来看看struts的体系结构(Model 2)与工作原理:
1)模型(Model)
在Struts的体系结构中,模型分为两个部分:系统的内部状态和可以改变状态的操作(事务逻辑)。内部状态通常由一组ActinForm Bean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。 小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。 建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。
2)视图(View)
视图主要由JSP建立,struts包含扩展自定义标签库(TagLib),可以简化创建完全国际化用户界面的过程。目前的标签库包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。
3)控制器(Controller)
在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。struts-config.xml 文件配置控制器。
Struts体系结构中的组件
图3
上图3显示了 ActionServlet (Controller)、ActionForm (Form State) 和 Action (Model Wrapper) 之间的最简关系。
体系结构中所使用的组件如下表:
ActionServlet | 控制器 |
ActionClass | 包含事务逻辑 |
ActionForm | 显示模块数据 |
ActionMapping | 帮助控制器将请求映射到操作 |
ActionForward | 用来指示操作转移的对象 |
ActionError | 用来存储和回收错误 |
Struts标记库 | 可以减轻开发显示层次的工作 |
Struts配置文件:struts-config.xml
Struts配置文件struts-config.xml,我们默认可以在目录\WEB-INF\struts-config.xml找到这个文件。文件的配置包括全局转发、ActionMapping类、ActionForm bean 和JDBC数据源四个部分。
1)配置全局转发
全局转发用来在JSP页之间创建逻辑名称映射。转发都可以通过对调用操作映射的实例来获得,例如:
actionMappingInstace.findForward("logicalName");
全局转发的例子:
<global-forwards> <forward name="bookCreated" path="/BookView.jsp"/> </global-forwards> |
属性 | 描述 |
Name | 全局转发的名字 |
Path | 与目标URL的相对路径 |
2)配置ActionMapping
ActionMapping对象帮助进行框架内部的流程控制,它们可将请求URI映射到Action类,并且将Action类与ActionForm bean相关联。ActionServlet在内部使用这些映射,并将控制转移到特定Action类的实例。所有Action类使用perform()方法实现特定应用程序代码,返回一个ActionForward对象,其中包括响应转发的目标资源名称。例如:
<action-mappings> <action path="/createBook" type="BookAction" name="bookForm" scope="request" input="/CreateBook.jsp"> </action> <forward name="failure" path="/CreateBook.jsp"/> <forward name="cancel" path="/index.jsp"/> </action-mappings> |
属性 | 描述 |
Path | Action类的相对路径 |
Name | 与本操作关联的Action bean的名称 |
Type | 连接到本映射的Action类的全称(可有包名) |
Scope | ActionForm bean的作用域(请求或会话) |
Prefix | 用来匹配请求参数与bean属性的前缀 |
Suffix | 用来匹配请求参数与bean属性的后缀 |
attribute | 作用域名称。 |
className | ActionMapping对象的类的完全限定名默认的类是org.apache.struts.action.ActionMapping |
input | 输入表单的路径,指向bean发生输入错误必须返回的控制 |
unknown | 设为true,操作将被作为所有没有定义的ActionMapping的URI的默认操作 |
validate | 设置为true,则在调用Action对象上的perform()方法前,ActionServlet将调用ActionForm bean的validate()方法来进行输入检查 |
通过<forward>元素,可以定义资源的逻辑名称,该资源是Action类的响应要转发的目标。
属性 | 描述 |
Id | ID |
ClassName | ActionForward类的完全限定名,默认是org.apache.struts.action.ActionForward |
Name | 操作类访问ActionForward时所用的逻辑名 |
Path | 响应转发的目标资源的路径 |
redirect | 若设置为true,则ActionServlet使用sendRedirect()方法来转发资源 |
3)配置ActionForm Bean
ActionServlet使用ActionForm来保存请求的参数,这些bean的属性名称与HTTP请求参数中的名称相对应,控制器将请求参数传递到ActionForm bean的实例,然后将这个实例传送到Action类。例子:
<form-beans> <form-bean name="bookForm" type="BookForm"/> </form-beans> |
属性 | 描述 |
Id | ID |
className | ActionForm bean的完全限定名,默认值是org.apache.struts.action.ActionFormBean |
Name | 表单bean在相关作用域的名称,这个属性用来将bean与ActionMapping进行关联 |
Type | 类的完全限定名 |
4)配置JDBC数据源
用<data-sources>元素可以定义多个数据源:
属性 | 描述 |
Id | ID |
Key | Action类使用这个名称来寻找连接 |
Type | 实现JDBC接口的类的名称 |
下面属性需要<set-property>元素定义,在Struts 1.1版本中已不在使用,但你可用<data-source>元素。例如:
<data-sources> <data-source id="DS1" key="conPool" type="org.apache.struts.util.GenericDataSource" <set-property id="SP1" autoCommit="true" description="Example Data Source Configuration" driverClass="org.test.mm.mysql.Driver" maxCount="4" minCount="2" url="jdbc:mysql://localhost/test" user="struts" password="ghq123" /> <data-source/> </data-sources> |
属性 | 描述 |
desciption | 数据源的描述 |
autoCommit | 数据源创建的连接所使用的默认自动更新数据库模式 |
driverClass | 数据源所使用的类,用来显示JDBC驱动程序接口 |
loginTimeout | 数据库登陆时间的限制,以秒为单位 |
maxCount | 最多能建立的连接数目 |
minCount | 要创建的最少连接数目 |
password | 数据库访问的密码 |
readOnly | 创建只读的连接 |
User | 访问数据库的用户名 |
url | JDBC的URL |
通过指定关键字名称,Action类可以访问数据源,例如:
javax.sql.DataSource ds = servlet.findDataSource("conPool"); javax.sql.Connection con = ds.getConnection(); |
从struts的组件来看Struts 的工作原理
对于Struts 如何控制、处理客户请求,让我们通过对struts的四个核心组件介绍来具体说明。这四个组件就是:ActionServlet、Action Classes,Action Mapping以及ActionFrom Bean。
1) Struts ActionServlet
ActionServlet继承自javax.servlet.http.HttpServlet类,其在Struts 体系结构中扮演的角色失控制器,控制器ActionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器。
按照Servelt的标准,所有得Servlet必须在web配置文件(web.xml)声明。同样,ActoinServlet必须在Web Application配置文件(web.xml)中描述。
当用户向服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获得了请求,其就会将请求信息传交给一些辅助类(help classes)处理。这些辅助类知道如何去处理与请求信息所对应的业务操作。在Struts中,这个辅助类就是org.apache.struts.action.Action。通常开发者需要自己继承Aciton类,从而实现自己的Action实例。
2) Struts Action Classes
一个Action 类的角色,就像客户请求动作和业务逻辑处理之间的一个适配器(Adaptor),其功能就是将请求与业务逻辑分开。这样的分离,使得客户请求和Action类之间可以有多个点对点的映射。而且Action类通常还提供了其它的辅助功能,比如:认证(authorization)、日志(logging)和数据验证(validation)。
3) Struts ActionMapping
将特定请求映射到特定Action的相关信息存储在ActionMapping中,ActionServelt将ActionMapping传送到Action类的perform()方法,Action将使用ActionMapping的findForward()方法,此方法返回一个指定名称的ActionForward,这样Action就完成了本地转发。若没有找到具体的ActionForward,就返回一个null。
4) Struts ActionForm Bean
一个应用系统的消息转移(或者说状态转移)的非持久性数据存储,是由ActionForm Bean的负责保持的。
ActionForm的主要功能就是为Action的操作提供与客户表单相映射的数据(如果在客户指定的情况下,还包括对数据进行校验)。Action负责对系统数据状态的保持,而Action则负责根据业务逻辑的需要,对数据状态进行修改,在改变系统状态后,ActionForm则自动的回写新的数据状态并保持。
在ActionForm的使用中,Struts提倡使用到值对象。这样将客户或开发人员,对数据状态与对象状态能够更加清晰的理解和使用。
对于每一个客户请求,Struts 体系结构在处理ActionForm的时候,一般需要经历如下几个步骤:
① 检查Action的映射,确定Action中已经配置了对ActionForm的映射;
② 根据name属性,查找form bean的配置信息;
③ 检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例;
④假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用;
⑤ 否则,就重新构建一个form bean的实例;
⑥form bean的reset()方法备调用;
⑦ 调用对应的setter方法,对状态属性赋值;
⑧ 如果validatede的属性北设置为true,那么就调用form bean的validate()方法。
如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。
发表评论
-
Hibernate核心接口简介
2010-05-07 09:52 704原文地址:[url]http://www.13fen.com ... -
(转)Hibernate学习笔记二
2010-05-03 15:17 1083每棵继承树映射成一张表: 1、理解如何映射 ... -
(转)Hibernate笔记一
2010-05-03 15:12 802第一个hibernate项目: 1、新建java项目 ... -
Eclipse开发struts完全指南
2010-04-26 00:47 1091在没有Struts经验之前,最好的办法是先建立一个Strut ... -
认识Struts
2010-04-07 15:36 755一、 认识Struts1、FrameworkFramew ... -
一种Struts国际化处理的思路
2010-04-07 12:26 641一、Struts的国际化 ... -
用STRUTS实现国际化
2010-04-07 12:20 629一.JSP页面部分 1. 页面文字处理 ... -
Hibernate连接SQLServer2000数据库(例子)
2010-03-27 14:02 1355先从例子开始(使用MyEclipse): 建 ... -
谈谈Struts学习
2010-03-26 12:14 720发布时间:2006.03.15 19:49 ... -
Struts Logic标签
2010-03-24 09:33 7221. logic:empty 该标签是 ... -
Struts HTML标签
2010-03-24 09:32 1062<html:html>标签 属性 ... -
Struts配置文件
2010-03-24 09:30 773Struts应用采用两个基于XML的配置文件来配置,分别是we ... -
struts配置文件中文版式
2010-03-24 09:29 829一 Java Web应用配置文件:web.xml web.x ...
相关推荐
浅析Struts 体系结构与工作原理.doc
Java中数据库连接池原理机制的详细讲解、 j2ee面试知识、 线程编程方面、 EJB方面、 浅析Struts 体系结构与工作原理、 JAVA相关基础知识.
Struts1工作原理浅析
Struts1工作原理浅析【转】
浅析多维体系结构(总线架构), 一致性维度和一致性事实.docx浅析多维体系结构(总线架构), 一致性维度和一致性事实.docx浅析多维体系结构(总线架构), 一致性维度和一致性事实.docx浅析多维体系结构(总线架构), 一致性...
浅析多维体系结构(总线架构), 一致性维度和一致性事实.pdf浅析多维体系结构(总线架构), 一致性维度和一致性事实.pdf浅析多维体系结构(总线架构), 一致性维度和一致性事实.pdf浅析多维体系结构(总线架构), 一致性维度...
Struts1工作原理浅析 1.引入struts1 2.struts1工作原理 3.struts1工作机制 4.struts1的安装于基本配置 5.ActionServlet
浅析Struts中使用的六种设计模式:浅析Struts中使用的六种设计模式:浅析Struts中使用的六种设计模式:浅析Struts中使用的六种设计模式:
本文章主要介绍电子负载如何实现CV、CC或CR工作模式。 其实,无论是直流电源还是直流电子负载,CC和CV工作模式实现原理也都非常相似
浅析Struts框架下的Java Web应用.pdf
其命名和UCSC(Ceph诞生地)的吉祥物有关,这个...因此,理解RADOS是理解Ceph的基础与关键。物理上,RADOS由大量的存储设备节点组层,每个节点拥有自己的硬件资源(CPU、内存、硬盘、网络),并运行着操作系统和文件系
流媒体客户端的结构与原理浅析流媒体客户端的结构与原理浅析
浅析多维体系结构(总线架构),一致性维度和一致性事实.pdf
浅析A330自动驾驶仪工作原理及使用建议.pdf
mondrian体系结构浅析.doc
在软件开发阶段,在开发之前有一个大体的开发模型,导致项目有一个开发目标。
浅析企业信息化体系结构.zip
浅析企业信息化体系结构.pptx