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

关于URL生成以及RestfulActionMapper的问题

    博客分类:
  • Java
阅读更多
做了几乎一年的Eclipse RCP开发,最近要做一网站项目,我选择webwork,这也是我第一次使用webwork。
感觉webwork默认的 dispatcher manager 要求的URL太丑了,多了个.action,看起来很不舒服。我想找一个类似 rails 那样的
找呀找,让我找到 RestfulActionMapper 这个类,符合我的要求。

我在页面中使用 VTL, 没有用 ww 的 标签。这样根据 action 生成 url 怎么办呢? 我不想硬编码。

于是我在一个 BaseAction 中写下以下代码:

java 代码
 
  1. public abstract class BaseAction extends ActionSupport implements ServletRequestAware {  
  2.       
  3.     protected HttpServletRequest request;  
  4.     protected Helper helper;  
  5.       
  6.     public void setServletRequest(HttpServletRequest request) {  
  7.         this.request = request;  
  8.     }  
  9.       
  10.     public Helper getHelper() {  
  11.         if (helper == null) {  
  12.             helper = new Helper();  
  13.         }  
  14.         return helper;  
  15.     }  
  16.       
  17.     public class Helper implements Serializable {  
  18.         private static final long serialVersionUID = 1L;  
  19.   
  20.         public String url(String action, String params) {  
  21.             String[] parts = params.split(",");  
  22.             Map
  23.             for (String part : parts) {  
  24.                 String[] t = part.split(":");  
  25.                 map.put(t[0].trim(), t[1].trim());  
  26.             }  
  27.               
  28.             ActionMapper manager = ActionMapperFactory.getMapper();  
  29.             ActionMapping mapping = manager.getMapping(request);  
  30.             mapping.setNamespace(request.getContextPath() + "/");  
  31.             mapping.setName(action);  
  32.             mapping.setParams(map);  
  33.             return manager.getUriFromActionMapping(mapping);  
  34.         }  
  35.     }  
  36. }  

我想在我的前台页面,这样产生 url:

xml 代码
 
  1. <!---->  
  2. ...  



可是,它并没有产生像这样的 url:

xml 代码
  1. http://.../shops/region/1  

于是我又找呀找,找到了 RestfulActionMapper  的代码:

竟然是这样:

java 代码
 
  1. ...  
  2.     public String getUriFromActionMapping(ActionMapping mapping) {  
  3.         String base = mapping.getNamespace() + mapping.getName();  
  4.         for (Iterator iterator = mapping.getParams().entrySet().iterator(); iterator.hasNext();) {  
  5.             Map.Entry entry = (Map.Entry) iterator.next();  
  6.             String name = (String) entry.getKey();  
  7.             if (name.equals(mapping.getName() + "Id")) {  
  8.                 base = base + "/" + entry.getValue();  
  9.                 break;  
  10.             }  
  11.         }  
  12.   
  13.         return base;  
  14.     }  
  15. ...  

小弟首次用 webwork ,比较愚昧

可是不能这样算了(搞不定这些,老板会骂呀), 我写了下面代码:

java 代码
 
  1. public class BetterRestfulActionMapper extends RestfulActionMapper {  
  2.   
  3.     @SuppressWarnings("unchecked")  
  4.     @Override  
  5.     public String getUriFromActionMapping(ActionMapping mapping) {  
  6.         String url = mapping.getNamespace() + mapping.getName();  
  7.         System.out.println(url);  
  8.         Map
  9.         String idKey = mapping.getName() + "Id";  
  10.         String idValue = params.get(idKey);  
  11.         if (idValue != null) {  
  12.             url = url + "/" + idValue;  
  13.         }  
  14.         for (Entry
  15.             if (!entry.getKey().equals(idKey)) {  
  16.                 url = url + "/" + entry.getKey() + "/" + entry.getValue();  
  17.             }  
  18.         }  
  19.           
  20.         return url;  
  21.     }  
  22. }  


然后,我修改了 webwork.properties 文件

xml 代码
 
  1. webwork.mapper.class=com.longthsoft.deliver.dispatcher.mapper.BetterRestfulActionMapper  

问题算是解决了, 可是我想知道你们都是怎么办的?
初次用 webwork,还望各位老手多多指教。
小弟成长的路上有你们伴随,幸福无比!
分享到:
评论
4 楼 kyvin 2007-07-26  
我也是用url rewrite 蛮方便的
3 楼 bencode 2007-07-11  
嘿嘿,开源的找起来麻烦,而且我也算webwork新手,所以研究研究对我也有好处.

见:
http://bencode.iteye.com/admin/show/81622
2 楼 exo905 2007-06-26  
很多开源的URL REWRITE的工具,楼主不用自己写吧
1 楼 bencode 2007-03-07  
哈哈,今天使用 ww:form 时,才发现 RestfulActionMapper 没错,是我错了。

于是我删掉了 BetterRestfulActionMapper

又改回了:

webwork.mapper.class=com.opensymphony.webwork.dispatcher.mapper.RestfulActionMapper

然后改写了 url 这个方法,暂时解决了这个问题


