我必须开发一个jsp来执行文件上传。我正在使用Tomcat7和servlet-api 3.0。如果我从Eclipse中的服务器启动Tomcat,jsp运行良好,否则如果我在tomcat中部署war,则jsp不起作用。问题是request.getParts()reutrn总是一个空集合。
我做错了什么?
这是我的jsp:
<%@page import="javax.servlet.http.Part" %>
<%@page import="java.util.Collection"%>
<html>
<head>
</head>
<body>
<h1>Test File Upload</h1>
<br/>
<form action="test.jsp" name="fileForm" id="fileForm" method="post" enctype="multipart/form-data" >
<input type="text" name="text-test" value="" />
<input type="file" name="upload" />
<input type="submit" id="commit" name="commit" value="Upload">
</form>
<%
try {
Part part = request.getPart("upload");
System.out.println(part == null ? "part upload is null" : "part upload size : " + part.getSize());
Collection<Part> parts = request.getParts();
System.out.println("parts size: " + parts.size());
for (Part p: request.getParts()) {
out.write("Part name: " + p.getName() + "<br/>\n");
out.write("<br/>\n");
}
} catch (Exception e) {
e.printStackTrace();
}
%>
</body>
</html>
这是控制台输出:
part upload is null
parts size: 0
答案 0 :(得分:1)
必须使用web.xml
中的多部分配置或@MultipartConfig
注释为servlet显式启用多部分功能。
如果未启用request.getParts()
将永远不会返回非空集。 (请注意,我无法重现您从Eclipse开始的Tomcat的发现。)
为JSP页面执行此配置很棘手(不知道@MultipartConfig
是否可以应用于JSP页面),但这是使用web.xml
的解决方案:给定JSP页面是/test.jsp
您需要添加:
<servlet>
<description></description>
<servlet-name>testjsp</servlet-name>
<jsp-file>/test.jsp</jsp-file>
<multipart-config>
<!-- enter your values -->
<max-file-size>123456</max-file-size>
<max-request-size>123456</max-request-size>
<file-size-threshold>123456</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>testjsp</servlet-name>
<url-pattern>/test.jsp</url-pattern>
</servlet-mapping>
在JSP页面中,您还必须检查请求是否是多部分请求,否则getParts()
会抛出错误:
<%
String contentType = request.getContentType();
if ((contentType != null) && contentType.startsWith("multipart/form-data"))
{
Part part = request.getPart("upload");
...