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

标签 java jsp servlets jakarta-ee

我正在尝试将文件上传到 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 技术。

另请参阅:

<小时/>

更新:根据您的代码更新,这将不起作用。您需要设置表单的enctypemultipart/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/

相关文章:

java - 在 ViewHolder 内部类中访问 RecyclerView.Adapter 数据

java - 具有复合主键和外键的 JPA 实体

java - JVM 是否优化了不必要的自动装箱?

java - 打印数字并选择正确的 for 循环

java - 我是否正确理解了 servlet 的工作?

java - 解析请求URL时如何获取URL标签?

java - 使用 javascript 在 JSP 中仅允许 0-9 位数字(甚至不包括 '.' [Dot])的正则表达式

java - 如何让 Liferay 不产生压缩的 HTML 代码?

java - Java 中通过 http 全双工的 Servlet ?

java - Applet - Servlet 通信