Почему я получаю Java-сервлеты "Ошибка 500: java.lang.NullPointerException" - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь загрузить файл со своей html-страницы в мой код со стороны сервлета и сохранить его в массиве

вот мой html:

<code><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>

,.

..

вот что у меня есть в методе 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 ]

3 голосов
/ 14 февраля 2012

Потому что, когда пользователь попадает на страницу, это операция GET, и поэтому вообще не требуется, чтобы какие-либо данные были предоставлены странице. Но вы предполагаете в своем коде, что getPart не возвращает null. И все же, getPart четко определен как возвращающий null, если "... этот запрос имеет тип multipart / form-data, но не содержит запрошенную часть." ( ref ).

Ваша форма определена как использование POST, поэтому вы хотите обрабатывать ее в функции doPost, а не в функции doGet.

1 голос
/ 14 февраля 2012

Есть 2 основных проблемы:

  1. Этот код должен быть внутри метода doPost(). Не путайте их и не звоните друг другу. Это довольно плохой дизайн (да, я знаю, что большинство обучающих программ показывают их таким образом, но это говорит больше о самом учебном пособии). См. Также нашу вики-страницу сервлетов , чтобы узнать, как правильно использовать сервлеты.

  2. Вы не указали никакого имени в элементе input, в то время как вы ожидаете, что элемент имеет имя "textfile.txt" (что само по себе не имеет смысла, вы, похоже, ожидаете, что имя файла загруженный файл автоматически становится именем входного элемента, как, по вашему мнению, он будет работать, если конечный пользователь выберет файл с другим именем?). Вам нужно дать элементу ввода имя обычным способом, чтобы вы могли получить Part именно по этому имени. Э.Г.

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

    с

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

    Вам нужно только убедиться, что вы добавили аннотацию @MultipartConfig к сервлету. См. Также нижнюю часть Как загрузить файлы на сервер, используя JSP / Servlet?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...