Как добавить отображение сервлета фронт-контроллера в URL в jsp

У меня есть простое веб-приложение Java, работающее в Tomcat.

В нем сервлет FrontController.java имеет отображение @WebServlet("/controller/*"), Итак, чтобы запустить сервлет, мне нужен каждый URL для начала /controller/, Мне нужно иметь возможность отображать изображения на страницах, изображения хранятся вне контейнера, так что я пишу их в OutputStream). Но если я напишу мои src URL, как ${pageContext.request.contextPath}images/picture.jpg тогда результирующий URL будет явно localhost:8080/rootFolder/images/picture.jpg а не localhost:8080/rootFolder/controller/images/picture.jpg,

Чтобы загрузить эти файлы, я могу либо вручную предварять controller/ после каждого ${pageContext.request.contextPath} что плохо, или я могу последовать совету, найденному здесь, добавить отображение сервлета диспетчера в URL и добавить строку request.setAttribute("frontControllerMapping", "controller/"); для каждого метода, который обрабатывает запрос, а затем код URL, как это ${pageContext.request.contextPath}${frontControllerMapping}images/picture.jpg что лучше.

Мои вопросы: как добавить сопоставление контроллера для каждого URL, который должен обрабатываться сервлетом, и как это сделать правильно? Является ли второй вариант правильным способом сделать это?

1 ответ

Вместо добавления полного URL-адреса для каждого ресурса вы можете использовать относительные URL-адреса. Если это не вариант, то вы можете просто сопоставить все запросы к сервлету следующим образом:

@WebServlet("/*")

Тогда вам не нужно беспокоиться о добавлении пути контроллера ко всем URL-адресам.

Другие вопросы по тегам