在enctype =“multipart / form-data”请求不起作用之后

时间:2012-10-19 13:04:03

标签: java jsp servlets

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");
    }
}

这是我的接力服务员,我是从

发送日期的
 <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 =&#34;多部分/格式数据&#34; //当我删除它的工作正常

4 个答案:

答案 0 :(得分:8)

为什么需要添加呢?坚持下去。

如果你需要它来上传你想要稍后添加的<input type="file">文件,那么你应该在你的servlet上添加@MultipartConfig注释,这样request.getParameter()就可以了并且request.getPart()可以检索所有上传的文件。

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

另见:

答案 1 :(得分:1)

使用multipart/form-data编码的参数在POST正文中发送 - 而不是作为常规请求参数,因此无法使用request.getParamter(...)读取。

查看Commons file upload包以进行多部分请求处理。

答案 2 :(得分: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]); 
            } 

        }

答案 3 :(得分:-1)

删除表单标签并使用

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

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