Функция записи HttpServletResponse getWriter () начинает выдавать исключение nullpointer через несколько дней? - PullRequest
0 голосов
/ 26 февраля 2020

Я реализовал следующую функцию отправки сервлета на сервере Jetty. В HttpServletResponse он просто напишет некоторую строку.

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write("some json string");
    response.getWriter().flush();
}

В начале все было хорошо. Но через некоторое время (несколько дней; я не использовал его и просто поддерживал работу сервера Jetty), сервлет начинает выдавать исключение нулевого указателя в строке response.getWriter().write("some json string");

java.lang.NullPointerException
        at org.eclipse.jetty.server.ResponseWriter.write(ResponseWriter.java:246)

Я не знать, что пошло не так. Но после перезапуска сервера Jetty проблема исчезла. Ребята, вы знаете, почему?

1 Ответ

0 голосов
/ 27 февраля 2020

Чтобы ответить на исключение NullPointerException

java.lang.NullPointerException
        at org.eclipse.jetty.server.ResponseWriter.write(ResponseWriter.java:246)

Похоже, что вы дали Writer ноль String.

См .: https://github.com/eclipse/jetty.project/blob/jetty-9.4.22.v20191022/jetty-server/src/main/java/org/eclipse/jetty/server/ResponseWriter.java#L246

Часть, где вы говорите, что Jetty перестает работать через несколько дней, вероятно, потому что на вашем компьютере есть процесс, который периодически очищает системный временный каталог, удаляя содержимое из-под Jetty.

См .: Jetty перестает отвечать по истечении некоторого периода времени

Вероятность исключения NullPointerException похожа на вероятность того, что запись не удалась, и вы не проверили этот факт.

HttpServletResponse.getWriter() возвращает java.io.PrintWriter.

Использование различных методов .write() никогда не вызовет ошибку или исключение.

Вам необходимо использовать .checkError() способ узнать, когда запись не удалась.

Это решение старой школы по java.io.PrintWriter, которое на самом деле довольно неудобно.

См .: PrintWriter и PrintStream никогда не генерируют IOExceptions

...