RoyJohnson

生命不息,奋斗不止!
posts - 4, comments - 9, trackbacks - 0, articles - 0

2007年6月17日

                                            Struts框架详解
struts-config.xml    Struts配置文件
ActionServlet  控制器
Action Class  包含事务逻辑
ActionForm  显示模块数据
ActionMapping  帮助控制器将请求映射到操作
ActionForward  用来指示操作转移的对象
ActionError  用来存储和回收错误
Struts标记库  可以减轻开发显示层次的工作

struts框架的优势
1.良好的架构和设计
2.可重用,模块化,扩展性好
3.Open source

struts-config.xml

Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或升级都是大有裨益的。掌握Struts-config.xml是掌握Struts的关键所在。

FormBean部分

<struts-config>
  <!--  Form Bean Definitions -->
  <form-beans>
    <form-bean name=“testform" type="com.cjea.test.TestForm" />
  </form-beans> 

全局转发部分

<!-- Global Forward Definitions -->
  <global-forwards>
    <forward   name="failure"     path="bad.jsp"/>
    <forward   name="success"     path="/good.jsp" />
  </global-forwards>

action部分

<action-mappings>
   <action path=“/test/test.jsp" type=“com.cjea.test.testAction" name="testform" scope="request">
        <forward name="success" path="/test/good.jsp" />
   </action>
<action-mappings> 
</struts-config>

 ActionServlet

ActionServlet 是struts框架 MVC 实现的 controller 部分,它是这一框架的核心。
ActionServlet 创建并使用 Action、ActionForm 和 ActionForward。

ActionServlet的基本功能

截获用户的Http请求
把这个请求映射到相应的Action类。
创建一个ActionForm bean实例,将form请求放入formbean的实例中
调用Action实例的perform()方法
将ActioForm bean,Action Mapping对象,request和response对象传给Action的perform()方法
perform返回一个ActionForword对象,根据方法执行情况转到相应的jsp页面.

 

Action Classes


Action 类是业务逻辑的一个包装。Action 类的用途是将 HttpServletRequest 转换为业务逻辑。

ActionForm

ActionForm 维护 Web 应用程序的会话状态。
ActionForm 是一个抽象类,必须为每个输入表单模型创建该类的子类。


ActionForm的使用

假定有一个由 HTML 表单设置的 TestActionForm。Struts 框架将执行以下操作:
检查 TestActionForm是否存在;如果不存在,它将创建该类的一个实例。
Struts 将使用 HttpServletRequest 中相应的域设置 TestActionForm的状态。
Struts 框架在将 TestActionForm传递给TestAction 之前将更新它的状态。
struts-config.xml 文件控制 HTML 表单请求与 ActionForm 之间的映射关系。
可将多个请求映射到 TestActionForm 。

Struts标记库
Struts框架包括自定义标签库,它可以用 在很多方面。尽管这些库并不要求用框 架,但使用它们会有助于程序的开发。

Struts标记库
struts-bean taglib:包含在访问bean和bean属性时使用的tag,也包含一些消息显示的tag。
struts-html taglib:包含用来生成动态HTML用户界面和窗体的tag。
struts-logic taglib :包含的tag用来管理根据条件生成输出文本,和其它一些用来控制的信息。
struts-template taglib包含的tag用来定义模板机制。

Bean Taglib
用于定义新bean、访问bean及其属性的标记
在struts-bean.tld中定义了它的标记库描述器
Bean Taglib主要功能
创建和复制bean的标记
脚本变量定义标记
bean翻译标记
消息国际化标记
Bean复制标记 (<bean:define>)
可定义新bean,可复制现有bean,还可从现有bean复制属性。
定义新字符串常数
将现有的bean复制到新定义的bean对象
复制现有bean的属性来创建新的bean
<bean:define>标记属性:
Id 新定义的bean脚本变量名称,必须设置
Type 定义引入脚本变量的类
Value 为id属性定义的脚本变量分配一个新的对象
<bean:define>标记属性:
Name 目标bean的名称。若value属性没有设置,这个属性就必须设置
property Name属性定义的bean的属性名称,用来定义新的bean
Scope 源bean的作用域。若没有设置,搜索范围是从页作用域到应用程序作用域
toScope 目标bean的作用域。若没有设置,默认值是页作用域
举例
定义一个bean:
<bean:define id="test" value="this is a test"/>
源bean在页作用域中被拷贝到请求作用域中的另一个bean:
<bean:define id="targetBean" name="sourceBean"
scope="page" toScope="request"/>
脚本变量的标记
从多种资源中定义和生成脚本变量,这些资源包括cookie,请求参数,HTTP标头等等。
脚本变量的标记属性:
Id        脚本变量和要定义的页作用域                 属性的名称
Name    cookie/标头/参数的名称
Value    如果没有匹配的cookie或    数值,就返回这个属性指    定的默认值

