更新
对不起,我最初错过了这个enctype="multipart/form-data"
部分。因此,正如用户@tomor 正确指出的那样,问题背后的原因是您使用enctype="multipart/form-data"
. 阅读他的回答。
有关您的问题的更详细解释,请阅读 BalusC 的以下答案:如何使用 JSP/Servlet 将文件上传到服务器?.
以下解决方案适用于 Servlet v3.0。对于旧版本,最流行的解决方案是使用Apache Commons FileUpload(请参阅 BalusC 答案中的详细信息)。
如果您想检查按下了哪个提交按钮,其中一种解决方案可能是将提交按钮命名为相同,然后检查值。
示例:
HTML
<form action="FileUpload" method="post" enctype="multipart/form-data">
<input type="file" id="filename" name="filename"><br>
<input type="button" value="Upload"><br>
<input type="submit" value="Generate PDF" name="submitAction">
<input type="submit" value="Generate Excel" name="submitAction">
</form>
Servlet
NB!注意@MultipartConfig注释(自Servlet 3.0起可用)。这样您就可以正确处理多部分/表单数据请求。
TestServlet.java
package com.example;
import javax.servlet.http.HttpServlet;
import javax.servlet.annotation.WebServlet;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
@WebServlet(urlPatterns = {"/TestSubmit.do"})
@MultipartConfig
public class TestServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String submitAction= request.getParameter("submitAction");
if (submitAction != null) {
if (submitAction.equals("Generate PDF")) {
System.out.println("Generate PDF button pressed");
} else if (submitAction.equals("Generate Excel")) {
System.out.println("Generate Excel button pressed");
}
} else {
// do something about it
}
}
}
注意:您当然可以在web.xml
中进行 servlet 配置,
而不是(同样从 Servlet 3.0 开始) 。对于 : 也一样,您可以在web.xml文件中添加servlet 配置元素的子元素,而不是这个注解。@WebServlet
@MultipartConfig
<multipart-config>
示例(摘自web.xml):
<servlet>
<servlet-name>Test Servlet</servlet-name>
<servlet-class>com.example.TestServlet</servlet-class>
<multipart-config>
<!-- In this case empty, but can contain additional nested elements -->
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>Test Servlet</servlet-name>
<url-pattern>/TestSubmit.do</url-pattern>
</servlet-mapping>
更多有用的链接: