我必须开发一个jsp来执行文件上传。我正在使用Tomcat7和servlet-api 3.0。如果我从Eclipse中的服务器启动Tomcat,则jsp效果很好,否则,如果我将战争部署在tomcat中,则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
必须使用multipartconfigweb.xml
或@MultipartConfig
批注为servlet显式启用multipart功能。
如果未启用,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页面中,您还必须检查请求是否为multipart-request,否则getParts()
会引发错误:
<%
String contentType = request.getContentType();
if ((contentType != null) && contentType.startsWith("multipart/form-data"))
{
Part part = request.getPart("upload");
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句