【问题标题】:Why am i getting a "Error 500: java.lang.NullPointerException" java servlets为什么我会收到“错误 500:java.lang.NullPointerException”java servlet
【发布时间】:2012-03-05 08:30:42
【问题描述】:

我正在尝试将文件从我的 html 页面上传到我的 servlet 端代码并将其存储在数组列表中

这是我的html:

<pre>
<!DOCTYPE HTML>
<html>
<head>
<title>file upload</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<form action="url to my servlet java code" method="post"  ENCTYPE="multipart/form-data">
<input type="file" value="browse..."/>
<br/>
<input type="submit" value="Upload File" />
</form>
</body>
</html>
</pre>

。 .

。 .

这就是我的 servlet 页面的 doGet() 方法中的内容

Part p1 = request.getPart("textfile.txt");
Scanner in = new Scanner(p1.getInputStream());
ArrayList<String> newList = new ArrayList<String>();
while(in.hasNextLine()){
     newList.add(in.nextLine());
}
Collections.shuffle(newList);

所以一旦我选择了我想要的文本文件并点击上传,我得到一个空指针异常错误。

帮助?

【问题讨论】:

  • 你认为textfile.txt是上传的文件吗?
  • Jimmy as James 问你有没有试过调试?你有看过堆栈跟踪吗?您在哪一行获得 NPE?你有没有看到p1 是否为空?我想到了一些想法。
  • 您不应该在输入 type=file 上放置一个名称属性并使用 getPart 传递相同的名称吗?有点像您使用 getParameter() 从请求中获取参数。
  • 是的,我假设 .txt 是上传的文件。

标签: java html file servlets upload


【解决方案1】:

因为当用户到达页面时,它是一个GET 操作,因此根本不需要向页面提供任何数据。但是您在代码中假设getPart 没有返回null。然而,getPart 明确定义为返回 null if "...此请求的类型为 multipart/form-data,但不包含请求的部分。" (ref )。

您的表单被定义为使用POST,因此您希望在doPost 函数中处理它,而不是在doGet 函数中。

【讨论】:

  • 我的 doPost 调用了 doGet,这是否可以弥补?
  • @JimmyServlet:不,因为当浏览器直接访问 URL 时,会调用 doGet 而没有相关的 Part
【解决方案2】:

有2个主要问题:

  1. 该代码必须在doPost() 方法中。不要混淆它们,也不要从另一个开始调用。这是一个糟糕的设计(是的,我知道大多数教程都以这种方式显示它们,但这更多地说明了教程本身)。另请参阅我们的servlets wiki page,了解如何正确使用 servlet。

  2. 您没有在输入元素上指定任何名称,而您期望该元素的名称为"textfile.txt"(这本身没有意义,您似乎期望上传文件的文件名自动成为输入元素名称,如果最终用户选择具有不同名称的文件,您认为它会如何工作?)。您需要以通常的方式为输入元素命名,以便您可以通过该名称获得Part。例如

    <input type="file" name="upload" />
    

    Part part = request.getPart("upload");
    // ...
    

    您只需要确保您已将@MultipartConfig 注释放在servlet 上。另见How to upload files to server using JSP/Servlet?的底部

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 2020-11-05
相关资源
最近更新 更多