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