Я работаю над учебником по сервлету Java EE и пробовал пример настроения. Я заметил, что doFilter получает вызов дважды, как только вызов сервлета находится в цепочке, а во второй раз это не так.
Я добавил несколько printlns в TimeOfDayFilter.java и в MoodServlet.java, чтобы показать это.
TimeOfDayFilter.java:
...
System.out.println("TimeOfDay before"); //added
chain.doFilter(req, res);
System.out.println("TimeOfDay after"); //added
...
MoodServlet.java:
...
response.setContentType("text/html;charset=UTF-8");
System.out.println("MoodServlet"); //added
PrintWriter out = response.getWriter();
...
Результат от окна сервера Glassfish (3.1) при вызове сервлета выглядит следующим образом:
INFO: mood was successfully deployed in 406 milliseconds.
INFO: TimeOfDay before
INFO: MoodServlet
INFO: TimeOfDay after
INFO: TimeOfDay before
INFO: TimeOfDay after
Является ли это предполагаемым поведением? Если да, в чем причина дополнительного вызова?