Мне любопытно, как лучше справиться с этим, я хотел бросить вызов себе и посмотреть, могу ли я сломаться в HashMap
key,value
(или String, String
), строка который может вернуться практически в любом формате.Разбор строки с несколькими вариантами
строка в вопросе:
/user/2/update?updates=success
Вот так, запрос URL для сервера. Проблема - как мы все знаем, это может быть что угодно, она может вернуться в любой форме. Я хотел разбить его так, что он будет выглядеть следующим образом:
Controller => user
action => update
params => ??? (theres a 2, a update=success ...)
Очевидно Выше не настоящий Java объект.
Но у вас есть идея.
Что вам нужно? что вы наделали? Что ты пытаешься сделать?
Что я хочу сделать, это сопоставить это с контроллером и действием при прохождении параметров по пути. Но мне нужно разделить это, убедившись, что каждый шаг определяет, что есть.
То, что я сделал это:
private Filter parseRoute(String route){
String[] parsedRoute = route.split("[?:/=]");
Filter filter = new Filter(parsedRoute);
return filter;
}
расколы на любую вещь, которая находится в URL (обратите внимание, :
будет что-то вроде /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);
? (template
позволяет визуализировать jsp). если да, то как вы относитесь к ?update=success
Я использую HttpServer для настройки основ. Но теперь я потерян. Я пытаюсь сохранить маршрутизацию как общий и «сделай все, что захочешь, мы сопоставим ее с правильным контроллером, действием и передадим параметры», но я думаю, что я откусил больше, чем я могу пережевывать.
Я рассмотрел как искровой, так и пружинный каркас, и решил, что маршрут, который вы пройдете, мы сопоставим с XML-файлом, чтобы найти контроллер и действие, мне просто нужна структура данных, чтобы сделать это ...
Итак, я ищу, чтобы вернуться и по-прежнему идти «передам мне что-то, плохо отобразите это».
Это собирается быть реальной проблемой, так как параметры HTTP фактически образуют 'Multiset' просто сами по себе. «/ user/2/update? updates = success & updates = success & updates = fail» –
Я бы использовал существующий HTTP-парсер (возможно, Apache), потому что это классическая нетривиальная задача, которая была решена много раз. –
Есть ли какие-либо примеры использования инструментов апачей? – TheWebs