相关推荐

    java-根据网站链接url生成二维码qrcode

    本篇文章将详细介绍如何在Java环境中,基于给定的网站链接URL生成二维码图片并存储到本地目录。 首先,我们需要引入一个Java二维码生成库,例如`com.google.zxing`库中的`javase`模块,这个模块提供了生成和解码...

    网页URL生成图片.zip

    网页URL生成图片是一种常见的需求,尤其在记录网页内容、创建网页快照或构建可视化的网页存档时。这个“网页URL生成图片.zip”文件很可能包含一个或多个程序或库,用于将网页转换为图像格式,比如JPG或PNG。在这个...

    ios 对具体url生成一个ipa

    在这个场景中,"对具体URL生成一个IPA"可能是指通过Xcode或者第三方工具,利用特定的URL来下载远程的项目资源,然后构建并打包成IPA。 首先,我们需要理解iOS应用的构建流程。通常,这个过程包括以下步骤: 1. **...

    一个使用 URL 生成图像的小工具。选择大小、颜色,甚至文本。_python_代码_下载

    Fakeimg.pl 是一个使用 URL 生成图像的小工具。选择大小、颜色,甚至文本 如何使用 您只需将您的图片尺寸放在我们的 URL 之后。只有第一个参数是强制性的。还有一些选项,您可以传递文本或更改某些颜色。颜色必须是...

    通过URL生成静态页面

    总的来说,通过URL生成静态页面是提高网站性能的重要手段,它结合了动态网站的灵活性和静态网站的速度优势。在实际应用中,需要根据项目需求选择合适的实现策略,并注意平衡性能、更新、安全等因素。

    url网址直接生成完整图片

    url网址直接生成完整图片,不论网页多宽多长都可以生成完整的图片,速度快,体积小,无需安装,下载即可使用!

    用Visual Studio 2010编写Data Url生成工具C#源码

    《使用Visual Studio 2010开发Data URL生成器C#源码解析》 Data URL是一种在Web开发中用于嵌入小型数据(如图像或文本)的机制,它允许将数据直接编码为URL的一部分,避免了额外的HTTP请求。本项目以C#编程语言为...

    根据URL生成HTML文件 源码

    【标题】: "根据URL生成HTML文件 源码" 在网页开发中,根据URL生成HTML文件是一项常用的技术,主要用于动态构建网站内容。这通常涉及到服务器端编程,通过获取URL中的参数或者请求资源,生成相应的HTML页面以供...

    Java根据url生成二维码

    在IT行业中,生成二维码是一种常见的数据编码方式,它将URL、文本等信息转换为图形,便于手机扫描。Java作为广泛使用的编程语言,提供了多种库来实现这个功能。本篇文章将聚焦于如何使用Java根据URL生成二维码,同时...

    asp.net Url重写与动态生成静态页面

    ASP.NET URL重写和动态生成静态页面是两个关键的技术,它们在提高网站性能、优化搜索引擎排名(SEO)以及提供用户友好的URL等方面发挥着重要作用。 首先,我们来深入理解ASP.NET URL重写。URL重写是一种技术,允许...

    根据url自动生成对应的正则表达式

    2.使用方式:python 脚本名 url [可选参数s:数字] [可选参数c:True/False] 3.可选参数s的作用:指定从第几个'/'(不计算'://'中的'/')之前的字符串作为前缀,之后的正则化 默认为1 如:...

    Java实现的生成二维码和解析二维码URL操作示例

    Java 实现生成二维码和解析二维码 URL 操作示例 Java 是一种广泛使用的编程语言,具有强大的功能和灵活性。在实际应用中,生成二维码和解析二维码 URL 是非常常见的操作。本文将详细介绍 Java 实现生成二维码和解析...

    Data Url生成工具C#版 第二版完整源码下载

    Data Url生成工具C#版 第二版完整源码下载 主要解决以下问题: DATA URL两种生成方式,C#和HTML5 两者同一张生成的base64编码貌似不一样,能有什么方法让他们达成一致吗”。 &emsp;&emsp;其次,在研究这个问题时...

    URLGenerator(URL生成器)v1.00官方英文绿色版

    URL Generator(URL生成器)是来自国外的一款URL生产工具,URL Generator界面整洁、功能强大,能够一键生产URL,快捷方便、小巧又实用,URL Generator将根据您输入的字段值创建一个URL列表,然后可以从程序中保存URL...

    JS Url生成二维码.zip

    在给定的资源“JS Url生成二维码.zip”中,我们可以了解到如何利用JavaScript来创建一个能够将URL编码为二维码的简单功能。这种技术常用于将长网址缩短,便于用户通过手机快速扫描并访问网站。 二维码(Quick ...

    java URL转PDF文件

    在Java编程环境中,将一个URL链接的内容转换为PDF文件是一个常见的需求,这通常涉及到网络请求、HTML解析以及PDF生成等多个步骤。以下是一个详细的步骤指南,涵盖了这个过程中的关键知识点: 首先,我们需要处理URL...

    随机生成URL

    随机生成URL:随机生成URL的格式为:com.google.maps.uk 每个部分称为子串,即“com”“google”“maps”“uk”均为子串,子串之间以“.”分割,URL的最短长度为1,即为只包含1个子串,如:com。 URL的最大长度为32...

    java 指定url地址生成二维码(去白边、添加水印、添加logo(圆形/方形))

    本教程将详细介绍如何在Java中指定URL地址生成二维码,并实现去白边、添加水印以及添加圆形或方形的Logo功能。以下是一个详尽的步骤说明: 1. **引入依赖** 要在Java中生成二维码,首先需要引入相关库,例如`...

    由路由生成URL规则

    ### 由路由生成URL规则详解 #### 一、引言 在ASP.NET MVC框架中,路由机制是一项核心功能,它负责解析HTTP请求并将其映射到相应的控制器与操作上。而由路由生成URL的能力则是这一机制的重要组成部分,因为它不仅...

    Django 反向生成url实例详解

    Django提供了两种关于URL的处理方式,一种是正向解析,即根据URL找到对应的视图函数;另一种是反向生成URL,即通过视图函数名和参数生成对应的URL。 在Django中,URL的反向生成是通过URLconf(URL配置)来实现的。...

Global site tag (gtag.js) - Google Analytics