我正在尝试将文件上传到jsp中,然后在其他一些代码中使用该文件。我的问题是它通过request.getAttribute()调用作为Object进入servlet,所以我不知道将它转换为什么。
到目前为止,我有这个代码来尝试测试它是什么,但我得到一个NullPointerException。
test.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,所以如果有人知道我应该把它放到哪个也会非常有帮助。
答案 0 :(得分:1)
它可能是null,因为它涉及一个全新且不同的request
。您可能已将重定向发送到servlet而不是转发?
无论如何,您不应该在JSP文件中处理文件上载,而应该在真正的servlet类中处理。由于它是一种视图技术,因此它会成为麻烦的原因。
另见:
更新:根据您的代码更新,这不起作用。您需要将表单的enctype
设置为multipart/form-data
并使用Commons FileUpload在servlet中处理它。另请参阅给定的链接。
到目前为止,3.0之前的Servlet API不支持multipart/form-data
编码,并且request.getParameter()
和consorts无法提供输入值。在这里使用request.getAttribute()
是一种误解。那里不是。您需要根据RFC2388自行解析request.getInputStream()
。但是,你会喜欢使用Apache Commons FileUpload,而不是多年来重新发明和维护一个轮子。 Apache Commons已经为你做了,利用它。
如果您已经使用Servlet 3.0(Glassfish v3),那么您可以使用内置request.getParts()
来收集项目。大多数servletcontainers都会使用Commons FileUpload,只有在/WEB-INF/lib
或导入时才会看到它,如果由于某种原因这会打扰你。
另见: