我很好奇有什么更好的方法可以解决这个问题,我想挑战自我,看看我是否可以分散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>
所以我想要备份并继续“给我传递一些东西,把它映射出去。”
答案 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();
}