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 servlet,我正在从这个表单发送数据

<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在您的 servlet 上添加注释,这样就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 回答
-1

删除表单标签并使用

echo <?php form_open_multipart('Controller/function');

每当我使用时,我都会遇到同样的问题,enctype="multipart/form-data" 我没有得到文件名,当我删除它工作正常时,尝试它对我有用

于 2020-09-30T02:58:46.557 回答