【问题标题】:Type of object returned by an input from a web page网页输入返回的对象类型
【发布时间】:2010-06-11 00:21:30
【问题描述】:

我正在尝试将文件上传到 jsp 中,然后在其他代码中使用该文件。我的问题是它通过 request.getAttribute() 调用作为对象进入 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,所以如果有人知道我也应该转换它,那也将非常有帮助。

【问题讨论】:

    标签: java jsp servlets jakarta-ee


    【解决方案1】:

    它很可能是空的,因为它涉及一个全新的、不同的request。您可能已经向 servlet 发送了重定向而不是转发?

    无论如何,您不应在 JSP 文件中处理文件上传,而应在真正的 servlet 类中处理。由于它是一种视图技术,否则它会带来麻烦。

    另请参阅:


    更新:根据您的代码更新,这将不起作用。您需要将表单的enctype 设置为multipart/form-data 并使用Commons FileUpload 在servlet 中对其进行处理。另请参阅给定的链接。

    直言不讳,3.0 之前的 Servlet API 不支持 multipart/form-data 编码,并且 request.getParameter() 和相关方无法使用输入值。这里使用request.getAttribute() 是一种误解。这不是为了。您需要按照RFC2388 自己解析request.getInputStream()。但是,您希望为此使用 Apache Commons FileUpload,而不是重新发明和维护轮子多年。 Apache Commons 已经为您做到了,好好利用吧。

    如果您已经在使用 Servlet 3.0 (Glassfish v3),那么您可以使用内置的 request.getParts() 来收集项目。大多数 servlet 容器会在后台使用 Commons FileUpload,如果由于某种原因打扰了您,您只会在 /WEB-INF/lib 或导入中看不到它。

    另请参阅:

    【讨论】:

    • 不。我设置了输入形式的动作来调用 servlet。我只是想获取该文件,以便将其传递给处理它的 POJO 类。我将在我的帖子中更新我的 jsp 和 servlet 代码,以便所有人都能看到。
    • 你到底是用什么来解析文件上传的?这听起来好像您正在使用“透明”处理上传的第 3 方过滤器。无论如何,您是否阅读了指向您至少了解基础知识的链接? IE。它应该如何在后台工作?
    • 我也喜欢你的第一个链接,除了我不需要在文件系统的任何时候保存文件。我只需要将它发送到我的其他类,然后将其发送到存储它的真实数据库。我只需要将它放入一个 java 对象中,这样我就可以处理它了。
    • 重读你的第一个链接后,我想我可能明白我需要做什么了。使用第一部分将上传的文件转换为 File 对象,然后将文件对象转换为 byte[] 因为那是我最终需要的对象类型。听起来可行吗?
    • 可行,是的。写信给ByteArrayOutputStream 并使用toByteArray() 获取byte[]。然而,这是占用内存的。它将分配与文件大小一样多的 JVM 内存。你到底想在 JSP 中用它做什么?
    猜你喜欢
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2020-06-14
    相关资源
    最近更新 更多