Struts 总结文档格式.docx

上传人:b****7 文档编号:22768371 上传时间:2023-02-05 格式:DOCX 页数:102 大小:1.30MB
下载 相关 举报
Struts 总结文档格式.docx_第1页
第1页 / 共102页
Struts 总结文档格式.docx_第2页
第2页 / 共102页
Struts 总结文档格式.docx_第3页
第3页 / 共102页
Struts 总结文档格式.docx_第4页
第4页 / 共102页
Struts 总结文档格式.docx_第5页
第5页 / 共102页
点击查看更多>>
下载资源
资源描述

Struts 总结文档格式.docx

《Struts 总结文档格式.docx》由会员分享,可在线阅读,更多相关《Struts 总结文档格式.docx(102页珍藏版)》请在冰豆网上搜索。

Struts 总结文档格式.docx

●自定义的标记库使得创建和验证HTML表单更加容易

2.1Struts体系结构

让我们从MVC角度观察struts框架中的组件

框架中三个部分:

模型,视窗和控制器。

模型

在struts框架中,模型分为两个部分:

●系统的内部状态

●可以改变状态的操作(事务逻辑)

内部状态通常由一组ActinFormJavaBean表示。

根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。

大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。

比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。

小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。

当逻辑简单时这个方法很适合。

建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。

视窗

由JSP建立,struts包含扩展自定义标签库,可以简化创建完全国际化用户界面的过程。

控制器

struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。

2.2Struts框架中的组件

(由于ROSE工具还未能下载,只能找来这幅图,它说明了一定问题,特别是ActionErrors,但它并没有将ActionMapping,JSP和TagLibrary包含进来,有时间作完替换)

框架中所使用的组件:

ActionServlet

ActionClass

包含事务逻辑

ActionForm

显示模块数据

ActionMapping

帮助控制器将请求映射到操作

ActionForward

用来指示操作转移的对象

ActionError

用来存储和回收错误

Struts标记库

可以减轻开发显示层次的工作

下面我们看看各自在框架中所扮演的角色和责任。

2.3Struts配置文件

这是将struts组件结合在一起的东东:

struts-config.xml。

默认值

\WEB-INF\struts-config.xml。

配置文件可以定义:

●全局转发

●ActionMapping类

●ActionFormbean

●JDBC数据源

配置全局转发

全局转发用来在JSP页之间创建逻辑名称映射。

转发都可以通过对调用操作映射的实例来获得,例如:

actionMappingInstace.findForward(“logicalName”);

全局转发的例子:

(所有的例子我没有进行解释,一是结合表可以理解,二是例子大部分来自系列四的示例,你应该在作完实验后,再来看一便)

<

global-forwards>

forwardname="

bookCreated"

path="

/BookView.jsp"

/>

/global-forwards>

属性

描述

Name

全局转发的名字

Path

与目标URL的相对路径

配置ActionMapping

ActionMapping对象帮助进行框架内部的流程控制,它们可将请求URI映射到Action类,并且将Action类与ActionFormbean相关联。

ActionServlet在内部使用这些映射,并将控制转移到特定Action类的实例。

所有Action类使用perform()方法实现特定应用程序代码,返回一个ActionForward对象,其中包括响应转发的目标资源名称。

例如:

action-mappings>

actionpath="

/createBook"

type="

BookAction"

name="

bookForm"

scope="

request"

input="

/CreateBook.jsp"

>

/action>

forwardname=”failure”path=”/CreateBook.jsp”/>

forwardname=”cancel”path=”/index.jsp”/>

/action-mappings>

属性

Path

Action类的相对路径

与本操作关联的Actionbean的名称

Type

连接到本映射的Action类的全称(可有包名)

Scope

ActionFormbean的作用域(请求或会话)

Prefix

用来匹配请求参数与bean属性的前缀

Suffix

用来匹配请求参数与bean属性的后缀

attribute

作用域名称。

className

ActionMapping对象的类的完全限定名默认的类是org.apache.struts.action.ActionMapping

input

