Подтвердить что ты не робот

Зачем ставить JSP в WEB-INF?

Я заметил, что общий шаблон заключается в том, чтобы помещать страницы JSP в папку WEB-INF (в отличие от WAR root). Какая разница? Почему это предпочтительнее?

4b9b3361

Ответ 1

Файлы в WEB-INF не отображаются пользователям. Это немного безопаснее.

Если (надуманный пример) вы включаете db.jsp, но он сам генерирует исключение, злоумышленник может открыть http://yoursite.com/db.jsp и получить некоторое представление о вашем приложении (худшее - учетные данные базы данных) из сообщения об исключении.

Ответ 2

Я не думаю, что это хороший дизайн, но я считаю, что могу объяснить рассуждения.

Контейнеры сервлета не будут размещать контент в WEB-INF. Располагая свои JSP там, вы запрещаете кому-либо получать прямой доступ к JSP, перейдя к нему в браузере по имени. Это можно считать хорошей практикой, если некоторые из ваших JSP - это просто фрагменты кода/разметки и не предназначены для непосредственного использования и, возможно, открывают какую-то дыру в безопасности, которой у вас не было.

По-прежнему можно получить контейнер, чтобы видеть и использовать JSP, как ожидалось, даже в WEB-INF.

Ответ 3

Дополнительный плюс при использовании Controller (или Front-Servlet) заключается в том, что вы отделяете URL-адрес от физического расположения JSP файлов в вашем проекте.

В качестве примера можно привести простое сопоставление запросов из Spring Controller:

@RequestMapping(value = "/item/edit", method = RequestMethod.GET)
public String getItemEdit(@RequestParam(value = "id", required = false) final String id) {
    return "itemeditform";
}

ViewResolver заботится о сопоставлении URL-адреса с местом, где находятся ваши JSP.