Предположим, у нас есть проект со следующей структурой:
web
articles
main.jsp
sidearts.jsp
central.jsp
forum
main.jsp
css
js
WEB-INF
web.xml
Обратите внимание, что на данный момент у нас еще нет фронт-контроллера.
После развертывания с некоторым аспектом (пусть это будет «asdf») мы можем получить доступ к нашим страницам, используя следующие URL-адреса:
http://localhost:8080/asdf/articles/main.jsp http://localhost:8080/asdf/forum/main.jsp and so on..
main.jsp генерирует html и включает в себя sidearts.jsp (посредством jstl c:import или любым другим способом)
А что будет после добавления фронт-контроллера?
Предположим, у нас есть сервлет ArticlesController, который отвечает за отправку
некоторых запросов и имеет следующее отображение:
<servlet>
<servlet-name>ArtsController</servlet-name>
<servlet-class>org.forstackoverflow.ArticlesController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ArtsController</servlet-name>
<url-pattern>/articles/*</url-pattern>
</servlet-mapping>
Теперь, когда мы запрашиваем URL http://localhost:8080/asdf/articles/main, ArticlesController обрабатывает этот запрос и пытается включить article/main.jsp. И в этот момент начинается бесконечный цикл, потому что /articles/* отображается на ArtsController.
Каково правильное решение описанной проблемы?
Мои варианты:
1) сделать маппинги для всех jsp-файлов (не думаю, что это приемлемо)
2) изменить названия каталогов (статьи->искусство); но затем мы получаем много новых URL-адресов (например, http://localhost:8080/asdf/arts/main.jsp), и я думаю, что это может быть источником ошибок.