Webwork 自带的 RestfulActionMapper弱了点
首先, 像图片,js,css 等资源文件不大好印射(会出现 action 找不到错误)
不支持namespace
反向解析url 时,忽略了除id 以外的变量
于是我写了一个稍微好点的 RestfulActionMapper, 也符合了我现在项目的要求
其代码如下
java 代码
- package com.longthsoft.hellomobile.webwork;
-
- import java.net.URLDecoder;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- import java.util.Map.Entry;
-
- import javax.servlet.http.HttpServletRequest;
-
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
-
- import com.opensymphony.webwork.RequestUtils;
- import com.opensymphony.webwork.dispatcher.mapper.ActionMapper;
- import com.opensymphony.webwork.dispatcher.mapper.ActionMapping;
- import com.opensymphony.webwork.dispatcher.mapper.RestfulActionMapper;
- import com.opensymphony.xwork.config.ConfigurationManager;
- import com.opensymphony.xwork.config.RuntimeConfiguration;
-
- public class BetterRestfulActionMapper implements ActionMapper {
-
- protected static final Log LOG = LogFactory.getLog(RestfulActionMapper.class);
- private static final String ID = "id";
-
- public ActionMapping getMapping(HttpServletRequest request) {
- String uri = RequestUtils.getServletPath(request);
- if (uri.indexOf('.', uri.length() - 5) != -1) {
- return null;
- }
-
- int pos1 = uri.indexOf('/', 1);
- if (pos1 == -1) {
- return null;
- }
- String part1 = uri.substring(1, pos1);
-
- String namespace = "";
- String actionName;
- int pos2 = uri.indexOf('/', pos1 + 1);
- if (pos2 == -1) {
- actionName = part1;
- uri = uri.substring(pos1 + 1);
- } else {
- RuntimeConfiguration config = ConfigurationManager.getConfiguration()
- .getRuntimeConfiguration();
- String part2 = uri.substring(pos1 + 1, pos2);
- if (config.getActionConfigs().containsKey("/" + part1)) {
- namespace = "/" + part1;
- actionName = part2;
- uri = uri.substring(pos2 + 1);
- } else {
- actionName = part1;
- uri = uri.substring(pos1 + 1);
- }
- }
-
- List<String> list = new ArrayList<String>(Arrays.asList(uri.split("/")));
- if (list.size() % 2 == 1) {
- list.add(0, ID);
- }
- HashMap<String, String> params = new HashMap<String, String>();
- for (int i = 0; i < list.size() / 2; ++i) {
- try {
- String name = URLDecoder.decode(list.get(2 * i), "UTF-8");
- String value = URLDecoder.decode(list.get(2 * i + 1), "UTF-8");
- params.put(name, value);
- } catch (Exception ex) {
- LOG.warn(ex);
- }
- }
-
- return new ActionMapping(actionName, namespace, "", params);
- }
-
- public String getUriFromActionMapping(ActionMapping mapping) {
- String uri = mapping.getNamespace() + "/" + mapping.getName();
- Map params = mapping.getParams();
- if (params.containsKey(ID)) {
- uri += "/" + params.get(ID);
- }
- for (Object o : mapping.getParams().entrySet()) {
- Entry entry = (Entry) o;
- String name = (String) entry.getKey();
- if (!name.equals(ID)) {
- uri += "/" + name + "/" + entry.getValue();
- }
- }
- return uri;
- }
- }
分享到:
相关推荐
7. **标签库**:WebWork 自带一套丰富的标签库,可以方便地在JSP页面中使用,减少硬编码,提高开发效率。 8. **持久化支持**:WebWork 可以与各种持久化框架如Hibernate、iBatis等集成,方便进行数据库操作。 9. *...
WebWork 是一个基于Java的开源MVC(Model-View-Controller)框架,它主要用于构建企业级的Web应用程序。WebWork1.4是该框架的一个较早版本,它为开发者提供了强大的功能,包括动作映射、数据绑定、异常处理、国际化...
WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...
这套文档涵盖了以下几个主要的知识点: 1. **WebWork基础**:WebWork的核心概念,如Action、Interceptors(拦截器)、Results和Parameters等,以及它们如何协同工作来实现业务逻辑和视图呈现的分离。理解这些基础...
WebWork2.0是一款基于Java的企业级Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)架构支持,旨在简化Web应用程序的开发流程,提高代码的可维护性和可扩展性。本讲解将围绕WebWork2.0的核心概念、...
2. **WebWork2 IoC**:WebWork2 自带了简单的IoC功能,允许在 `xwork.xml` 中配置 Action 依赖的 Bean。例如,`<external-ref>` 标签用于声明 Action 对 DAO 类的依赖。 3. **集成步骤**: - **下载集成库**:需要...
WebWork 是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中被广泛使用。WebWork 1 和 WebWork 2 都是该框架的不同版本,每个版本都有其特性和改进。 WebWork 1 是早期的版本,提供了基础的MVC...
WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在早期的Web开发中扮演了重要的角色,尤其是在Struts之前或作为其替代品出现。WebWork提供了许多先进的特性,如动作拦截器、类型转换、强大的异常处理...
WebWork2是一款基于Java的MVC(Model-View-Controller)框架,用于构建Web应用程序。在Web开发领域,它提供了一种结构化和模块化的开发方式,帮助开发者更高效地组织代码并实现业务逻辑。本指南将深入探讨WebWork2的...
**Webwork2 开发指南** Webwork2 是一个基于Java的开源MVC(Model-View-Controller)框架,专门用于构建动态、交互式的Web应用程序。它提供了强大的数据绑定、动作控制、异常处理以及国际化等功能,使得开发者能够...
WebWork是一个基于Java的开源MVC(模型-视图-控制器)框架,它在Web应用程序开发中扮演着重要角色。这个“webWork中文教程”旨在帮助开发者深入理解WebWork框架的原理、特性和实践方法。下面,我们将详细介绍WebWork...
WebWork是一个古老的Java Web开发框架,它在早期的MVC(模型-视图-控制器)架构中占有重要地位,为开发者提供了丰富的功能和强大的动作映射能力。在深入理解WebWork源码之前,我们首先需要了解一些基本概念。 1. **...
在"webWork2开发指南"中,你将学习到以下关键知识点: 1. **MVC模式**:WebWork2的核心设计就是MVC模式,它将应用程序分为三个主要部分:模型(Model)处理业务逻辑,视图(View)负责显示数据,控制器(Controller...
WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包
**WebWork教程开发资料** WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建Web应用程序。本教程是针对WebWork 0.90版本的初稿,涵盖了大部分章节,但未包括"实战G-Roller-WW"和"WebWork与其它开源...
它可能会涵盖以下知识点: 1. **安装与配置**:详述了在不同操作系统(如Linux、Unix或Windows)上安装Webwork的步骤,包括服务器设置、数据库连接和域名配置等。 2. **系统架构**:解释Webwork的基本工作原理,如...
### WebWork 2.0与Struts 2.0:框架演进与创新 #### 框架概览 WebWork框架,最初由OpenSymphony组织开发,是Java Web应用程序中MVC架构的一个重要实现。随着时间的推移,WebWork框架经历了重大的变革,特别是在...