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"
为什么您需要添加它?只是保持它。
[如果要通过<input type="file">
上传文件(稍后打算添加),则应在Servlet上放置@MultipartConfig
批注,以便request.getParameter()
可以正常工作,并且所有已上传的文件都可以由request.getPart()
检索。
@WebServlet("/Relay")
@MultipartConfig
public class Relay extends HttpServlet {
// ...
}
用multipart/form-data
编码的参数在POST正文中发送-不作为常规请求参数发送,因此无法使用request.getParamter(...)
读取。
检出Commons file upload程序包以进行多部分请求处理。
我包括此信息只是为了进行故障排除的其他信息。如果您遇到困难,并且想知道通过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]);
}
}