`
bencode
  • 浏览: 109623 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

webwork自带的RestfulActionMapper弱了点

    博客分类:
  • WEB
阅读更多
Webwork 自带的 RestfulActionMapper弱了点

首先, 像图片,js,css 等资源文件不大好印射(会出现 action 找不到错误)

不支持namespace

反向解析url 时,忽略了除id 以外的变量

于是我写了一个稍微好点的 RestfulActionMapper, 也符合了我现在项目的要求

其代码如下

java 代码
 
  1. package com.longthsoft.hellomobile.webwork;  
  2.   
  3. import java.net.URLDecoder;  
  4. import java.util.ArrayList;  
  5. import java.util.Arrays;  
  6. import java.util.HashMap;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9.   
  10. import java.util.Map.Entry;  
  11.   
  12. import javax.servlet.http.HttpServletRequest;  
  13.   
  14. import org.apache.commons.logging.Log;  
  15. import org.apache.commons.logging.LogFactory;  
  16.   
  17. import com.opensymphony.webwork.RequestUtils;  
  18. import com.opensymphony.webwork.dispatcher.mapper.ActionMapper;  
  19. import com.opensymphony.webwork.dispatcher.mapper.ActionMapping;  
  20. import com.opensymphony.webwork.dispatcher.mapper.RestfulActionMapper;  
  21. import com.opensymphony.xwork.config.ConfigurationManager;  
  22. import com.opensymphony.xwork.config.RuntimeConfiguration;  
  23.   
  24. public class BetterRestfulActionMapper implements ActionMapper {  
  25.       
  26.     protected static final Log LOG = LogFactory.getLog(RestfulActionMapper.class);  
  27.     private static final String ID = "id";   
  28.   
  29.     public ActionMapping getMapping(HttpServletRequest request) {  
  30.         String uri = RequestUtils.getServletPath(request);  
  31.         if (uri.indexOf('.', uri.length() - 5) != -1) {  
  32.             return null;  
  33.         }  
  34.           
  35.         int pos1 = uri.indexOf('/', 1);  
  36.         if (pos1 == -1) {  
  37.             return null;  
  38.         }  
  39.         String part1 = uri.substring(1, pos1);  
  40.           
  41.         String namespace = "";  
  42.         String actionName;  
  43.         int pos2 = uri.indexOf('/', pos1 + 1);  
  44.         if (pos2 == -1) {  
  45.             actionName = part1;  
  46.             uri = uri.substring(pos1 + 1);  
  47.         } else {  
  48.             RuntimeConfiguration config = ConfigurationManager.getConfiguration()  
  49.                 .getRuntimeConfiguration();  
  50.             String part2 = uri.substring(pos1 + 1, pos2);  
  51.             if (config.getActionConfigs().containsKey("/" + part1)) {  
  52.                 namespace = "/" + part1;  
  53.                 actionName = part2;  
  54.                 uri = uri.substring(pos2 + 1);  
  55.             } else {  
  56.                 actionName = part1;  
  57.                 uri = uri.substring(pos1 + 1);  
  58.             }  
  59.         }  
  60.           
  61.         List<String> list = new ArrayList<String>(Arrays.asList(uri.split("/")));  
  62.         if (list.size() % 2 == 1) {  
  63.             list.add(0, ID);  
  64.         }  
  65.         HashMap<String, String> params = new HashMap<String, String>();  
  66.         for (int i = 0; i < list.size() / 2; ++i) {  
  67.             try {  
  68.                 String name = URLDecoder.decode(list.get(2 * i), "UTF-8");  
  69.                 String value = URLDecoder.decode(list.get(2 * i + 1), "UTF-8");  
  70.                 params.put(name, value);  
  71.             } catch (Exception ex) {  
  72.                 LOG.warn(ex);  
  73.             }  
  74.         }  
  75.           
  76.         return new ActionMapping(actionName, namespace, "", params);  
  77.     }  
  78.   
  79.     public String getUriFromActionMapping(ActionMapping mapping) {  
  80.         String uri = mapping.getNamespace() + "/" + mapping.getName();  
  81.         Map params = mapping.getParams();  
  82.         if (params.containsKey(ID)) {  
  83.             uri += "/" + params.get(ID);  
  84.         }  
  85.         for (Object o : mapping.getParams().entrySet()) {  
  86.             Entry entry = (Entry) o;  
  87.             String name = (String) entry.getKey();  
  88.             if (!name.equals(ID)) {  
  89.                 uri += "/" + name + "/" + entry.getValue();  
  90.             }  
  91.         }  
  92.         return uri;  
  93.     }  
  94. }  
分享到:
评论

相关推荐

    webwork

    7. **标签库**:WebWork 自带一套丰富的标签库,可以方便地在JSP页面中使用,减少硬编码,提高开发效率。 8. **持久化支持**:WebWork 可以与各种持久化框架如Hibernate、iBatis等集成,方便进行数据库操作。 9. *...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    WebWork 是一个基于Java的开源MVC(Model-View-Controller)框架,它主要用于构建企业级的Web应用程序。WebWork1.4是该框架的一个较早版本,它为开发者提供了强大的功能,包括动作映射、数据绑定、异常处理、国际化...

    WebWork_开发指南

    ### WebWork 开发指南知识点详解 #### 一、WebWork框架概述 - **WebWork**:WebWork 是一款用于构建企业级 Java Web 应用程序的框架,它以模型-视图-控制器(MVC)架构为基础,为开发者提供了一种更加灵活的方式来...

    WEBWORK

    WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...

    WebWork docs 2 -- webWork 详细的说明文档

    这套文档涵盖了以下几个主要的知识点: 1. **WebWork基础**:WebWork的核心概念,如Action、Interceptors(拦截器)、Results和Parameters等,以及它们如何协同工作来实现业务逻辑和视图呈现的分离。理解这些基础...

    WebWork2.0讲解说明

    WebWork2.0是一款基于Java的企业级Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)架构支持,旨在简化Web应用程序的开发流程,提高代码的可维护性和可扩展性。本讲解将围绕WebWork2.0的核心概念、...

    spring与webwork框架集成

    2. **WebWork2 IoC**:WebWork2 自带了简单的IoC功能,允许在 `xwork.xml` 中配置 Action 依赖的 Bean。例如,`&lt;external-ref&gt;` 标签用于声明 Action 对 DAO 类的依赖。 3. **集成步骤**: - **下载集成库**:需要...

    webwork的jar包

    WebWork 是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中被广泛使用。WebWork 1 和 WebWork 2 都是该框架的不同版本,每个版本都有其特性和改进。 WebWork 1 是早期的版本,提供了基础的MVC...

    webwork_框架文档

    WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在早期的Web开发中扮演了重要的角色,尤其是在Struts之前或作为其替代品出现。WebWork提供了许多先进的特性,如动作拦截器、类型转换、强大的异常处理...

    webwork2开发指南

    WebWork2是一款基于Java的MVC(Model-View-Controller)框架,用于构建Web应用程序。在Web开发领域,它提供了一种结构化和模块化的开发方式,帮助开发者更高效地组织代码并实现业务逻辑。本指南将深入探讨WebWork2的...

    Webwork Web开发框架

    ### WebWork Web开发框架知识点详解 #### 一、WebWork框架概述 - **定义与特点**:WebWork是一个由OpenSymphony组织开发的MVC(Model-View-Controller)架构的J2EE Web开发框架。它专注于组件化设计和代码重用,...

    Webwork2开发指南

    **Webwork2 开发指南** Webwork2 是一个基于Java的开源MVC(Model-View-Controller)框架,专门用于构建动态、交互式的Web应用程序。它提供了强大的数据绑定、动作控制、异常处理以及国际化等功能,使得开发者能够...

    webWork

    WebWork是一个基于Java的开源MVC(模型-视图-控制器)框架,它在Web应用程序开发中扮演着重要角色。这个“webWork中文教程”旨在帮助开发者深入理解WebWork框架的原理、特性和实践方法。下面,我们将详细介绍WebWork...

    webwork源码底层实现

    WebWork是一个古老的Java Web开发框架,它在早期的MVC(模型-视图-控制器)架构中占有重要地位,为开发者提供了丰富的功能和强大的动作映射能力。在深入理解WebWork源码之前,我们首先需要了解一些基本概念。 1. **...

    webWork2开发指南

    在"webWork2开发指南"中,你将学习到以下关键知识点: 1. **MVC模式**:WebWork2的核心设计就是MVC模式,它将应用程序分为三个主要部分:模型(Model)处理业务逻辑,视图(View)负责显示数据,控制器(Controller...

    webwork详细讲解.doc

    ### WebWork详细讲解 #### WebWork概述 WebWork是由OpenSymphony组织开发的一款专注于组件化和代码重用的MVC模式的J2EE Web框架。该框架的核心目标是简化Web应用的开发流程并提高开发效率。当前WebWork的最新版本...

    WEBWORK的源文件压缩包

    WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包

    WebWork教程开发资料

    **WebWork教程开发资料** WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建Web应用程序。本教程是针对WebWork 0.90版本的初稿,涵盖了大部分章节,但未包括"实战G-Roller-WW"和"WebWork与其它开源...

    webwork电子书

    它可能会涵盖以下知识点: 1. **安装与配置**:详述了在不同操作系统(如Linux、Unix或Windows)上安装Webwork的步骤,包括服务器设置、数据库连接和域名配置等。 2. **系统架构**:解释Webwork的基本工作原理,如...

Global site tag (gtag.js) - Google Analytics