输入表单的路径,指向bean发生输入错误必须返回的控制

unknown

设为true,操作将被作为所有没有定义的ActionMapping的URI的默认操作

validate

设置为true,则在调用Action对象上的perform()方法前,ActionServlet将调用ActionFormbean的validate()方法来进行输入检查

通过<

forward>

元素,可以定义资源的逻辑名称,该资源是Action类的响应要转发的目标。

Id

ID

ClassName

ActionForward类的完全限定名,默认是org.apache.struts.action.ActionForward

操作类访问ActionForward时所用的逻辑名

响应转发的目标资源的路径

redirect

若设置为true,则ActionServlet使用sendRedirect()方法来转发资源

配置ActionFormBean

ActionServlet使用ActionForm来保存请求的参数,这些bean的属性名称与HTTP请求参数中的名称相对应,控制器将请求参数传递到ActionFormbean的实例,然后将这个实例传送到Action类。

例子:

form-beans>

form-beanname="

BookForm"

/form-beans>

ActionFormbean的完全限定名,默认值是org.apache.struts.action.ActionFormBean

表单bean在相关作用域的名称,这个属性用来将bean与ActionMapping进行关联

类的完全限定名

配置JDBC数据源

用<

data-sources>

元素可以定义多个数据源。

Key

Action类使用这个名称来寻找连接

实现JDBC接口的类的名称

下面属性需要<

set-property>

元素定义,在框架1.1版本中已不在使用,但你可用<

data-source>

元素。

data-sourceid=”DS1”

key=”conPool”

type=”org.apache.struts.util.GenericDataSource”

set-propertyid=”SP1”

autoCommit="

true"

description="

ExampleDataSourceConfiguration"

driverClass="

org.test.mm.mysql.Driver"

maxCount="

4"

minCount="

2"

url="

jdbc:

mysql:

//localhost/test"

user="

struts"

password="

wrox"

/>

data-source/>

/data-sources>

desciption

数据源的描述

autoCommit

数据源创建的连接所使用的默认自动更新数据库模式

driverClass

数据源所使用的类,用来显示JDBC驱动程序接口

loginTimeout

数据库登陆时间的限制,以秒为单位

maxCount

最多能建立的连接数目

minCount

要创建的最少连接数目

password

数据库访问的密码

readOnly

创建只读的连接

User

访问数据库的用户名

url

JDBC的URL

通过指定关键字名称,Action类可以访问数据源,比如:

javax.sql.DataSourceds=servlet.findDataSource(“conPool”);

javax.sql.Connectioncon=ds.getConnection();

2.4Struts运行流程

1.根据访问路径查找web.xml文件,发现过滤器

<

filter>

<

filter-name>

struts2<

/filter-name>

filter-class>

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter<

/filter-class>

/filter>

filter-mapping>

url-pattern>

