Страницы

Поиск по вопросам

четверг, 11 октября 2018 г.

Сервлет отрабатывает 2 или более раз

Сайт написан на чистых сервлетах, никаких фреймворков не используется. При открытии любой страницы сервлет этой страницы отрабатывает 2 или более раз.
В чем причина?

Маппинг сервлетов в аннотациях. Например, для главной страницы:
Index.java
@WebServlet(name = "index", urlPatterns = {"/index.html"}) public class Index extends AbstractServlet {
protected static char[] page;
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doResponse(request, response); }
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doResponse(request, response); }
@Override protected void preparePage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { StringBuilder stringBuilder = new StringBuilder();
... creating page from template ...
setPage(stringBuilder.toString().toCharArray()); } }

AbstractServlet.java
public abstract class AbstractServlet extends HttpServlet {
protected char[] getPage() throws ServletException, IOException { return (char[]) this.getClass().getField("page").get(this.getClass()); }
protected void setPage(char[] page) { this.getClass().getField("page").set(this.getClass(), page); }
protected void doResponse(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter pw = response.getWriter();
if (this.getPage() == null) { this.preparePage(request, response); }
pw.write(this.getPage()); }
protected abstract void preparePage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; }

Скриншот заголовков первого запроса


Скриншот заголовков второго запроса


Ответ

Клиент указал в сообщении referrer: http://localhost/index.php, это означает что первый запрос инициировал второй (это аутентификация, либо переадресация, или иная ошибка).
Теперь видно, что браузер создает второй запрос на /index.html. Но в ответе сервера нет заголовка Redirect /index.html и код ответа 200. Значит в теле ответа есть текст:

Либо иные ссылки на /index.html. И судя по Accept идет запрос картинки.
Если нет, приложите к вопросу "тело" первого сообщения сервера, разгадка в нем.
А сервлет вполне нормально обрабатывает два разных запроса:
GET(http://localhost/) GET(http://localhost/index.html)

Комментариев нет:

Отправить комментарий