空间站

北极心空

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

Struts 控制器组件负责接受用户请求、更新模型,以及选择合适的视图组件返回给用户。控制器组件有助于将模型层和视图层分离,有了这种分离,就可以在同一个模型的基础上得心应手地开发多种类型的视图。 Struts 控制器组建主要包括:

 

· ActionServlet 组件:充当 Struts 框架的中央控制器。

· RequestProcessor 组件:充当每个子应用模块的请求处理器。

· Action 组件:负责处理一项具体的业务。

 

Struts 框架采用控制器组件来预处理所有的客户请求,这种集中控制方式可以满足 MVC 设计模式的两大需求:

 

·首先,控制器在用户输入数据和模型之间充当媒介 / 翻译者的角色,提供一些通用功能,如安全、登入和其他针对具体用户请求的重要服务,当系统的这些通用功能出现需求变更时,部需要修改整个应用,只需要修改局部的控制器组件即可。

·其次,由于所有的请求都经过控制器过滤,因此可以降低视图组件之间,以及视图组件和模型组件之间的相互依赖关系,提高每个组件的相对独立性。由控制器组件来决定把合适的视图组件返回给用用户,这可以减少视图组件之间直接的,错综复杂的连接关系,使应用更加灵活,便于维护。

 

Struts 框架采用 ActionServlet RequestProcessor 组件进行集中控制,并采用 Action 组件来处理单项业务。

 

 

控制器组件的控制机制

 

Struts 的控制器组件主要完成以下任务:

·接受用户请求

·根据用户请求,调用合适的模型组件来执行相应的业务逻辑。

·获取业务逻辑执行结果。

·根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户。

 

1 Action

 

 org.apache.struts.action.ActionServlet 类是 Struts 框架的核心控制器组件,所有的用户请求都先有 ActionServlet 来处理,然后再由 ActionServlet 把请求转发给其他组件。 Struts 框架只允许在一个应用中配置一个 ActionServlet 类,在应用的生命周期中,仅创建 ActionServlet 类的一个实例,这个 ActionServlet 实例可以同时响应多个用户请求。

 

<!--[if !supportLists]-->(a)   <!--[endif]-->Struts框架初始化过程

<!--[if !supportLists]-->(1)   <!--[endif]-->调用initInternal()方法,初始化Struts框架内在的消息资源,如与系统日志相关的同志、警告和错误消息。

<!--[if !supportLists]-->(2)   <!--[endif]-->调用initOther()方法,从web.xml文件中加载ActionServlet的初始化参数,如config参数。

<!--[if !supportLists]-->(3)   <!--[endif]-->调用initServlet()方法,从web.xml文件中加载ActionServletURL映射信息。此外还会注册web.xmlStruts配置文件所使用的DTD文件,这些DTD文件用来验证web.xmlStruts配置文件的语法。

<!--[if !supportLists]-->(4)   <!--[endif]-->调用initModuleConfig()方法,加载并解析子应用模块的Struts配置文件;创建ModuleConfig对象,把它存储在ServletContext中。

<!--[if !supportLists]-->(5)   <!--[endif]-->调用initModuleMessageResources()方法,加载并初始化默认子应用模块的消息资源:创建MessageResources对象,把它存储在ServletContext中。

<!--[if !supportLists]-->(6)   <!--[endif]-->调用initModuleDataSources()方法,加载并初始化默认子应用模块的数据源。如果在Struts配置文件中没有定义<data-sources>元素,就忽略这一流程。

<!--[if !supportLists]-->(7)   <!--[endif]-->调用InitModulePlugins()方法,加载并初始化默认子应用模块的所有插件。

<!--[if !supportLists]-->(8)   <!--[endif]-->当默认子应用模块被成功地初始化后,如果还包括其他子应用模块,将重复流程(4)(7),分别对其他子应用模块进行初始化。

 

<!--[if !supportLists]-->(b)   <!--[endif]-->ActionServletprocess()方法

ActionServlet 实例接受到 HTTP 请求之后,在 doGet() doPost() 方法都会调用 process() 方法来处理请求。一下是 ActionServlet process() 方法的源代码:

 

protected voidprocess (HttpServletRequest request, HttpServletResponse response)

throwIOException, ServletException {

 

ModuleUtils.getInstance().selectModule(request,getServletContext());

getRequestProcessor(getModuleConfig(request)).process(request,response);

}

 