脚本变量的标记属性:
multiple 如果这个属性设置了任意一个数值,所有匹配的cookie都会被积累并存储到一个Cookie[](一个数组)类型的bean里           若无设置,指定cookie的第一个值将作为Cookie类型的值
举例
<bean:cookie id="myCookie" name="userName"/>
脚本变量名称是myCookie,用来创建这个属性的cookie的名称是userName。
<bean:header id="myHeader" name="Accept-Language"/>
脚本变量名称是myHeader,请求标头的名称是Accept-Language.

举例
<bean:parameter id="myParameter" name="myParameter">
脚本变量名称是myPatameter,它保存的请求参数的名称也是myParameter
逻辑标记
Struts逻辑标签库包含的标记能够有条件地产生输出文本
在对象集合中循环从而重复地产生输出文本,以及应用程序流程控制
它也提供了一组在JSP页中处理流程控制的标记
逻辑标记封装在文件名为struts-logic.tld的标记包中
逻辑标记库的功能
条件逻辑
重复
转发/重定向响应
条件逻辑标记
第一类可以比较下列实体与一个常数的大小
第二类在计算标记体之前判断特定的项目是否存在
第三类根据模板匹配的结果检查标记体的内容
第一类条件逻辑标记
<equal>  如果常数与被定义的实体相等,返回true
<notEqual> 如果常数与被定义的实体不相等,返回true
<greaterEqual> 如果常数大于等于被定义的实体,返回true
第一类条件逻辑标记
<lessEqual> 如果常数小于等于被定义的实体,返回true
<lessThan> 如果常数小于被定义的实体,返回true
<greaterThan> 如果常数大于被定义的实体,返回true
举例
判断名为"name"的请求参数的值是否是"SomeName"。
<logic:equal parameter="name" value="SomeName">
        The entered name is SomeName
</logic:equal>
举例
判断在页的作用域中是否有一个名为"bean"的bean,它有一个prop属性,这个属性的值是否大于7。
如果这个属性能够转化为数值,就进行数值比较,否则就进行字符串比较。
<logic:greaterThan name="bean" property="prop" scope="page" value="7">
The value of bean.Prop is greater than 7
</logic:greaterThan>
第二类条件逻辑标记
<logic:present>
<logic:notPresent>
第三类条件逻辑标记
<logic:match>
<logic:notMatch>
重复标记<logic:iterate>
它能够根据特定集合中元素的数目对标记体的内容进行重复的检查
集合的类型
java.util.Iterator
java.util.Collection
java.util.Map
java.util.List
数组
举例
Strlst是一个包含字符串的List,现在要将他内部的字符串全都显示在浏览器里
<logic:iterate id="element" name="strlst"  indexId="index">
<%=(String)element)%>
</logic:iterate>
转发标记
<logic:forward>标记能够将响应转发给重定向到特定的全局ActionForward上
ActionForward的类型决定了是使用PageContext转发响应,还是使用sendRedirect将响应进行重定向
此标记只有一个"name"属性,用来指定全局ActionForward的名称,例如:
<logic:forward name="myGlobalForward"/>
重定向标记
<logic:redirect>标记是一个能够执行HTTP重定向的强大工具。
根据指定的不同属性,它能够通过不同的方式实现重定向。
它还允许开发人员指定重定向URL的查询参数。
HTML标记
Struts HTML标记可以大致地分为以下几个功能:
显示表单元素和输入控件
显示错误信息
显示其他HTML元素
模板标记
Struts模板标记可以大致地分为以下几个功能:
插入标记<template:insert>
放置标记<template:put>
获得标记<template:get>

posted @ 2007-06-17 18:07 roy_johnson 阅读(1414) | 评论 (2)编辑 收藏