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类将分几步执行:
- 从配置中取得parameter属性的值,这里为“method”。
- 再按method找到提交的属性中取得method属性的值,这里为“编辑”。
- 从MessageResource使用的资源文件中取得“编辑”对应的key,这里为“button.edit”。
- 从getKeyMethodMap方法返回的Map中取得改key值对应的方法名称,这里为“edit”。
- 调用BaseAction类的方法edit。
分享到:
相关推荐
在"一个自己写的用struts分发实现的ssh"项目中,开发者尝试自定义了Struts 的Action 分发机制来实现SSH 的整合。 首先,让我们深入了解Struts 分发。在Struts 中,Action 分发是核心控制器DispatcherServlet 的工作...
### Struts2运行机制详解 #### 一、Struts2框架概述 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它为开发者提供了构建可扩展、易于维护的Web应用程序的工具。Struts2不仅继承了...
### Struts简单机制知识点解析 #### 一、Struts框架简介 Struts是Apache软件基金会Jakarta项目中的一个开源子项目,它是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,主要用于简化Web应用程序...
Struts1是基于ActionServlet的早期MVC框架,它将请求分发到特定的Action,然后通过配置文件(struts-config.xml)来管理动作和视图的映射。而Struts2则是在Struts1的基础上进行了全面改进,采用了拦截器...
同时也可以配置下载功能,满足文件分发的需求。 - **权限控制**:利用拦截器实现细粒度的权限控制,确保只有授权用户才能访问敏感资源。 #### 六、Struts2源码分析 - **深入源码**:针对某些重要知识点,比如...
6. **强大的表单和验证机制**:Struts2提供了一套完整的表单处理和验证机制,通过注解或者XML配置即可实现。 7. **模板技术支持**:Struts2可以与FreeMarker、JSP、Velocity等模板技术无缝结合,方便生成动态视图。...
6. **异常处理**:Struts中的错误和异常处理机制,以及如何自定义错误页面。 7. **国际化与本地化**:如何实现多语言支持,让应用适应不同地区的用户。 8. **实践案例**:通过具体的项目实例,演示如何使用Struts...
1. **FilterDispatcher**: 这是Struts2框架的入口点,负责拦截HTTP请求并根据配置将请求分发到相应的Action。 2. **StrutsPrepareAndExecuteFilter**: 从Struts2.2开始,FilterDispatcher被这个新的过滤器替代,它...
Struts2的核心是Action,它负责处理用户请求,并通过Interceptor(拦截器)机制来增强Action的功能。此外,Struts2支持多种视图技术,如JSP、FreeMarker和Velocity,以及数据绑定和类型转换,极大地提高了开发效率。...
### Struts2框架入门知识点详解 #### 一、Struts2框架概述 ##### 1.1 Struts2简介 Struts2是一个基于MVC...此外,Struts2框架还提供了丰富的插件和扩展机制,允许开发者根据具体的应用场景定制和优化框架行为。
8. **FilterDispatcher**:作为Struts2的核心组件,FilterDispatcher负责接收请求并分发到相应的Action,实现了与Servlet容器的解耦。 下载Struts2.0.9的app是为了搭建一个基础环境,进行实践学习或者开发项目。...
2. **Struts2框架** - 包含了视图组件、配置管理、分发逻辑等,用于构建和管理整个应用程序。 #### 四、Struts2的关键包和类 - **org.apache.struts2.components** - 视图组件封装,提供了多种组件如`updownselect...
7. **FilterDispatcher**:Struts2的前端控制器,它监听特定的HTTP请求,根据配置文件分发到对应的Action。 8. **插件机制**:Struts2支持丰富的插件扩展,如 strut2-dojo-plugin 提供了与Dojo库的集成, strut2-...
用户请求首先会被Struts2的前端控制器(DispatcherServlet)捕获,然后根据配置文件(struts.xml)中的映射信息,将请求分发到相应的Action进行处理。 2. **拦截器(Interceptor)**:Struts2的核心特性之一是拦截...
根据提供的文件信息,“Struts框架原理图”主要阐述了Struts框架的工作原理、流程以及页面间的跳转机制。为了更好地理解和应用Struts框架,本文将深入解析这些关键知识点。 ### Struts框架概述 Struts是一个开源的...
通过定义`FilterDispatcher`,可以确保所有进入应用的HTTP请求都会经过Struts2框架的处理,进而实现对请求的拦截、解析和分发。 ```xml <filter-name>struts2 <filter-class>org.apache.struts2.dispatcher....
通过分析Struts 1.3.9的源码,开发者可以学习到如何设计一个MVC框架,了解其请求处理流程、视图渲染机制以及如何通过配置文件定制行为。此外,这也有助于开发者在遇到问题时能够追溯源代码,找到问题的根源,或者为...
其主要特性包括拦截器机制、强大的动作调度、丰富的表单验证和结果映射等。 在`struts框架结构`中,Struts2的核心组件包括: 1. **Action**:业务逻辑的执行单元,负责处理请求并生成响应。 2. **Interceptor**:...