HttpServletRequest#getParts() jsp 总是 return 空集合
HttpServletRequest#getParts() jsp always return empty collection
我必须开发一个 jsp 来执行文件上传。我正在使用 Tomcat7 和 servlet-api 3.0。如果我从 Eclipse 中的服务器启动 Tomcat,则 jsp 运行良好,否则,如果我在 tomcat 中部署 war,则 jsp 不起作用。问题是 request.getParts() 总是返回一个空集合。
我做错了什么?
这是我的 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
必须为 servlet 显式启用多部分功能,使用 web.xml
中的多部分配置或 @MultipartConfig
注释。
如果未启用 request.getParts()
将永远不会 return 非空集。 (请注意,对于从 Eclipse 启动的 Tomcat,我无法重现您的发现)。
为 JSP 页面做这个配置很棘手(不知道 @MultipartConfig
是否可以应用于 JSP 页面),但这里有一个使用 [=12] 的解决方案=]:鉴于您的 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");
...
我必须开发一个 jsp 来执行文件上传。我正在使用 Tomcat7 和 servlet-api 3.0。如果我从 Eclipse 中的服务器启动 Tomcat,则 jsp 运行良好,否则,如果我在 tomcat 中部署 war,则 jsp 不起作用。问题是 request.getParts() 总是返回一个空集合。
我做错了什么?
这是我的 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
必须为 servlet 显式启用多部分功能,使用 web.xml
中的多部分配置或 @MultipartConfig
注释。
如果未启用 request.getParts()
将永远不会 return 非空集。 (请注意,对于从 Eclipse 启动的 Tomcat,我无法重现您的发现)。
为 JSP 页面做这个配置很棘手(不知道 @MultipartConfig
是否可以应用于 JSP 页面),但这里有一个使用 [=12] 的解决方案=]:鉴于您的 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");
...