process() 方法中,首先调用 org.apache.struts.util.ModuleUtils 类的 selectModule() 方法,这个方法选择负责处理当前请求的子应用模块,然后把与子应用模块相关的 ModuleConfig MessageResources 对象存储倒 request 范围中,这使得框架的其余组件可以方便地从 request 范围中读取这些对象,从而获取应用配置信息和消息资源。

process() 方法的第二步操作为获得 RequestProcessor 类的实例,然后调用 RequestProcessor 类的 process() 方法,来完成十几的预处理请求操作。

 

 

<!--[if !supportLists]-->(c)   <!--[endif]-->扩展ActionServlet

Sturts 1.1 之前的版本中, ActionServlet 类本身包含了很多处理请求的代码。从 Struts 1.1 开始,多数功能被移到 org.apache.struts.action.RequestProcessor 类中,以便减轻 ActionServlet 类的控制负担。

 

尽管新版本的 Struts 框架允许在应用中创建矿展 ActionServlet 类的子类,但是这在多数情况下没有必要,因为控制器的多数控制功能位于 RequestProcessor 类中。

 

如果实际应用确实需要创建自己的 ActionServlet 类,则可以创建一个 ActionServlet 的子类,然后在 web.xml 文件中配置这个客户化 ActionServlet 类。

 

如果覆盖了 init() 方法,应该确保首先调用 super.init() ,它保证 ActionServlet 的默认初始化操作被执行。除了覆盖 init() 方法外,事实上,还可以根据十几需要覆盖 ActionServlet 的任何其他方法。

 

 

2 RequestProcessor

 

  对于多应用模块的 Struts 应用,每个子应用模块都有各自的 RequestProcessor 实例。在 ActionServlet process() 方法中,一旦选择了正确的子应用模块,就会调用子应用模块的 RequestProcessor 实例的 process() 方法来处理请求。在 ActionServlet 调用这个方法时,会把当前的 request response 对象传给它。

Struts 框架只允许应用中存在一个 ActionServlet 类,但是可以存在多个客户化的 RequestProcessor 类,每个子应用模块都可以拥有单独的 RequestProcessor 类。如果想修改 RequestProcessor 类的一些默认功能,可以覆盖 RequestProcessor 基类中的相关方法。

 

<!--[if !supportLists]-->(a)   <!--[endif]-->RequestProcessor类的process()方法

RequestProcessor 类的 process() 方法负责实际的预处理请求操作。

RequestProcessor 类的 process() 方法一次执行一下流程:

(1) 调用 processMultipart() 方法。如果 HTTP 请求方式为 POST ,并且请求的 contentType 属性以“ multipart/form-data ”开头,标准的 HttpServletRequest 对象将被重新包装,以方便处理“ multipart ”类型的 HTTP 请求。如果请求方式为 GET ,或者 contentType 属性不是“ multipart ”,就直接返回原始的 HttpServletRequest 对象。

(2) 调用 processPath() 方法,获得请求 URI 的路径,这一信息可用于选择合适的 Struts Action 组件。

(3) 调用 processLocale() 方法,当 ControllerConfig 对象的 locale 属性为 true ,将读取用户请求中包含的 Locale 信息,然后把 Locale 实例保存在 session 范围内。

(4) 调用 processContent() 方法,读取 ControllerConfig 对象的 contentType 属性,然后调用 response.setContentType(contentType) 方法,设置响应结果的文档类型和字符编码。

(5) 调用 processNoCache() 方法,读取 ControllerConfig 对象的 nocache 属性,如果 nocache 属性为 true ,在响应结果中将加入特定的头参数: Pragma Cache-Control Expires ,防止页面被存储在客户浏览器的缓存中。

(6) 调用 processPreprocess() 方法。该方法不执行任何操作,直接返回 true 。子类可以覆盖这个方法,执行客户化的预处理请求操作。

(7) 调用 processMapping() 方法,寻找和用户请求的 URI 匹配的 ActionMapping 。如果不存在这样的 ActionMapping ,则向用户返回恰当的错误消息。

(8) 调用 processRoles() 方法,先判断是否为 Action 配置了安全角色,如果配置了安全角色,就调用 isUserRole() 方法判断当前用户是否具备必需的角色;如果不具备,就结束请求处理流程,向用户返回恰当的错误消息。

(9) 调用 processActionForm() 方法,先判断是否为 ActionMapping 配置了 ActionForm ,如果配置了 ActionForm ,就先从 ActionForm 的存在范围内寻找该 ActionForm 实例;如果不存在,就创建一个实例。接下来把它保存在合适的范围中,保存时使用的属性 key ActionMapping name 属性。

