我正在尝试将文件上传到 jsp 中,然后在其他代码中使用该文件。我的问题是它通过 request.getAttribute() 调用作为对象进入 servlet,所以我不知道将其转换为什么。
到目前为止,我有这段代码来尝试测试它是什么,但我收到了 NullPointerException。
测试.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Input Test</title>
</head>
<body>
<form action="InputServlet" method="POST">
<input type="file" name="file1">
<input type="submit" value="submit">
</form>
</body>
</html>
inputservlet.java
public class InputServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println(request.getAttribute("file1").getClass());
}
}
我对正在发生的事情的理解是否有缺陷,或者我只是编码错误?
此外,我希望类型为 Object,因此如果有人知道我应该将其转换为什么,那也会非常有帮助。
最佳答案
它可能为 null,因为它涉及一个全新且不同的 request
。您可能已向 servlet 发送了重定向而不是转发?
无论如何,您不应该在 JSP 文件中处理文件上传,而应该在真正的 servlet 类中处理。否则它会带来麻烦,因为它是一种 View 技术。
另请参阅:
<小时/>更新:根据您的代码更新,这将不起作用。您需要设置表单的enctype
至multipart/form-data
并使用 Commons FileUpload 在 servlet 中处理它。另请参阅给定的链接。
言归正传,multipart/form-data
3.0 之前的 Servlet API 不支持编码,并且 request.getParameter()
无法提供输入值和配偶。使用request.getAttribute()
这是一个误解。那里不是为了。您需要解析 request.getInputStream()
自己按照RFC2388 。然而,您希望使用 Apache Commons FileUpload 来实现此目的,而不是多年来重新发明和维护一个轮子。 Apache Commons 已经为您做到了,请充分利用它。
如果您已经使用 Servlet 3.0 (Glassfish v3),那么您可以使用内置 request.getParts()
收集元素。大多数 servlet 容器都会在底层使用 Commons FileUpload,只是您在 /WEB-INF/lib
中看不到它。或进口,如果这因某种原因困扰您。
另请参阅:
关于java - 网页输入返回的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3019448/