jsp
  • servlets
  • request
  • url-parameters
  • http-request-parameters
  • 2012-09-11 46 views 2 likes 
    2

    我試圖從JSP傳遞一個URL參數到一個Sevlet。 我的網址是從JSP傳遞一個URL參數到Servlet

    /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); 
    

    即打印出來是空的結果。 有什麼不對嗎?任何人都知道如何解決這個問題? 請指教。謝謝:)

    回答

    0

    您使用的是什麼版本的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

    +0

    我不是真的不太清楚什麼是我使用的版本。我試着使用你給我的鏈接。但它似乎沒有與getValues一起工作,並將我返回到錯誤的頁面。任何想法,如果有其他方法呢? – user1651129

    +0

    在web.xml中查找。頂層元素是'',它的'version'和'xsi:schemaLocation'屬性暗示了你正在使用哪個servlet版本。 –

    0

    sendRedirect()方法不會攜帶請求對象向前。而是使用RequestDispatcher rd = request.getRequestDispatcher("yourpage.jsp");rd.forward(req, res)方法來轉發請求對象以及請求參數。

    +0

    這從用戶的Servlet代碼是正確的。如果您查看JSP代碼,請求是'enctype =「multipart/form-data」'。因此,'request.getParameter(「paramName」);'將返回NULL。 –

    1

    有您的代碼2個問題:

    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過濾器,該過濾器在將請求傳遞給servlet之前透明地分析multipart/form-data請求並填充請求參數映射。在任何情況下,請確保您瞭解如何解析multipart/form-data請求:How to upload files to server using JSP/Servlet?

    相關問題