(10) 调用 processActionForm() 方法。如果为 ActionMapping 配置了 ActionForm ,就先调用 ActionForm reset() 方法,再把请求中的表单数据组装到 ActionForm 中。

(11) 调用 processValidate() 方法,如果为 ActionMapping 配置了 ActionForm ,并且 ActionMapping validate 属性为 true ,就调用 ActionForm validate() 方法。如果 validate() 方法返回的 ActionErrors 对象中包含 ActionMessage 对象,说明表单验证失败,就把 ActionErrors 对象存储在 request 范围内,再把请求转发到 ActionMapping input 属性指定的 Web 组件。如果 ActionForm validate() 方法执行表单验证成功,就继续执行下一步请求处理流程。

(12) 调用 processForward() 方法,判断是否在 ActionMapping 中配置了 forward 属性。如果配置了这个属性,就调用 RequestDispatcher forward() 方法,请求处理流程结束,否则继续下一步。

(13) 调用 processInclude() 方法,判断是否在 ActionMapping 中配置了 include 属性。如果配置了这个属性,就调用 RequestDispatcher include() 方法,请求处理流程结束,否则继续下一步。

(14) 调用 processActionCreate() 方法,先判断是否在 Action 缓存中存在这个 Action 实例,如果不存在,就创建一个 Action 实例,把它保存在 Action 缓存中。

(15) 调用 processActionPerform() 方法,该方法再调用 Action 实例的 execute() 方法。 execute() 方法位于 try/catch 代码中,以便捕获异常。

(16) 调用 processActionForward() 方法,把 Action execute() 方法返回的 ActionForward 对象作为参数传给它。 processActionForward() 根据 ActionForward 对象包含的请求转发信息来执行请求转发或重定向。

 

<!--[if !supportLists]-->(b)   <!--[endif]-->扩展RequestProcessor

开发人员可以很方便地创建客户化的 RequestProcessor 类。

Struts 配置文件中, <controller> 元素的 processorClass 属性 RequestProcessor 类。

 

 

3 Action

Action 类是用户请求和业务逻辑之间的桥梁。每个 Action 充当客户的一项业务代理。在 RequestProcessor 类预处理请求时,在创建了 Action 的实例后,就调用自身的 processActionPerform() 方法,该方法再调用 Action 类的 execute() 方法。

Action execute() 方法调用模型的业务方法,完成用户请求的业务逻辑,然后根据执行结果把请求转发给其他合适的 Web 组件。

 

<!--[if !supportLists]-->(a)   <!--[endif]-->Action类缓存

为了确保线程安全 (thread-safe) ,在一个应用的生命周期中, Struts 框架只会为每个 Action 类创建一个 Action 实例。所有的客户请求共享一个 Action 实例,并且所有请求线程可以同时执行它的 execute() 方法。

RequestProcessor 类包含一个 HashMap ,作为存放所有 Action 实例的缓存,每个 Action 实例在缓存中存放的属性 key Action 类名。在 RequestProcessor 类的 processActionCreate() 方法中,首先检查在 HashMap 中是否存在 Action 实例,如果存在,就返回这个实例;否则,就创建一个新的 Action 实例。创建 Action 实例的代码位于同步代码块中,以保证只有一个线程创建 Action 实例。一旦线程创建了 Action 实例并把它存放到 HashMap 中,以后所有的线程就会直接使用这个缓存中的实例。

 

<!--[if !supportLists]-->(b)   <!--[endif]-->ActionForward

Action 类的 execute() 方法返回一个 ActionForward 对象。 ActionForward 对象代表了 Web 资源的逻辑抽象,这里的 Web 资源可以是 JSP 页、 Java Servlet Action 。从 execute() 方法中返回 ActionForward 对象有两种方法:

· execute() 方法中动态创建一个 ActionForward 实例

· Struts 配置文件中配置 <forward> 元素。

        配置了 <forward> 元素后,在 Struts 框架初始化时就会创建存放 <forward> 元素;

   execute() 方法中只需调用 ActionMapping 实例的 findForward() 方法,来获取特定的 ActionForward 实例。 findForward() 方法先调用 findForwardConfig() 方法,在 Action 级别(即 <action> 元素内的 <forward> 子元素)寻找匹配的 ActionForward 对象。如果没有,再在全局级别(即 <global-forwards> 元素内的 <forward> 子元素)中寻找匹配的 ActionForward 对象。如果找到,就返回该 ActionForward 对象。如果 findForward() 方法没有找到匹配的 ActionForward 对象,它不会抛出异常,而是返回 null 。在浏览器端,用户将收到一个空白页。

