У меня есть этот сервлет, который принимает имена динамических параметров в строке запроса, но строка запроса также добавляет другие параметры некоторым плагином javascript.
Здесь сценарий запроса:
http://foo.com/servlet?[dynamic param]=[param value]&[other params]=[other values]...
Я хотел бы иметь возможность прочитать первый параметр, поэтому сервлет выполнит его выполнение в зависимости от имени динамического параметра или ничего не сделает, если он не распознает имя параметра. Я на 100% уверен, что первое имя параметра всегда является динамическим, потому что я управляю строкой строки запроса через вызов ajax.
Проблема, с которой я столкнулся, заключается в том, что порядок HttpRequestServlet.getParameterMap()
или .getParameterNames()
не всегда соответствует порядку строки запроса, поэтому сервлет не делает ничего в половину/большую часть времени в зависимости от частоты параметров.
Как я всегда читаю первый параметр в строке запроса?
Вы можете использовать HttpServletRequest # getQueryString(), а затем разделить значения на основе &
и получить первую пару значений имени параметра запроса, а затем разделить их на основе =
образец кода:
String[] parameters = URLDecoder.decode(request.getQueryString(), "UTF-8").split("&");
if (parameters.length > 0) {
String firstPair = parameters[0];
String[] nameValue = firstPair.split("=");
System.out.println("Name:" + nameValue[0] + " value:" + nameValue[1]);
}
Подробнее о расшифровке URL-адресов
Вы можете изменить этот URL, чтобы читать что-то вроде
http://foo.com/servlet/dynamicParam/paramValue/?otherParam=otherValue
Эта структура URL лучше соответствует идее HTTP-ресурса, и у вас больше нет проблемы с параметром. Вышеизложенное довольно легко сделать, если вы используете современную среду MVC.