6

public class Relay extends HttpServlet {   
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String command = request.getParameter("command");
        RequestDispatcher rd =request.getRequestDispatcher(command);
        rd.forward(request, response);
        System.out.println("Request forwarded to " + command + " servlet");
    }
}

これは私の Relay サーブレットです。このフォームからデータを送信しています

<form action="Relay" method="POST" enctype="multipart/form-data"> /
    <input type="hidden" name="command" value="AddProduct" />
    <input type="text" name="pname" value="" />
    <input name="" type="submit" value="Add Product">
</form>

を投げていjava.lang.NullPointerExceptionます。

しかし、これを削除すると正常に動作します:

enctype="multipart/form-data"
4

4 に答える 4

10

なぜそれを追加する必要があるのですか?ただそれを守ってください。

<input type="file">後で追加する予定のファイルをアップロードするために必要な場合は@MultipartConfig、サーブレットに注釈を付けて、それrequest.getParameter()が機能し、アップロードされたすべてのファイルが によって取得できるようにする必要がありますrequest.getPart()

@WebServlet("/Relay")
@MultipartConfig
public class Relay extends HttpServlet {   
    // ...
}

以下も参照してください。

于 2012-10-19T13:17:10.707 に答える
1

でエンコードされmultipart/form-dataたパラメータは、通常のリクエスト パラメータとしてではなく、POST 本文で送信されるため、 を使用して読み取ることはできませんrequest.getParamter(...)

マルチパート リクエストの処理については、Commons ファイル アップロードパッケージを確認してください。

于 2012-10-19T13:16:02.833 に答える
0

トラブルシューティングの追加情報として、これを含めています。行き詰まっていて、マルチパート リクエストを介してすべてのパラメータが送信されていることを知りたい場合は、次のコードを使用してすべてのパラメータを出力できます。

MultipartRequest multi = <Your code to retrieve multipart request goes here. Sorry but can not post code as I use proprietary APIs>  

Enumeration en1 = multi.getParameterNames();
        while (en1.hasMoreElements()) { 
            String strParamName = (String)en1.nextElement(); 
            String[] strParamValues = multi.getParameterValues(strParamName); 

            for (int i = 0; i < strParamValues.length; i++) { 
            System.out.println(strParamName + "=" + strParamValues[i]); 
            } 

        }
于 2013-08-23T09:21:02.563 に答える