采用第二种方式,无需在程序中硬编码来指定转发资源的无力路径,而是在配置文件中配置转发资源,程序中秩序引用转发资源的逻辑名即可,这提高了应用的灵活性和可维护性。

 

<!--[if !supportLists]-->(c)   <!--[endif]-->创建支持多线程的Action

Struts 应用的生命周期中,只会为每个 Action 类创建一个实例,所有的客户请求共享这个实例。因此,必需保证在多线程环境中, Action 也能正常工作。保证线程安全的重要元素是在 Action 类中仅仅使用局部变量,谨慎地使用实例变量。

如果在 Action execute() 方法中定义了局部变量,对于每个调用 execute() 方法的线程, Java 虚拟机会在每个线程的堆栈中创建局部变量,因此每个线程拥有独立的局部变量,不会被其他线程共享。当线程执行完 execute() 方法时,它的局部变量就会被销毁。

如果在 Action 类中定义了实例变量,那么在 Action 实例的整个生命周期中,这个实例变量被所有的请求线程共享。因此不能在 Action 类中定义代表特定客户状态的实例变量。

Action 类中定义的实例变量代表了可以被所有请求线程访问的共享资源。为了避免共享资源的竞争,在必要的情况下,需要采用 Java 同步机制对访问共享资源的代码块进行同步。

 

(d)Action 类的安全

在某些情况下,如果 Action 类执行的功能非常重要,则只允许具有特定权限的用户才能访问该 Action 。为了防止未授权的用户来访问 Action ,可以在配置 Action 时指定安全角色。

<action> 元素的 roles 属性指定访问这个 Action 的用户必须具备的安全角色,多个角色之间以逗号隔开。

RequestProcessor 类在预处理请求时会调用自身的 processRoles() 方法,该方法先检查在配置文件中是否未 Action 配置了安全角色,如果配置了安全角色,就调用 HttpServletRequest isUserInRole() 方法,来判断用户是否具备了必要的安全角色。如果不具备,就直接向客户端返回错误。

 

 

 

使用内置的 StrutsAction

 

Struts 提供了一些现成的 Action 类,在 Struts 应用中直接使用这些 Action 类可以大大节省开发时间。

 

1 org.apache.struts.actions.ForwardAction

  JSP 网页中,尽管可以直接通过 <jsp:forward> 标签把请求转发给其他 Web 组件,但是 Struts 框架提倡先把请求转发给控制器,再由控制器来负责请求转发。

 

  有控制器来负责请求转发有以下一些优点:

·控制器具有预处理请求功能,它能够选择正确的子应用模块来处理请求,并且把子应用模块的 ModuleConfig MessageResources 对象存放在 request 范围内。这样,请求转发的目标 Web 组件就可以正常地访问 ModuleConfig MessageResources 对象。

·如果 JSP 页面中包含 HTML 表单,那么控制器能够创建和这个表单对应的 ActionForm 对象,把用户输入表单数据组装到 ActionForm 中。如果 <action> 元素的 validate 属性为 true ,那么还会调用 ActionForm 的表单验证方法。控制器把 ActionForm 对象存放在 request session 范围内,这样请求转发的目标 Web 组件也可以访问 ActionForm

· JSP 网页之间直接相互转发违背了 MVC 的分层原则,按照 MVC 设计思想,控制器负责处理所有请求,然后选择适当的视图组件返回给用户,如果直接让 JSP 相互调用,控制器就失去了流程控制作用。

 

  对于用户自定义的 Action 类,既可以负责请求转发,还可以充当客户端的业务代理,如果仅仅需要 Action 类提供请求转发功能,则可以使用 org.apache.struts.actions.ForwardAction 类。 ForwardAction 类专门用于转发请求,不执行任何其他业务操作。

  ActionServlet 把请求转发给 ForwardAction ForwardAction 再把请求转发给 <action> 元素中 parameter 属性指定的 Web 组件。总之,在 Web 组件之间通过 ForwardAction 类来进行请求转发,可以充分利用 Struts 控制器的预处理请求功能。此外,也可以通过 <action> 元素的 forward 属性来实现请求转发。

 

