Как добавить отображение сервлета фронт-контроллера в 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-адресам.