2015-05-02 5 views
0

Я работаю над своим первым веб-приложением. Я посылаю письмо с URL в нем:Параметр Url для сервлета doGet()

http://localhost:8080/HotelP/requeteSuccesO.jsp?hotelId=hampton&city=Montreal 

При нажатии на ссылку, requeteSuccesO.jsp отображает параметры hotelId и город:

out.println("<b>Hotel:</b> "+request.getParameter("hotelId")+"</br>"); 
out.println("<b>City:</b> "+request.getParameter("city")+"</br>"); 

Затем пользователь может принять, нажав на кнопку :

<form method="get" action="acceptOffer"> 
<input type="submit" value="Accept" class="sanslabel"> 

acceptOffer отображается на сервлет DecisionPage.java, и нажав на эту кнопку он вызывающему метод doGet().

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    System.out.println("in do get DecisionPage, hotelId is "+request.getParameter("hotelId")); 
    this.getServletContext().getRequestDispatcher(VUE_PAIEMENT).forward(request, response); 
} 

Параметр hotelId получил функцией doGet имеет нулевое значение, но я ожидаю, что это значение находится в URL (в нашем случае, «Хэмптон»)

Может кто-нибудь сказать мне, почему я получить null, а не «hampton»?

+0

Как вы называете ваш сервлет по этой ссылке? вам лучше разместить JSP-код, где вы вызываете ваш сервлет DecisionPage.java. Также опубликуйте любое сообщение об ошибке, если у вас есть, когда вы открываете консоль разработчика. –

+0

Сервлет вызывается

acceptOffer сопоставляется с DecisionPage.java в web.xml –

ответ

0

Когда вы делаете форму и представить эту форму, чтобы какое-то действие, то это будет только создавать параметры запроса для fields вы определили в вашей форме.

Таким образом, в то время как вы запустите приложение с указанными URL, он будет содержать эти параметры и будет к вашим строению jsp, но если вы не включать их в форме он не будет доступен servlet при отправке форма.

Итак, вы должны включить эти параметры в некоторые поля hidden, если вы не хотите показывать их пользователю.

Пример:

<form method="get" action="acceptOffer"> 
    <input type="hidden" name="hotelId" value="<%= request.getParameter(\"hotelId\")" %> /> <---- this field will create a new parameter with name as hotelId 
    <input type="hidden" name="city" value="<%= request.getParameter(\"city\") %>" /> 
    <input type="submit" value="Accept" class="sanslabel"> 
</form> 

Итак, теперь, когда мы сделали новые поля hotelId и city они будут отправлены на ваш сервлет acceptOffer, и тогда вы сможете получить доступ к ним с параметром запроса, как показано ниже:

request.getParameter("hotelId")

+0

Толстый -1 для того, чтобы не покрывать зияющее отверстие XSS, не говоря уже о небольшой подсказке для пробуждения ОП. – BalusC

+0

@BalusC: Извините, но даже я не знаю, о чем вы упомянули. Было бы лучше, если бы вы могли отредактировать ответ и накрыть его. Даже я получил бы и идею от этого :) – Parth

0

Вы должны включить эти параметры в форму, потому что область действия параметров - это область запроса. Что-то вроде этого

<form method="get" action="acceptOffer"> 
<input type="text" name="hotelId" value=assign the value from request here/> 
<input type="submit" value="Accept" class="sanslabel"> 
</form> 
Смежные вопросы