2 org.apache.struts.actions.IncludeAction

  JSP 网页中,尽管可以直接通过 <include> 指令包含另一个 Web 组件,但是 Struts 框架提倡先把请求转发给控制器,再由控制器来负责包含其他 Web 组件。 IncludeAction 类提供了包含其他 Web 组件的功能。与 ForwardAction 一样, Web 组件通过 IncludeAction 类来包含另一个 Web 组件,可以充分利用 Struts 控制器的预处理功能。

<action> paramter 属性指定需要包含的 Web 组件。此外,也可以通过 <action> 元素的 include 属性来包含 Web 组件。

 

3 org.apache.struts.actions.DispatchAction

  通常,在一个 Action 类中,只能完成一种业务操作,如果希望在同一个 Action 类中完成一组相关的业务操作,可以使用 DispatchAction 类。

  创建一个扩展 DispatchAction 类的子类,不必覆盖 execute() 方法,而是创建一些实现实际业务操作的方法,这些业务方法都应该和 execute() 方法具有同样的方法签名,即他们的参数和返回类型都应该相同,此外也应该声明抛出 Exception

  在配置 DispatchAction 类时,需要把 parameter 属性设置为“ method ”。设置之后,当用户请求访问 DispatchAction 时,应该提供 method 请求参数。

 

4 org.apache.struts.actions.LookupDispatchAction

LookupDispatchAction 类是 DispatchAction 的子类,在 LookupDispatchAction 类中也可以定义多个业务方法。通常 LookupDispatchAction 主要应用于在一个表单中有多个提交按钮,而这些按钮又有一个共同的名字的场合,这些按钮的名字和具体的 ActionMapping parameter 属性值相对应。

Struts 配置文件中配置 LookUpDispatchAction

<action> 元素中,设置 parameter 属性时,需要使它和 <html:submit> 标签的 property 属性保持一致。

 

5 org.apache.struts.actions.SwitchAction

SwitchAction 类用于子应用模块之间的切换。对于请求访问 SwitchAction URL ,需要提供两个参数:

· prefix :指定子应用模块的前缀,以“ / ”开头,默认子应用模块的前缀为空字符串“”。

· page :指定被请求 Web 组件的 URI ,只需指定相对于被切换后的子应用模块的相对路径。

 

 

利用 Token 解决重复提交

 

  在某些情况下,如果用户对同一个 HTML 表单多次提交, Web 应用必需能够判断用户的重复提交行为,以作出相应的处理。

  可以利用同步令牌( Token )机制来解决 Web 应用中重复提交的问题, Struts 也给出了一个参考实现。 org.apache.struuts.action.Action 类中提供了一系列和 Token 相关的方法:

  · protected boolean isTokenValid(javax.servlet.http.HttpServletRequestrequest)

判断存储在当前用户会话中的令牌值和请求参数中的令牌值是否匹配。如果匹配,就返回 true ,否则返回 false 。只要符合一下情况之一,就返回 false

·不能存在 HttpSession 对象。

·在 session 范围内没有保存令牌值。

·在请求参数中没有令牌值

·存储在当前用户 session 范围内的令牌值和请求参数中的令牌值不匹配。

  · protected voidresetToken(javax.servlet.http.HttpServletRequest request)

从当前 session 范围内删除令牌属性。

  · protected voidsaveToken(javax.servlet.http.HttpServletRequest request)

创建一个新的令牌,并把它保存在当前 session 范围内。如果 HttpSession 对象不存在,就首先创建一个 HttpSession 对象。

 

  具体的 Token 处理逻辑由 org.apache.struts.util.TokenProcessor 类来完成,它的 generateToken(request) 方法根据用户会话 ID 和当前系统时间来生成一个唯一的令牌。

 

 

实用类

 

  在创建 Web 应用时,有许多检索和处理 HTTP 请求的操作时重复的。为了提高应用代码的可重用性,减少冗余, Struts 框架提供了一组提供这些通用功能的实用类,它们可以被所有的 Struts 应用共享。

 

1 RequestUtils

org.apache.struts.util.RequestUtils Struts 控制框架提供了一些处理请求的通用方法。 RequestUtils 类中的所有方法都是线程安全的,在这个类中没有定义任何实例变量,所有的方法都被声明为 static 类型。因此,不必创建 RequestUtils 类的实例,可以直接通过类名来访问这些方法。

RequestUtils 类的常用方法

方法

描述

absoluteURL(HttpServletRequest request,String utl)

创建并返回绝对 URL 路径,参数 path 指定相对于上下文( context-relative )的相对路径

createActionForm(HttpServletRequest request, ActionMapping mapping, ModuleConfig moduleConfig, ActionServlet servlet)

