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

问题描述 投票:4回答:3

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

这是我的中继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"
java jsp servlets
3个回答
8
投票

为什么您需要添加它?只是保持它。

[如果要通过<input type="file">上传文件(稍后打算添加),则应在Servlet上放置@MultipartConfig批注,以便request.getParameter()可以正常工作,并且所有已上传的文件都可以由request.getPart()检索。

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

另请参见:


1
投票

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

检出Commons file upload程序包以进行多部分请求处理。


0
投票

我包括此信息只是为了进行故障排除的其他信息。如果您遇到困难,并且想知道通过multipart请求发送的所有参数,则可以使用以下代码打印所有参数。

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

        }
© www.soinside.com 2019 - 2024. All rights reserved.