/*<

/url-pattern>

/filter-mapping>

所以,将所有控制权交给struts框架中的StrutsPrepareAndExecuteFilter类

2.StrutsPrepareAndExecuteFilter类会自动去classes文件夹下查找struts.xml文件

在struts.xml文件中查找是否有对应名字的action,如果找到,就调用其配置的class的类com.ambow.demo.HelloAction。

actionname="

helloworld"

class="

com.ambow.demo.HelloAction"

<

resultname="

abcd"

/index.jsp<

/result>

success"

/login.jsp<

3.在HelloAction中,自动调用execute方法。

publicStringexecute(){

System.out.println("

myexecuterunning"

);

return"

;

}

execute方法必须定义为:

publicStringexecute(){}

4.针对execute方法的返回字符串,StrutsPrepareAndExecuteFilter回去查找struts.xml中对应action的result标签里面的name。

如果发现了,就跳转到指定的页面如果没发现,报404错误

2.4.1运行流程图

struts2框架的执行流程:

1)用户发起请求(.action结尾的请求表示请求一个Action)

2)struts2框架的主控器(FilterDispatcher)接收用户发起的请求,

然后判断这个请求交给Action处理还是交给web组件处理.

如果请求的Action或者web组件不存在,那么出现404错误.在整个处理

过程中需要一个辅助对象:

Action映射器(ActionMapper).

3)第二步判断的结果是交给Action处理,并且存在对应的Action.

那么根据struts.xml文件中对此Action的配置信息,首先执行拦截

此Action的所有拦截器,然后再执行请求的Action对象.在这个处理

过程中需要辅助对象:

Action代理(ActionProxy)、配置管理器(ConfigurationManager)、ActionInvocation.

4)Action执行完毕之后返回一个结果(此结果用字符串表示),这个结果

经过拦截Action的所有拦截器之后,返回给主控器.主控器根据此结果

从配置文件中找到真正的路径,然后将请求转发给对应的视图.

5)由视图向客户端作出响应

上图来源于Struts2官方站点,是Struts2的整体结构。

一个请求在Struts2框架中的处理大概分为以下几个步骤

1客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:

SiteMeshPlugin)

3接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action

4如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类

6ActionProxy创建一个ActionInvocation的实例。

7ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

在表示的过程中可以使用Struts2框架中继承的标签。

在这个过程中需要涉及到ActionMapper

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

Struts2:

(1)客户端提交一个HttpServletRequest请求(.action或JSP页面)

(2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等

(3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器

(4)请求发到FilterDispatcher后,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个Request(一般根据URL后缀是否为.action来判断)

(5)如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActioProxy,由其进行处理.

(6)ActionProxy通过ConfigurationManager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action类.

(7)ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会根据配置文件加载相关的所有Interceptor拦截器)

(8)Action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Interceptor拦截器.

(9)最后ActionInvocation负责根据struts.xml中配置的result元素,找到与返回值对应的result,决定进行下一步输出.

2.5Struts.xml配置详解

!

DOCTYPE 

struts 

PUBLIC 

"

-//Apache 

Software 

Foundation//DTD 

Struts 

Configuration 

2.0//EN"

http:

//struts.apache.org/dtds/struts-2.0.dtd"

struts>

-- 

include节点是struts2中组件化的方式 

可以将每个功能模块独立到一个xml配置文件中 

然后用include节点引用 

-->

include 

file="

struts-default.xml"

/include>

package提供了将多个Action组织为一个模块的方式

package的名字必须是唯一的 

package可以扩展 

当一个package扩展自

10 

另一个package时该package会在本身配置的基础上加入扩展的package

11 

的配置 

父package必须在子package前配置 

12 

name:

package名称,不可省略

13 

extends:

继承的父package名称

14 

abstract:

设置package的属性为抽象的 

抽象的package不能定义action 

值true:

false

15 

namespace:

定义package命名空间 

该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http:

//localhost:

8080/struts2/test/XX.action

16 

17 

package 

name="

com.kay.struts2"

extends="

struts-default"

namespace="

/test"

18 

interceptors>

19 

定义拦截器 

20 

name:

拦截器名称

21 

class:

拦截器类路径,拦截器的实现类

22 

23 

interceptor 

timer"

class="

com.kay.timer"

/interceptor>

24 

logger"

com.kay.logger"

25 

定义拦截器栈 

26 

interceptor-stack 

mystack"

27 

interceptor-ref 

/interceptor-ref>

28 

29 

/interceptor-stack>

30 

/interceptors>

31 

32 

定义默认的拦截器 

每个Action都会自动引用

33 

如果Action中引用了其它的拦截器 

默认的拦截器将无效 

34 

default-interceptor-ref 

/default-interceptor-ref>

35 

36 

37 

全局results配置 

38 

global-results>

39 

result 

input"

/error.jsp<

40 

/global-results>

41 

42 

Action配置 

一个Action可以被多次映射(只要action配置中的name不同)

43 

action名称

44 

对应的类的路径

45 

method:

调用Action中的方法名

46 

47 

action 

hello"

com.kay.struts2.Action.LoginAction"

48 

引用拦截器

49 

拦截器名称或拦截器栈名称

50 

51 

n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1