为什么我得到一个“错误500:java.lang.NullPointerException”java servlets

时间:2012-02-13 22:27:58

标签: java html file servlets upload

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

继承人我的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);

所以一旦我选择了我想要的文本文件并点击上传,我就会收到nullpointerexception错误。

帮助?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

有两个主要问题:

  1. 该代码必须位于doPost()方法内。不要混淆它们,也不要打电话给另一个。这是一个简单的糟糕设计(是的,我知道大多数教程都是这样展示的,但这更多地讲述了教程本身)。另请参阅我们的servlets wiki page以了解如何正确使用servlet。

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

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

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

    您只需要确保在servlet上放置了@MultipartConfig注释。另见How to upload files to server using JSP/Servlet?

  3. 的底部