#java #tomcat #servlets
Вопрос:
Прочитав много других ответов SO, а также некоторые онлайн-статьи, я пытаюсь обобщить понятия корневого контекста, виртуального пути к фактическому отображению пути к файлу и значения ведущей косой черты.
- Корневой контекст, основанный на спецификации сервлета, соответствует URI
http://host:port/<context-root>/
. Как только наше веб-приложение развернуто, этот корневой контекст всегда сопоставляется с базовым каталогом нашего веб-приложения (например, «взорванная война») в фактической файловой системе, которая всегда является родительским каталогом папки WEB-INF. - Каждый раз, когда мы используем ведущую косую черту «/» в веб-приложении (например web.xml, сервлеты, фильтры), начальная косая черта всегда указывает на корень контекста,а не на абсолютный корень
http://host:port/
, поэтому всякий раз, когда мы это делаемrequest.getRequestDispatcher("/foo/bar/baz.jsp").forward(...)
С точки зрения контейнера сервлета, нам запрашивается ресурс , расположенный по адресу
http://host:port/<context-path>/foo/bar/baz.jsp
, который сопоставляется со следующим путем
в файловой системеfile:///<$CATALINA_HOME>/webapps/our-application/foo/bar/baz.jsp
- Каждый раз, когда мы используем начальную косую черту «/» в контексте, который имеет значение только для клиента (т. Е. браузера), начальная косая черта всегда указывает на абсолютный корень
http://host:port/
. Примеры мест, о которых я могу думать, — это теsrc
, иhref
атрибут html-элемента в файлах JSP, или URL-адрес перенаправленияHttpServletResponse#sendRedirect
, или путь в файле cookieCookie#setPath
Редактировать: извините, если это недостаточно ясно: я искал кого-нибудь, кто исправил бы мое понимание, если кто-то из них ошибается или что-то упускает.
Комментарии:
1. Ваши утверждения верны, так в чем же ваш вопрос?
2. @PiotrP.Karwasz извините, если это недостаточно ясно: я довольно новичок в сервлете, поэтому я искал какое-то подтверждение пунктов, которые я резюмировал выше. Спасибо за ваше подтверждение.