Struts2快速入门


Struts2 开发指南Allan LXF 作者 刘新福 Struts2快速入门 作者:刘新福 allanlxf@hotmail comallanlxf@hotmail.com 版权所有,禁止翻改 Struts2 概述 Struts2 开发指南 Struts2 是一个全新的基于 MVC 的 Web 编程框架。它的整体设计完全不 同于 Struts1 。新的 Struts2 框架在很多方面采纳了 Webwork 的设计思想。事 实上, Struts2 是 Struts 和 Webwork 整合优化后的新一代的 Web 编程框架, 具有如下的特点 : 具有如下的特点 : 基于 AOP 的设计思路,将相关的内容集中到单独的软件层面中,这主 要体现在 Struts2 的 Interceptor 的设计上。 Struts2 的 Action 类不再依赖于 Struts 框架,任何的类都可作为 Struts2 的 Action 。 提供了大量的自带的 Interceptor 来实现许多系统级的服务 使开发 提供了大量的自带的 Interceptor 来实现许多系统级的服务 , 使开发 者可以忽略很多 Web 编程处理中的细节,从而可以集中精力处理核心 的业务问题。 提供了更为方便、独立的 Spring 的集成服务支持。 提供了更为方便、独立的 Tiles 的集成服务支持。 Struts2 概述 Struts2 开发指南 提供了大量的缺省配置,这样可以大大简化基于 Struts2 开发 的配置工作 量。 内置 Web2.0 AJAX 特性。 内置 validation 服务 内置 validation 服务 。 提供了更为方便的文件上传支持。 提供对多种视图技术的支持及扩展 。 提供对多种视图技术的支持及扩展 。 提供了更为优雅的数据传递及访问模型。 Action 类不再是单例,这样可以使开发者从复杂的多线程并发访问控制 的编程中解脱出来。 Struts2 核心构建元素 Struts2 开发指南 Request FilterDispatcher(C) Invoke Finish Interceptors (Services) Interceptors (Services) Action(M ) Result(V) Invoke Action(M ) Result(V) OGNL OGNL ValueStack(Data Holder) Response ActionContext Controller In Struts2 Struts2 开发指南 Struts2 的控制器( Controller )是一个过滤器,所有的请求都需要经过 该过滤器,其类型为: org.apache.struts2.dispatcher.FilterDispatcher , 当 FilterDispatcher 接收到一个请求后,会根据相关的配置信息查找服务于 该请求的 interceptors 、 action 类并自动创建它们的实例及调用它的方法服 该请求的 interceptors 、 action 类并自动创建它们的实例及调用它的方法服 务于请求,它还会根据 interceptors 或 action 的执行结果来调用视图层组件 Result 来生成响应。 FilterDispatcher 过滤器必在应用的 web.xml 中部署, 并配置为过滤所有的请求 配置方法如下 并配置为过滤所有的请求 , 配置方法如下 : filt Di t h filt er Di spa t c h er org.apache.struts2.dispa tcher.FilterDispatcher filterDis patcher /* Model In Struts2 Struts2 开发指南 Struts2 中的模型( Model )包括 action 和 interceptor 。 action 是一个简 单的 POJO ( J avaBean )对象,它不需要依赖于 Struts2 框架,因此独立性及 复用性都很好,适合在该类中同业务( Biz )代码及数据访问( Dao )代码交 互 。 action 的开发是基于 Struts2 的项目的核心任务 。 Interceptor( 拦截器 ) 是 互 。 action 的开发是基于 Struts2 的项目的核心任务 。 Interceptor( 拦截器 ) 是 一个遵守 Struts2 规范的一个对象,类似于 Web 编程中的 Filter ,控制层会在 action 方法执行之前以及之后执行 interceptor 中的代码。在实际开发中,最 好将 些切面任务 比如 日志 安全 调试等代码放到 i tt 中实现 好将 一 些切面任务 , 比如 : 日志 、 安全 、 调试等代码放到 i n t ercep t o r 中实现 , 然后通过配置的方式将 interceptor 和 action 在运行时关联到一起,从而使 interceptor 及 action 各为一层,这就是所谓 AOP 的设计思想。 为了加速基于 Struts2 的 Web 应用的开发, Struts2 内置了很多常用的 interceptor 供开发者使用,这些 interceptor 提供的功能被称为 Struts2 的系 统级服务 常用的服务包括 请求参数到 action 属性的绑定 参数校验 消 统级服务 。 常用的服务包括 : 请求参数到 action 属性的绑定 、 参数校验 、 消 息解析、文件上传处理等。开发者也可以根据需要编写自己的 interceptor 来 实现项目级的服务代码。 Model Configurations Struts2 开发指南 开发者必须为 Struts2 的 Model 对象提供配置信息以便当请求到来时控制 器可以调用 Model 层的对象来处理请求。在 Struts2 中,这些配置信息可以在 XML 文件中指定,也可以在 Action 类源代码中指定(使用注释)。 „ XML 配置 „ XML 配置 默认的 XML 配置文件的名字为 struts.xml ,该文件需要放置在 Web 应 用的类路径下,即 WebRoot/WEB-INF/classes 目录下。 /welcome.jsp Welcome to the world of Struts < param name =" majorVersion "> 2 < / param > param name majorVersion 2/ param 0.11 Model Configurations Struts2 开发指南 „ Annotation配置 类似于XML的配置,开发者可以使用注释(annotation)在action类的源 代码中指定等同于XML文件的配置信息,这样更便于配置信息的维护。 package com.allanlxf.struts2.action.annotation; import org.apache.struts2.config.Result; im p ort or g .a p ache.struts2.confi g .Results ; pgp g ; @Results(@Result("/welcome.jsp")) public class WelcomeAction { } 如果使用annotation来提供配置信息,部署者必须通知控制器哪些 ti 类包含这些配置信息 这可以通过 Filt Di t h 的初始化参 } ac ti on 类包含这些配置信息 , 这可以通过 Filt er Di spa t c h er 的初始化参 数actionPackages来指定这些包含了annotation配置信息的action类所 在的包的列表(用逗号分隔)。 Controller Using Annotations Struts2 开发指南 filterDispatcher org.apache.struts2.dispat cher.FilterDispatcher iit < i n it -param> actionPackages com.allanlxf.struts2.annotation filterDispatche r /* View In Struts2 Struts2 开发指南 Result 作为 Struts2 中的视图( View )组件。 Struts2 支持多种视图技术, 包括 JSP Vl it FMk XSLT 等 更为重要的是该框架可以很 包括 : JSP 、 V e l oc it y 、 F ree M ar k er 、 XSLT 等 。 更为重要的是该框架可以很 容易地被扩展从而支持其它的视图技术。 Control String Action Result Control String Action 执行完毕后,返回一个代表某个视图组件的逻辑名称,该名称同 某个视图资源关联并由某个具体类型的 Result 对象来调用该视图资源,从而 生成到客户端的响应生成到客户端的响应 。 /welcome. j s p 当 WelcomeAction 的 execute 方法返回字符串 ”success” 时, Struts2 会 yp p jp 通过 ServletDispatcherResult 来调用 ”/welcome.jsp” 从而为客户做出响应。 Data Transfer Between M&V Struts2 开发指南 在视图层 (V) 生成响应内容的过程中,经常需要访问模型层 (M) 中的数据, 所以数据传递是开发中十分重要的内容 在早期的模型中 开发者大多会使 所以数据传递是开发中十分重要的内容 。 在早期的模型中 , 开发者大多会使 用 Servlet 规范中规定的请求对象或会话对象的属性空间来实现数据的传递。 Struts2 在设计 上 为开发者提供了更为方便数据传递模 型, Struts2 的数 在设计 为开发者提供了更为方便数据传递模 的数 据传递是通过 ActionContext 、 ValueStack 以及 OGNL 实现的。 Action Result OGNL OGNL ActionContext OGNL OGNL Value Stack request session application contextMap OGNL Interceptors Data Transfer Between M&V Struts2 开发指南 ‹ ActionContext Ati C t t 是 个只在当前线程中可用的对象 即它存储在 A c ti on C on t ex t 是 一 个只在当前线程中可用的对象 , 即它存储在 ThreadLocal 中,它用来存放一些同当前的 action 密切相关的信息。使 用它可以在所有服务于当前请求的对象之间共享信息。在 interceptor , action ,及 result 中均可访问该对象。 ‹ ValueStack ValueStack 是 个精心设计的栈结构 在栈中可以存放程序运行过 ValueStack 是 一 个精心设计的栈结构 , 在栈中可以存放程序运行过 程中产生的数据以便实现共享。更为重要的是可以使用 EL 对 ValueStack 中的对象进行赋值以及读取对象的信息。所有的 EL 操作都是针对最先找 到的栈中的对象进行的,搜索顺序为从栈顶到栈底。 ‹ OGNL OGNL(Object Graphic Navigation Language) 是一种表达式语言 OGNL(Object Graphic Navigation Language) 是一种表达式语言 , 使用它可以动态地根据某个字符串的表达式对某个对象进行方法调用操 作,而不需要知道该对象的具体类型。 Struts2 的 ValueStack 支持使用 OGNL 来动态操作栈中的对象。 构建基于 Struts2 的应用 Struts2 开发指南 1. 建立一个 Java Web 应用 JWb 应用是 个遵守了 JEE Wb 应用规范的目录结构以及存 J ava W e b 应用是 一 个遵守了 J ava EE W e b 应用规范的目录结构以及存 放在该目录结构中的资源的集合。该目录结构如图所示: ① a lbum app 为应用的根 默认情况下它 ① a lbum - app 为应用的根 , 默认情况下它 将作为本应用的虚拟访问路径。 ② WEB-INF 是每个 J ava Web 应用必须包含 的目录,该目录内的所有内容只有服务 器有权访问,不对客户端开放。 ③ WEB-INF 下必须包含一个 web.xml 文件,该文件为本应用的部署描 述文件,应用中 Listener 、 Filter 以及 Servlet 都在该文件中部署。 ④ l 文件夹为本 Wb 应用的类路径 没有打包的类及文件都需 ④ c l asses 文件夹为本 W e b 应用的类路径 , 没有打包的类及文件都需 要放到该目录下。 ⑤ lib 目录下的所有 jar 文件都将自动添加到 Web 应用的类路径中 。 ⑤ lib 目录下的所有 jar 文件都将自动添加到 Web 应用的类路径中 。 ⑥ WEB-INF 目录外的应用内的其它目录及文件都对客户端开放。 构建基于 Struts2 的应用 Struts2 开发指南 2. 下载 Struts2 可以从 htt // t t h /d l d i 下载 St t 2 的 可以从 : htt p: // s t ru t s.apac h e.org /d own l oa d .cg i 下载 St ru t s 2 的 最新版本,目前为 2.0.11.1 。 3. 在应用中安装 Struts2 及其相关的类库 在应用中安装 及其相关的类库 将下载的压缩包解开,可以看到 lib 文件夹,将文件夹中下述 jar 文件 拷贝到刚建立的 Web 应用的 lib 目录下: antlr 272jar commons beanutils 16jar commons chain 11jar antlr - 2 . 7 . 2 . jar , commons - beanutils - 1 . 6 . jar , commons - chain - 1 . 1 . jar , commons-logging-1.0.4.jar , commons-logging-api-1.1.jar , commons-validator-1.3.0.jar , freemarker-2.3.8.jar , ognl-2.6.11.jar , oro-2.0.8.jar , struts2-core-2.0.11.1.jar , xwork-2.0.4.jar 其中 , struts2-core-2.0.11.1.jar 和 xwork-2.0.4.jar 包含了 Struts2 的核心 类文件 , 编译 Struts2 的 action 类时需要它们 。 其它的 jar 文件中的类只有 类文件 , 编译 Struts2 的 action 类时需要它们 。 其它的 jar 文件中的类只有 在运行时才需要。 4. 部署 Struts2 配置文件 Struts2 Configuration Files Struts2 开发指南 Struts2 是一个很灵活的框架,提供的很强的可配置性,考虑到以往的一 些框架为了追求灵活性而导致程序员不得不编写大量的配置文件 给开发及 些框架为了追求灵活性而导致程序员不得不编写大量的配置文件 , 给开发及 维护带来了很大的不便。 Struts2 在启动的时候会读取它自己内置的配置文 件来配置 Struts2 的缺省工作模式,开发者根据需要可以在应用级的配置文 件中覆盖这些缺省配置。 构建基于 Struts2 的 Web 应用涉及的配置文件包括: bl(Rid) „ we b .xm l (R equ i re d) „ struts-default.xml (System) „ default properties (System) „ default . properties (System) „ struts.xml (Application Specific) „ struts. p ro p erties ( A pp lication S p ecific ) pp (pp p ) „ struts-default.vm (Velocity) „ velocity.properties (Velocity) „ struts-plugin.xml (Module Plugin) web.xml configureation Struts2 开发指南 Struts2 的核心控制器 FilterDispatcher 必须在该文件中配置,在该文件中 说明控制器的控制范围 通常为应用下的所有的请求 说明控制器的控制范围 , 通常为应用下的所有的请求 。 FilterDispatcher 是一个过滤器,它用来初始化 Struts 框架并负责调用于 当前请求相关的 Interce p tors 、 Actions 及 Result 。 当前请求相关的 p 及 可以为 FilterDispatcher 指定如下的初始化参数来通知控制器如何定位于 控制相关的配置信息: a) config 指定用来配置 Interceptors 、 Actions 及 Results 的 XML 格式的配置文件 的文件名 如果有多个可以用逗号分开 缺省为 struts xml 的文件名 , 如果有多个可以用逗号分开 , 缺省为 struts . xml b) actionPackages 指定包含了 Annotation 配置的 Action 类所以在的包 , 此时与 Action 相关 指定包含了 配置的 类所以在的包 此时与 相关 的配置信息都包含到 Action 类的源代码中,如果有多个包可以用逗号将 它们分开。 Configure Struts2 Controller Struts2 开发指南 filterDispatcher org.apache.struts2.dispat cher.FilterDispatcher iit < i n it -param> actionPackages com.allanlxf.struts2.annotation filterDispatche r /* Other Configuration Files Struts2 开发指南 ‹ struts-default.xml 和 default.properties 系统级别的 文件 它们都存放在 中 系统级别的 配置 文件 , 它们都存放在 struts2-core-2.0.11.1.jar 中 ,开 发者不需要修改这两个文件。 struts-default.xml 配置了 Struts2 自带的 Results 、 Interce p tors 、 Interce p tor stacks 及 struts-default 包 的配 置 p p 及 的配 信息,该配置文件的内容对所有的应用级别的配置文件,如 struts.xml 及其引用的文件是可见的。 default.properties 配置了 Struts2 框架的很 多运行时的缺省配置参数 如文件上传配置参数 Action 请求的扩展名 多运行时的缺省配置参数 , 如文件上传配置参数 、 Action 请求的扩展名 、 配置信息及资源的重载等。 ‹ struts.xml 和 s truts. p ro p erties pp 应用级别的配置文件,需要将它们放置在应用的类路径的根目录下, 即 WEB-INF/classes 目录下。 struts.xml 中配置应用内的 Actions 、 Rl I 等信息 在该配置文件中可以使用在 R esu l ts 、 I nterceptors 等信息 , 在该配置文件中可以使用在 struts- default.xml 文件中配置的所有信息。 struts.properties 用来覆盖 default.properties 文件中的配置信息。另外一种覆盖 default. p ro p erties pp 的配置信息的方法是在 struts.xml 文件中使用 元素。 构建基于 Struts2 的应用 Struts2 开发指南 5. 在 classes 文件夹下放置如下的 struts.xml 文件。 6. 在 classses 文件夹下放置一个空的名字为 struts.properties 的文件。 struts.xml 、 struts.properties 以及 Action 类、 Interceptors 类、其它辅 助类助类 Struts2 核心类库、运行时所需的第 三方类库、包含 Action 类、 Interceptors 类的库文件 Greetings To Struts2 Struts2 开发指南 开发第一个基于 Struts2 的程序,此程序的功能是:向访问者输出一句 问候的话语 并告知目前应用所用的 St t 2 的版本号 问候的话语 , 并告知目前应用所用的 St ru t s 2 的版本号 。 I. 编写 WelcomeAction 类 p acka g e com.allanlxf.struts2.action; pg public class WelcomeAction { private int majorVersion; private float minorVersion; private String message;private String message; public String execute () { setMessage(message + "." + maj orVersion + "." + minorVersion); return " success " ;; } public String getMessage() { return message;return message; } public void setMessage(String message) { thi s .m essage = m essage; s essage essage; } } Greetings To Struts2 Struts2 开发指南 I. WelcomeAction.java Continued. public int getMajorVersion() { return majorVersion; } public void setMajorVersion(int majorVersion) { this majorVersion = majorVersion; this . majorVersion majorVersion; } public float getMinorVersion() { return minorVersion; } public void setMinorVersion(float minorVersion) {public void setMinorVersion(float minorVersion) { this.minorVersion = minorVersion; } } Coding With Actions Struts2 开发指南 Struts2 框架不强制 Action 类继承于任何父类或实现任何的接口,只要一 个类中满足如下的要求 都可以作为 St t 2 的 Ati 个类中满足如下的要求 , 都可以作为 St ru t s 2 的 A c ti on 。 „ 有公共的缺省构造器 „ 业务方法 遵守签名 规则 : public String methodName () „ 业务方法 遵守签名 规则 : public String methodName () 在默认情况下,控制器会调用 Action 类的 execute 方法。如果要调用其 它的方法,可以在 标签中通过属性 method 来指定其它的方法名。 在开发时,为了保证编译期方法签名的检验, Struts2 提供了一个轻量级的 接口 com.opensymphony.xwork.Action ,该接口中规定了 execute 方法, 实现在接口并不会影响程序的便携性 。 为了更为方便地使用 Struts2 的其它 实现在接口并不会影响程序的便携性 。 为了更为方便地使用 Struts2 的其它 特性比如:读取资源文件、实现校验等, Struts2 提供了该接口的一个实现 类供开发者继承使用: com.opensymphony.xwork.ActionSupport 。 Struts2 中的 Action 对象即作为业务处理对象也作为数据传输对象,它工 作在单线程环境下,这是同 Struts1 的最大的不同之处。这样设计的好处是 可以使开发者同复杂的多线程控制代码中解脱出来 , 另 一 方面在业务方法中 可以使开发者同复杂的多线程控制代码中解脱出来 , 另 方面在业务方法中 操作业务相关的数据也变得更为方便。 Configure WelcomeAction Struts2 开发指南 II. 在 struts.xml 中配置 WelcomeAction tt Welcome to the world of Struts 2 0.11< / param> /welcome.jsp Action Configurations Struts2 开发指南 Struts2 的 Action 类需要在 struts.xml 文件中进行配置,这样每个 Action 类都对应 个可以被访问的 URL 类都对应 一 个可以被访问的 URL 。 在配置文件中, action 是通过 package 来组织的。一个 package 中可以 包 含多个 action 的定义 , 并 且一 个 p acka g e 可以 通过 继承于其 它 的 p acka g e 含多个 的定义 并个 pg 可以 继承于其 的 pg 来复用父 package 中的配置信息。 Struts2 提供了一个叫做的 struts-default 的缺省的 package ,应用自定义的 package 通常继承于 struts-default 。 /welcome jsp/welcome . jsp 每个 package 都同某个 namespace 关联,这样在控制器接收到请求时, 可以将请求的 URL 映射为某个 namespace ,并从该 namespace 所对应的 k 中查找 pac k age 中查找 action 。 Action Configurations Struts2 开发指南 多个 package 可以对应同一个 namespace ,没有指定 namespace 的 k 被认为在 “ 缺省的 ” 中 控制器在查找 ti 时 先看 pac k age 被认为在 “ 缺省的 ” namespace 中 。 控制器在查找 ac ti on 时 , 先看 指定的 namespace 中是否存在该 action ,如果不存在则在缺省的 namesapce 中查找。 查找 http://localhost:8080/album-app/core/welcome.action 的过 程如下: l 被认为是要查找的 的名字 1. we l come 被认为是要查找的 action 的名字 。 2. 在 namespace : /core 所对应的 package 中进行查找。 3 如果找不到 则在缺省的 namespace 所对应的 package 中查找 3 . 如果找不到 , 则在缺省的 namespace 所对应的 package 中查找 。 4. 如果找不到,报告异常。 注意 : 在处理任意 一 个请求的过程中 , 系统最多查两个名字空间 , 即最 注意 在处理任意 个请求的过程中 系统最多查两个名字空间 即最 长的名字空间和缺省的名字空间。还有,“ / ”并不代表缺省的名字空间。 About Development Mode Struts2 开发指南 为了便于 Struts2 应用的开发与调试 ,可以让 Struts2 工作在开发模式下, 这样可以在不重新装载应用的前提下实现这样可以在不重新装载应用的前提下实现 : ‹ 在请求之间自动重新载入 struts.xml 文件的信息。 ‹ 在请求之间自动重新载入资源文件 。 ‹ 在请求之间自动重新载入资源文件 。 ‹ 在请求之间自动重新载入校验文件。 工作在开发模式下, Struts2 可以输出更多的运行时的调试信息,这样有 助于跟踪调试程序。 要使 Struts2 工作在开发模式下,可以在 struts.xml 文件中加入: 也可以在 struts.properties 文件中加入: struts devMode = truestruts . devMode = true 另外,也可以通过指定: struts.i18n.reload=true 及 struts.confi g uration.xml.reload=true 来 g 单独实现资源文件及 struts.xml 文件的自动重载。 JSP As View Component Struts2 开发指南 III. 编写 /welcome.jsp <%@page contentType="text/html;charset=gbk" %> <%@taglib uri="/struts-tags" prefix="s"%> welcome

上述代码中, 是使用 struts 的标签来 读取当前 ActionContext 所关联的 ValueStack 中的对象的信息,其中 message 为一个 OGNL 表达式 message 为一个 OGNL 表达式 。 III. 访问 WelcomeAction http://localhost:8080/album-app/core/welcome.action 。其中, /core 为 namespace , welcome 为 action 的名字。 Work Flow Analyse Struts2 开发指南 http://localhost:8080/album-app/core/welcome.action ll h dispatcher web.xml default.properties Control signal returned by execute Fi ll terDispatc h er dispatcher result WelcomeAction execute ValueStack WelcomeAction struts.xml OGNL forward ActionContext staticParams l interceptor we l come.jsp setters Work Flow Analyse Struts2 开发指南 ① 客户端发送请求: http://localhost:8080/album-app/core/welcome.action ② 根据 的 所有的请求都被 过滤 根据 ② 根据 web.xml 的 配置 所有的请求都被 FilterDispatcher 过滤 , 根据 default.properties 的配置,以 .action 结尾的请求为到 action 的请求。 控制器会根据 struts.xml 中的配 置 构建 action 的调用栈 , interce p tors 在 控制器会根据 中的配 构建 的调用栈 p 在 前,然后为 action ,最后为 result 。系统创建一个 ActionContext 对象, 并将它和当前的线程关联。系统会在 ActionContext 对象中构建一个 ValueStack 用来存放操作过程中的数据 并将 action 对象放入栈顶 ValueStack 用来存放操作过程中的数据 , 并将 action 对象放入栈顶 。 ③ 调用 staticParams interceptor ,该 interceptor 会将 struts.xml 中配置 的当前 action 的 < p aram> 信息赋给 ValueStack 中的 action 实例,此时使 p 用 OGNL 实现。 ④ 执行 action 的 execute 方法。 ⑤ 根据 execute 的返回值调用相应的 Result 对象。 ⑥ result 对象执行目标资源,生成到客户端的响应。 ⑦ FilterDispatcher 执行 ActionContext 的资源回收工作 ⑦ FilterDispatcher 执行 ActionContext 的资源回收工作 。 Using Annotations With Action Struts2 开发指南 package com.allanlxf.struts2.annotation.action; import org.apache.struts2.config.Result; import org.apache.struts2.config.Results; @Results(@Result("/welcome.jsp")) public class AnnotatedWelcomeAction { private String message; public String execute() { setMessage("Welcome to Struts2.0.11"); return "success"; }} public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }} Using Annotations With Action Struts2 开发指南 „ 访问 AnnotatedWelcomeAction http://localhost:8080/album-app/action/annotatedWelcome.action 。 其中, /action 为 namespace , annotatedWelcome 为 action 的名字。 „ 配置信息说明 „ 配置信息说明 FilterDispatcher 的初始化参数 actionPackages 指定了系统查找使用了注 释配置的 action 类所在的包。它的取值为用逗号分开的多个包,如果指定了 某个包 那么它的所有子包也会被查找 如果搜索范围内的某个 类实 某个包 , 那么它的所有子包也会被查找 。 如果搜索范围内的某个 action 类实 现了 com.opensymphony.xwork2.Action 接口或该类的名字以 Action 结尾的话, 它将被认为是以 Annotation 的配置形式发布,即使里面没有任何的注释。 如果 action 在包列表中的某个包的根下,它将被放到缺省的名字空间中。 如果 action 在包列表的某个包的子包下,子包的路径名将作为该 action 的 namespacenamespace 。 如果 action 类实现了 Action 接口,那么类名将作为 action 的名字。否则 action 的名字为类名去掉 Action 后缀,第一个字母小写。
还剩30页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享pdf获得金币 ] 2 人已下载

下载pdf

pdf贡献者

umltool

贡献于2010-11-05

下载需要 20 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!