来自网页的输入返回的对象类型

时间:2010-06-11 00:21:30

标签: java jsp servlets java-ee

我正在尝试将文件上传到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,所以如果有人知道我应该把它放到哪个也会非常有帮助。

1 个答案:

答案 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或导入时才会看到它,如果由于某种原因这会打扰你。

另见: