`

Struts 分发机制

阅读更多

Struts分发机制

简介

DispatchAction就是在struts-config中用parameter参数配置一个表单字段名,这个字段的值就是最终替代execute被调用的方法. 例如parameter="method"而request.getParameter("method")="save",其中"save"就是MethodName。struts的请求将根据parameter被分发到"save"或者"edit"或者什么。但是有一点,save()或者edit()等方法的声明和execute必须一模一样。

LookupDispatchAction继承DispatchAction, 用于对同一个页面上的多个submit按钮进行不同的响应。其原理是,首先用MessageResource将按钮的文本和资源文件的key相关联,例如button.save=保存;然后再复写getKeyMethodMap(), 将资源文件的key和MethodName对应起来, 例如map.put("button.save", "save"); 其配置方法和DispatchAction是一样的, 使用时要这么写:
<html:submit property="method">
  <bean:message key="button.save"/>
</html:submit>

LookupDispatchAction的使用

1) 类编写规范

BaseAction继承LookupDispatchAction,且必须实现方法protected Map getKeyMethodMap()。这个方法将构建资源key和方法名称对,放到Map里面返回。代码如下:

    /* (非 Javadoc)
     * @see org.apache.struts.actions.LookupDispatchAction#getKeyMethodMap()
     */
    protected Map getKeyMethodMap() {
        Map map = new HashMap();
        String pkg = this.getClass().getPackage().getName();
        ResourceBundle methods =
                ResourceBundle.getBundle(pkg + ".LookupMethods");

        Enumeration keys = methods.getKeys();
    
        while (keys.hasMoreElements()) {
            String key = (String) keys.nextElement();
            map.put(key, methods.getString(key));
        }    

        return map;
    }

2) 资源文件

这个例子中,将资源key和方法名称对放到资源文件LookupMethods.properties中。

资源文件LookupMethods.properties的内容如下:

button.edit=edit
button.delete=delete
......

然后,在struts的MessageResource使用的资源文件如 ApplicationResource.properties 中添加资源key的值:

button.edit=编辑
button.delete=删除
......

当然必须用ascii2native转换成unicode。

3) 页面编写

然后界面中就可以使用以下方式提交:

<html:submit property="method">
  <bean:message key="button.edit"/>
</html:submit>

或者

<html:submit property="method">
 
编辑
</html:submit>

4) 配置

method属性是指定的分发属性,在struts-config.xml中配置。action的配置应该加上parameter="method"来指定。如:

  <action  path="/customer/customer"  
                
type="com.demo.order.actions.CustomerAction"  
                
name="customerForm"  
                
parameter="method"  
                
input="add"
                unknown="false"
                validate="true"
                >
            <forward  name="view"  path="model.customer.view">
            </forward>
            <forward  name="add"  path="model.customer.add">
            </forward>
            <forward  name="list"  path="model.customer.list">
            </forward>

        </action>

配置好后,按上面所描述的方式提交,BaseAction类将分几步执行:

  1. 从配置中取得parameter属性的值,这里为“method”。
  2. 再按method找到提交的属性中取得method属性的值,这里为“编辑”。
  3. 从MessageResource使用的资源文件中取得“编辑”对应的key,这里为“button.edit”。
  4. 从getKeyMethodMap方法返回的Map中取得改key值对应的方法名称,这里为“edit”。
  5. 调用BaseAction类的方法edit。
分享到:
评论

相关推荐

    一个自己写的用struts分发实现的ssh

    在"一个自己写的用struts分发实现的ssh"项目中,开发者尝试自定义了Struts 的Action 分发机制来实现SSH 的整合。 首先,让我们深入了解Struts 分发。在Struts 中,Action 分发是核心控制器DispatcherServlet 的工作...

    struts2运行机制

    ### Struts2运行机制详解 #### 一、Struts2框架概述 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它为开发者提供了构建可扩展、易于维护的Web应用程序的工具。Struts2不仅继承了...

    Struts简单机制.txt

    ### Struts简单机制知识点解析 #### 一、Struts框架简介 Struts是Apache软件基金会Jakarta项目中的一个开源子项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,主要用于简化Web应用程序...

    struts与struts2的区别

    Struts1是基于ActionServlet的早期MVC框架,它将请求分发到特定的Action,然后通过配置文件(struts-config.xml)来管理动作和视图的映射。而Struts2则是在Struts1的基础上进行了全面改进,采用了拦截器...

    Struts2视频教程

    同时也可以配置下载功能,满足文件分发的需求。 - **权限控制**:利用拦截器实现细粒度的权限控制,确保只有授权用户才能访问敏感资源。 #### 六、Struts2源码分析 - **深入源码**:针对某些重要知识点,比如...

    struts-2.3.24所有架包

    6. **强大的表单和验证机制**:Struts2提供了一套完整的表单处理和验证机制,通过注解或者XML配置即可实现。 7. **模板技术支持**:Struts2可以与FreeMarker、JSP、Velocity等模板技术无缝结合,方便生成动态视图。...

    张孝祥Struts视频源代码

    6. **异常处理**:Struts中的错误和异常处理机制,以及如何自定义错误页面。 7. **国际化与本地化**:如何实现多语言支持,让应用适应不同地区的用户。 8. **实践案例**:通过具体的项目实例,演示如何使用Struts...

    struts2.3.4源代码

    1. **FilterDispatcher**: 这是Struts2框架的入口点,负责拦截HTTP请求并根据配置将请求分发到相应的Action。 2. **StrutsPrepareAndExecuteFilter**: 从Struts2.2开始,FilterDispatcher被这个新的过滤器替代,它...

    struts2 ,struts2 demo

    Struts2的核心是Action,它负责处理用户请求,并通过Interceptor(拦截器)机制来增强Action的功能。此外,Struts2支持多种视图技术,如JSP、FreeMarker和Velocity,以及数据绑定和类型转换,极大地提高了开发效率。...

    struts2讲义

    ### Struts2框架入门知识点详解 #### 一、Struts2框架概述 ##### 1.1 Struts2简介 Struts2是一个基于MVC...此外,Struts2框架还提供了丰富的插件和扩展机制,允许开发者根据具体的应用场景定制和优化框架行为。

    struts2 struts2.0.9 实例 app下载

    8. **FilterDispatcher**:作为Struts2的核心组件,FilterDispatcher负责接收请求并分发到相应的Action,实现了与Servlet容器的解耦。 下载Struts2.0.9的app是为了搭建一个基础环境,进行实践学习或者开发项目。...

    Struts2的工作机制原理分析及实例整理.pdf

    2. **Struts2框架** - 包含了视图组件、配置管理、分发逻辑等,用于构建和管理整个应用程序。 #### 四、Struts2的关键包和类 - **org.apache.struts2.components** - 视图组件封装,提供了多种组件如`updownselect...

    Struts2.0学习系列 以及 Struts2.0安装包

    7. **FilterDispatcher**:Struts2的前端控制器,它监听特定的HTTP请求,根据配置文件分发到对应的Action。 8. **插件机制**:Struts2支持丰富的插件扩展,如 strut2-dojo-plugin 提供了与Dojo库的集成, strut2-...

    struts2-src

    用户请求首先会被Struts2的前端控制器(DispatcherServlet)捕获,然后根据配置文件(struts.xml)中的映射信息,将请求分发到相应的Action进行处理。 2. **拦截器(Interceptor)**:Struts2的核心特性之一是拦截...

    struts框架原理图

    根据提供的文件信息,“Struts框架原理图”主要阐述了Struts框架的工作原理、流程以及页面间的跳转机制。为了更好地理解和应用Struts框架,本文将深入解析这些关键知识点。 ### Struts框架概述 Struts是一个开源的...

    struts代码

    通过定义`FilterDispatcher`,可以确保所有进入应用的HTTP请求都会经过Struts2框架的处理,进而实现对请求的拦截、解析和分发。 ```xml &lt;filter-name&gt;struts2 &lt;filter-class&gt;org.apache.struts2.dispatcher....

    struts-1.3.9 源码

    通过分析Struts 1.3.9的源码,开发者可以学习到如何设计一个MVC框架,了解其请求处理流程、视图渲染机制以及如何通过配置文件定制行为。此外,这也有助于开发者在遇到问题时能够追溯源代码,找到问题的根源,或者为...

    struts2 PPT 张冰

    其主要特性包括拦截器机制、强大的动作调度、丰富的表单验证和结果映射等。 在`struts框架结构`中,Struts2的核心组件包括: 1. **Action**:业务逻辑的执行单元,负责处理请求并生成响应。 2. **Interceptor**:...

Global site tag (gtag.js) - Google Analytics