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;
- }
- }
分享到:
相关推荐
WEBWORK的配置
webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程webwork教程
WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包
webwork中文帮助文档 webwork中文帮助文档 webwork中文帮助文档 webwork中文帮助文档 webwork中文帮助文档 webwork中文帮助文档
这是webwork1的jar包,还有webwork-2.2.7.jar和webwork-src-2.2.7.jar
webwork底层源码,用于webwork框架设计
webwork源码下载
与下载的<<WebWork docs -- webWork 详细的说明文档>> 的文件夹合并. 这里包括了所有webWork的所有的详细说明文档, 任何有关的问题都可以在这里找到答案.
webWork 详细的说明文档, 由于我的上传大小有限, 这个好东西我只能是分两次上传了, 下载的人可能要辛苦一些了, 不过这些都是值得的, 将<<WebWork docs 2 -- webWork 详细的说明文档>> 也一同下载下来, 下载后两个...
webwork_框架文档
webwork2.1.7
webwork中文 webwork中文参考 webwork中文资料 webwork学习资料
webWork中文教程
spring与webwork的集成 spring与webwork的集成
这里我们所谈及的WebWork,实际上是Webwork+XWork的总集,Webwork1.x 版本中, 整个框架采用了紧耦合的设计(类似Struts),而2.0 之后,Webwork被拆分为两个部分, 即Webwork 2.x +XWork 1.x,设计上的...
WebWork2配置WebWork2配置WebWork2配置WebWork2配置
包括webwork2.x的 具体使用步骤,见解压后“webwork使用步骤.txt” 和一个实现前后台连通的webwork具体应用的“test” 实例,将test导入eclipse的工作空间,即可正常运行
WebWork深入浅出.doc webwork开发指南中文版
webwork2.2.4架包帮助学习
webwork2快速入门 高级特性 实例