解析具有多个变体的字符串

时间:2013-12-18 04:24:51

标签: java routing

我很好奇有什么更好的方法可以解决这个问题,我想挑战自我,看看我是否可以分散HashMap key,value(或{{1} }}),一个几乎可以以任何格式返回的字符串。

有问题的字符串是:

String, String

这是对的,一个服务器的url请求。问题 - 我们都知道这可能是任何事情,它可以以任何形式回归。我想分解它,看起来像:

/user/2/update?updates=success

显然以上不是真正的 java对象。

但是你明白了。

你需要什么?你做了什么?你想做什么?

我想要做的是将其映射到控制器和动作,同时传递参数。但我需要将其分开,确保指定每个步骤是什么。

我所做的是:

Controller => user
action => update
params => ??? (theres a 2, a update=success ... )

分割网址中的任何内容(注意,private Filter parseRoute(String route){ String[] parsedRoute = route.split("[?:/=]"); Filter filter = new Filter(parsedRoute); return filter; } 类似于: 所以:/user:id/update ...)

然后我试图这样做:

user/2/update

但这不会像我预期的那样起作用......因为有太多变数在起作用。 包括操作之前的参数(那些只用于搜索该用户),它们可以是嵌套路由,因此多个public class Filter { private HashMap<String, String> filterInfo; public Filter(String[] filteredRoute){ if(filteredRoute.length > 0){ filterInfo.put("Controller", filteredRoute[0]); }else{ throw new RoutingException("routes must not be empty."); } } } ..

你会怎么处理这个?你会建议什么?你怎么能绕过这个?你应该做的事情如下:

controller/action/controller/action? (route(controller, action, params, template);允许你渲染一个jsp)。如果是这样,您如何处理template

我正在使用HttpServer来设置基础知识。但我现在迷路了。我试图保持路由为通用和“做你想要的任何我们将它映射到正确的控制器,动作和传递参数”但我想我咬了更多然后我可以咀嚼。

我已经查看了spark和spring框架,并决定了你传递的路由,我们将映射到xml文件以找到控制器和动作,我只需要数据结构就可以了...... < / p>

所以我想要备份并继续“给我传递一些东西,把它映射出去。”

2 个答案:

答案 0 :(得分:0)

java.net.URI可以帮到你。

你可以通过getPath()

获取你的路径

并通过getQuery()获取所有查询,然后您可以按=将查询拆分为名称值对。

    URI uri = new URI("/user/2/update?updates=success");
    // /user/2/update
    System.out.println("path is " + uri.getPath());
    // updates=success
    System.out.println("query is  " + uri.getQuery());

答案 1 :(得分:0)

我可能会使用apache的URL

org.apache.tomcat.util.net.URL url = null;
try {
  url = new org.apache.tomcat.util.net.URL("/user/2/update?updates=success");
  // ... do some stuff with it...
} catch (Exception e) {
  e.printStackTrace();
}