先从 request session 范围内查找该 ActionForm ,如果存在,就直接将它返回,否则先创建它的实例,把它保存在 request session 范围内,再把它返回。 mapping 参数包含了 <action> 元素的配置信息,例如它的 scope 属性指定 ActionForm 的范围

populate(Object bean, HttpServletRequest request)

HTTP 请求中的参数值组装到指定的 JavaBean 中,请求的参数名和 JavaBean 的属性名匹配。当 ActionServlet 把用户输入的表单数据组装到 ActionForm 中时,就调用此方法

 

2 TagUtils

org.apache.struts.taglib.TagUtil 类为 JSP 标签处理类提供了许多实例方法,如果要使用 TagUtils 类,首先应调用 TagUtils.getInstance() 方法,获得 TagUtils 类的实例, getInstance() 方法为静态方法。

TagUtils 类的常用方法

方法

描述

getInstance()

返回一个 TagUtils 的实例。该方法为静态的,如果要在程序中获得 TagUtils 的实例,可以调用 TagUtils.getInstance() 方法

getActionMessages(PageContext pageContext, String paramName)

调用 pageContext.findAttribute(paramName) 方法,从 page, request, session application 范围内减缩并返回 ActionMessages 对象,参数 paramName 指定检索 ActionMessages 对象的属性 key

getModuleConfig(PageContext pageContext)

返回 ModuleConfig 对象,如果不存在,就返回 null

lookup(PageContext pageContext, String name, String scope)

返回特定范围内的 JavaBean 。参数 scope 指定 JavaBean 的所在范围, name 参数指定 JavaBean 在特定范围内的名字

message(PageContext pageContext, String bundle, String locale, String key)

从指定的 Resource Bundle 中返回一条消息文本,参数 locale 指定 Locale ,参数 key 指定消息 key

write(PageContext pageContext, String text)

向网页上输入特定的文本,参数 text 用于指定文本内容

 

3 ModuleUtils

org.apache.struts.taglib.ModuleUtils 类提供了处理子应用模块的实用方法,如果要使用 ModuleUtils 类,首先应该调用 ModuleUtils.getInstance() 方法,获得 ModuleUtils 类的实例, getInstance() 方法为静态方法。

ModuleUtils 类的常用方法

方法

描述

getInstance()

返回一个 ModuleUtils 的实例。该方法为静态的,如果要在程序中获得 ModuleUtils 的实例,可以调用 ModuleUtils.getInstance() 方法。

getModuleConfig(javax.servlet.http.HttpervletRequest request)

request 范围内检索并返回 ModuleConfig 对象

getModuleConfig(java.lang.String prefix, javax.servlet.ServletContext context)

application 范围内检索并返回 ModuleConfig 对象,参数 prefix 指定子应用模块名的前缀

getModuleName(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)

返回请求访问的子应用模块的名字

selectModule(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)

选择请求访问的子应用模块,把和子应用模块相关的 ModuleConfig MessageResources 对象存储到 request 范围中

 

4 Globals

org.apache.struts.Globals 类提供一组公共类型的静态常量,被用作在特定范围内存放 JavaBean 的属性 key

Globals 类中定义的常量

方法

描述

ACTION_SERVLET_KEY

代表在 application 范围内存放 ActionServlet 实例的属性 key

DATA_SOURCE_KEY

代表在 application 范围内存放默认的 DataSource 实例的属性 key

ERROR_KEY

代表在 request 范围内存放 ActionErrors 实例的属性 key

LOCALE_KEY

代表在 session 范围内存放 Locale 实例的属性 key

MAPPING_KEY

代表在 request 范围内存放 ActionMapping 实例的属性 key

MESSAGE_KEY

代表在 request 范围内存放 ActionMessages 实例的属性 key

MESSAGES_KEY

代表在 application 范围内存放各个子应用模块的 MessageResources 实例的属性 key 的前缀

MODULE_KEY

代表在 application 范围内存放各个子应用模块的 ModuleConfig 实例的属性 key 的前缀

REQUEST_PROCESSOR_KEY

代表在 application 范围内存放各个子应用模块的 RequestProcessor 实例的属性 key 的前缀



阅读材料:《精通Struts:基于MVC的Java Web设计与开发》


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=372708

posted on 2006-12-20 16:08 芦苇 阅读(412) 评论(0)  编辑  收藏 所属分类: Struts

只有注册用户登录后才能发表评论。


网站导航: