2

URL パラメータを JSP から Sevlet に渡そうとしています。私のURLは

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

ただし、サーブレットではこれを行いましたが、

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

出力される結果はヌルです。何か問題がありますか?これを修正する方法を知っている人はいますか?ご意見をお聞かせください。ありがとう :)

4

3 に答える 3

1

コードには 2 つの問題があります。

  1. 入力フィールドに名前を付けていません。idinput 要素の属性がリクエストパラメーター名として使用されていることを予期しました。しかし、これは真実ではありません。name属性です。

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

    (注: 私はあなたのために属性のXSS 攻撃の穴を封印する自由を取りました)value

  2. エンコーディングを使用multipart/form-dataしていますが、リクエスト パラメータが で利用できることを期待していますHttpServletRequest#getParameter()。これはデフォルトではサポートされていません。@MultipartConfigこれは、サーブレット 3.0 互換のコンテナーでサーブレットを使用している場合にのみ機能します。multipart/form-dataまたは、既存のプロジェクトに取り組んでいて、リクエストをサーブレットに渡す前にリクエストを透過的に解析し、リクエスト パラメータ マップを埋めるサーブレット フィルタを他の誰かがすでに発明しているかもしれません。multipart/form-dataいずれにせよ、リクエストを解析する方法を理解していることを確認してください: How to upload files to server using JSP/Servlet?

于 2012-12-04T11:36:45.530 に答える
0

sendRedirect()メソッドはリクエストオブジェクトを転送しません。代わりにRequestDispatcher rd = request.getRequestDispatcher("yourpage.jsp");rd.forward(req, res)、リクエストオブジェクトとリクエストパラメータを転送するメソッドを使用してください。

于 2012-09-11T18:22:03.007 に答える
0

使用しているサーブレットのバージョンは何ですか?

multipart/form-dataエンコードされたリクエストは、バージョン 3.0 より前のサーブレット API ではデフォルトでサポートされていません。サーブレット API は、デフォルトでapplication/x-www-form-urlencodedエンコードを使用してパラメーターを解析します。別のエンコーディングを使用すると、request.getParameter()呼び出しはすべて を返しnullます。すでに Servlet 3.0 ( Glassfish 3Tomcat 7など) を使用している場合は、HttpServletRequest#getParts()代わりに使用できます。

https://stackoverflow.com/a/3337115/139010から。サーブレット マルチパート リクエストの問題も参照してください。

于 2012-09-11T13:21:39.627 に答える