after enctype=“multipart/form-data” request not wo

2020-03-24 06:42发布

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

This is my Relay servlet, I'm sending data from this form

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

It is throwing a java.lang.NullPointerException.

But works fine when I remove this:

enctype="multipart/form-data"

3条回答
看我几分像从前
2楼-- · 2020-03-24 07:02

Why do you need to add it then? Just keep it out.

If you need it in order to upload a file by <input type="file"> which you intend to add later on, then you should put @MultipartConfig annotation on your servlet, so that request.getParameter() will work and that all uploaded files can be retrieved by request.getPart().

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

See also:

查看更多
啃猪蹄的小仙女
3楼-- · 2020-03-24 07:06

Parameters encoded with multipart/form-data are sent in POST body - not as regular request parameters, therefore can't be read using request.getParamter(...).

Check out Commons file upload package for multipart requests processing.

查看更多
够拽才男人
4楼-- · 2020-03-24 07:16

I am including this just for additional information for troubleshooting. if you are stuck and want to know about what all parameters are coming through multipart request you can print all parameters using following code.

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

        }
查看更多
登录 后发表回答