Корневой контекст, сопоставление виртуального пути с фактическим путем к файлу и значение ведущей косой черты в сервлете

#java #tomcat #servlets

Вопрос:

Прочитав много других ответов SO, а также некоторые онлайн-статьи, я пытаюсь обобщить понятия корневого контекста, виртуального пути к фактическому отображению пути к файлу и значения ведущей косой черты.

  1. Корневой контекст, основанный на спецификации сервлета, соответствует URI http://host:port/<context-root>/ . Как только наше веб-приложение развернуто, этот корневой контекст всегда сопоставляется с базовым каталогом нашего веб-приложения (например, «взорванная война») в фактической файловой системе, которая всегда является родительским каталогом папки WEB-INF.
  2. Каждый раз, когда мы используем ведущую косую черту «/» в веб-приложении (например 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
     
  3. Каждый раз, когда мы используем начальную косую черту «/» в контексте, который имеет значение только для клиента (т. Е. браузера), начальная косая черта всегда указывает на абсолютный корень http://host:port/ . Примеры мест, о которых я могу думать, — это те src , и href атрибут html-элемента в файлах JSP, или URL-адрес перенаправления HttpServletResponse#sendRedirect , или путь в файле cookie Cookie#setPath

Редактировать: извините, если это недостаточно ясно: я искал кого-нибудь, кто исправил бы мое понимание, если кто-то из них ошибается или что-то упускает.

Комментарии:

1. Ваши утверждения верны, так в чем же ваш вопрос?

2. @PiotrP.Karwasz извините, если это недостаточно ясно: я довольно новичок в сервлете, поэтому я искал какое-то подтверждение пунктов, которые я резюмировал выше. Спасибо за ваше подтверждение.