【问题标题】:Url parameter to servlet doGet()servlet doGet() 的 URL 参数
【发布时间】:2015-05-02 02:59:03
【问题描述】:

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

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

点击链接时,requeteSuccesO.jsp显示hotelId和city参数:

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 为 null,但我希望它是在 url 中找到的值(在我们的例子中是“hampton”)

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

【问题讨论】:

  • 如何通过该链接调用您的 servlet?您最好在调用servlet DecisionPage.java 的地方发布JSP 代码。如果您在打开浏览器的开发者控制台时遇到任何错误消息,也可以发布。
  • servlet被
    acceptOffer映射到web.xml中的DecisionPage.java

标签: eclipse jsp jakarta-ee servlets


【解决方案1】:

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

【讨论】:

  • 一个胖 -1 没有覆盖 XSS 漏洞,更不用说留下一个小提示来唤醒 OP。
  • @BalusC:我很抱歉,但即使我不知道你提到的事情。如果您可以编辑答案并覆盖它会更好。甚至我也会从中得到一些想法:)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 2015-07-04
    • 2011-07-09
    • 2015-01-09
    • 2017-01-17
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多