Как получить параметр HTTP post в JSP

Я новичок в JSP. У меня есть страница jsp, где параметр передается на эту страницу jsp с HTTP post. Я вижу параметр в Firebug, как вы можете видеть на картинке. enter image description here

но на моей странице, когда я пытаюсь напечатать переменную токена, переменная всегда равна нулю. Я печатаю переменную следующим образом:

     <%
        String token = request.getParameter("token");
     %>

что я делаю не так? Как получить параметр token?

7 ответов


на token атрибут выглядит как nonce для меня и некоторого фильтра безопасности может быть удаление значения из объекта запроса.

то, что вы сделали для печати значения, абсолютно правильно. Я не собираюсь использовать лучшие практики, но это должно сработать.

проверьте код фильтра безопасности и посмотрите, можете ли вы узнать, где значение удаляется/переопределяется.

после просмотра вашей веб.в XML.

значение передается домен using POST. Запрос внутренне перенаправляется на страницу приветствия, и значение теряется. Если вы передадите значение с помощью GET, значение будет сохранено.

у вас есть два варианта:

  1. создайте прямой url-адрес и передайте ему значение, используя Сообщение, Как вы это делаете. Например: url - yourdomain.com/welcome.jsp.
  2. попросите другой проект передать параметр в url (GET request).

я протестировал оба, и он работает просто штраф.


вот некоторые чеки.

1) форма с методом= "post" на странице JSP.

<form name="form1" action="nextpage" method="post">

2) имя элемента управления на JSP является токеном. как.

 <input type="text" name="token" value="chintan"/>

3) Вы получаете кнопку "отправить" вместо кнопки означает.

<input type="submit" name="submit" value="submit"/>

после проверки всех этих пунктов. Это даст вам точную ошибку. И вы сможете легко это исправить.


согласно скриншоту, запрос POST привел к HTTP 302 response, что означает, что он был перенаправлен. Перенаправление в основном инструктирует клиента запускать новый HTTP-запрос по данному URL-адресу. Это как-то не волшебным образом берет на себя все параметры запроса из предыдущего запроса.

вам нужно передать параметры запроса, которые вы хотели бы сохранить в перенаправленном запросе вместе с URL-адресом перенаправления самостоятельно:

String token = request.getParameter("token");
response.sendRedirect("/CR?token=" + URLEncoder.encode(token, "UTF-8"));

An альтернативой является не выполнение перенаправления вообще, а просто переадресация. Правильный ли это подход, зависит от конкретного функционального требования, которое нигде не разработано в вопросе. Чтобы узнать о разнице, внимательно прочитайте вызов requestdispatcher.forward () vs HttpServletResponse.sendRedirect() и наша страница wiki сервлетов научиться правильно использовать сервлеты для такого рода требований. Страница JSP-это просто неправильный инструмент для работа.


как вы видели на изображении, код ответа HTTP 302

вот почему вы не могли получить параметр токена, потому что, когда браузер попадает на вашу страницу jsp, он от перенаправления, но не запрашивает вперед.

то есть, ваш запрос на просмотр вашей страницы jsp без каких-либо параметров...

вы можете проверить, является ли ваше опубликованное действие сервлетом, а затем перенаправить на страницу jsp ????

проверьте код действия и изменить код

response.sendRedirect....

to

request.getRequestDispacher("your jsp page path").forword(request, response)

или просто изменить форму отправить прямо на страницу jsp

<form action="your jsp page link">
...
</form>

предпочтительной идиомой для этого было бы использование сервлета из формы, а не JSP. Затем сервлет может использовать JSP в качестве представления. Одна из причин-избегать того, что вы делаете: помещаете java-код на страницу и, вероятно, смешиваете презентацию с логикой.

однако, если у вас не было выбора, я бы рекомендовал использовать JSTL:

<c:forEach var="par" items="${paramValues}">
    <c:if test="${fn:startsWith(par.key, 'token')}"> 
        ${par.key} = ${par.value[0]};
    </c:if>
</c:forEach>

или на Java:

<%@ page import = "java.util.Map" %>
<%
Map<String, String[]> parameters = request.getParameterMap();
for(String parameter : parameters.keySet()) {
    if(parameter.toLowerCase().startsWith("token")) {
        String[] values = parameters.get(parameter);
    }
}
%>

вы можете использовать ${param.token} для печати параметров запроса на странице jsp


вы можете напечатать как

${param.token}

это выведет значение