【问题标题】:Passing a URL parameter from JSP to Servlet将 URL 参数从 JSP 传递到 Servlet
【发布时间】:2012-09-11 13:17:39
【问题描述】:

我正在尝试将 URL 参数从 JSP 传递到 Sevlet。 我的网址是

/portal/faces/student.jsp?owner_id=1030303i

在我的 JSP 中我添加了这个

<form action="steg" method="post" enctype="multipart/form-data">
     <input type='text' value='<%=request.getParameter("owner_id")%>' id="owner"/>
     <input type="file" name="file" size="50"  />
            <br />             
            <input type="submit" value="Steganograph" />
        </form>

但是,我在 servlet 中这样做了,

              String owner = request.getParameter("owner");
              System.out.println("aaaaaaaaaaaaaaaa"+owner);
              response.sendRedirect("stegsuccess.jsp?owner_id="+owner);

打印出来的结果为空。 有什么问题吗?有谁知道如何解决这个问题? 请指教。谢谢:)

【问题讨论】:

    标签: jsp servlets request url-parameters http-request-parameters


    【解决方案1】:

    你的代码有两个问题:

    1. 您没有为输入字段命名。您希望输入元素的id 属性用作请求参数名称。但是这是错误的。这是name 属性。

      <input type="text" name="owner" value="${fn:escapeXml(param.owner_id)}" />
      

      (注意:我冒昧地在value 属性中为您密封了XSS attack hole

    2. 您正在使用multipart/form-data 编码,但期望HttpServletRequest#getParameter() 提供请求参数。这是默认情况下不支持的。这仅在您在 Servlet 3.0 兼容容器上使用带有 @MultipartConfig 的 servlet 时才有效。或者,也许您正在处理现有项目,而其他人已经发明了一个 servlet 过滤器,它透明地解析 multipart/form-data 请求并在将请求传递给 servlet 之前填充请求参数映射。无论如何,请确保您了解如何解析multipart/form-data 请求:How to upload files to server using JSP/Servlet?

    【讨论】:

      【解决方案2】:

      您使用的是什么版本的 servlet?

      multipart/form-data 编码请求在 3.0 版之前的 Servlet API 默认情况下确实不支持。 Servlet API 默认使用application/x-www-form-urlencoded 编码解析参数。当使用不同的编码时,request.getParameter() 调用都将返回null。如果您已经使用 Servlet 3.0(Glassfish 3Tomcat 7 等),则可以改用 HttpServletRequest#getParts()

      来自https://stackoverflow.com/a/3337115/139010。另见Issue with Servlet Multipart request

      【讨论】:

      • 我不太确定我使用的是什么版本。我尝试使用您给我的链接。但似乎它不适用于 getValues 并将我返回到错误的页面。知道是否有其他方法吗?
      • 查看 web.xml。顶级元素是&lt;web-app/&gt;,它的versionxsi:schemaLocation 属性提示您正在使用哪个servlet 版本。
      【解决方案3】:

      sendRedirect() 方法不会转发请求对象。而是使用 RequestDispatcher rd = request.getRequestDispatcher("yourpage.jsp");rd.forward(req, res) 方法转发请求对象和请求参数。

      【讨论】:

      • 从用户的 Servlet 代码来看这是正确的。如果你看 JSP 代码,请求是enctype="multipart/form-data"。所以,request.getParameter("paramName"); 将返回 NULL。
      猜你喜欢
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2014-11-23
      • 1970-01-01
      • 2013-06-20
      相关资源
      最近更新 更多