Сайт написан на чистых сервлетах, никаких фреймворков не используется. При открытии любой страницы сервлет этой страницы отрабатывает 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)
Комментариев нет:
Отправить комментарий