有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

由网页输入返回的对象的java类型

我试图将一个文件上传到jsp中,然后在其他代码中使用该文件。我的问题是,它通过请求作为对象进入servlet。getAttribute()调用,因此我不知道将其转换为什么

到目前为止,我有这段代码来尝试测试它是什么,但是我得到了一个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。爪哇

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) 个答案

  1. # 1 楼答案

    它可能是空的,因为它涉及一个全新的、不同的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()。然而,您希望使用ApacheCommonsFileUpload来实现这一点,而不是多年来重新发明和维护一个轮子。ApacheCommons已经为您做了,好好利用它吧

    如果您已经在Servlet 3.0(Glassfish v3)上,那么可以使用内置的^{}来收集项目。大多数servletcontainers都会在引擎盖下使用Commons FileUpload,只有在/WEB-INF/lib或导入中看不到它,如果由于某种原因而使您感到不安的话

    另请参见: