Url servlet doGet() 的参数

Url parameter to servlet doGet()

我正在开发我的第一个网络应用程序。我正在发送带有 url 的电子邮件:

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

单击 link 时,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 映射到一个 servlet 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 );
}

doGet 函数接收的参数 hotelId 为空,但我希望它是在 url 中找到的值(在我们的例子中,"hampton")

谁能告诉我为什么我得到的是 null 而不是 "hampton"?

您必须在表单本身中包含这些参数,因为参数的范围是请求范围。像这样

 <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>

当您制作表单并将该表单提交给某个操作时,它只会为您在表单中定义的 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>

所以,现在我们创建了一个新字段 hotelIdcity,它们将被发送到您的 servlet acceptOffer,然后您就可以使用请求参数访问它们如下:

request.getParameter("hotelId")