gpt4 book ai didi

java - HttpServletRequest#getParts() jsp 始终返回空集合

转载 作者:行者123 更新时间:2023-12-01 10:27:05 25 4
gpt4 key购买 nike

我必须开发一个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 或 @MultipartConfig 注释。

如果未启用,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");
...

关于java - HttpServletRequest#getParts() jsp 始终返回空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35312173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com