Не комментируйте соглашение, используемое при именовании пакетов в Java.
Внутри пакета Ch7ActionTags есть сервлет, сопоставленный с
@WebServlet("/FlavorListServlet")
Моя страница jsp находится в папке в WebContent, путь которой:
/Ch7RequestDispatching/ActionTags/MyPage.jsp
Вышеупомянутый сервлет включен на эту страницу jsp следующим образом.
<jsp:include page="/FlavorListServlet"></jsp:include>
Когда я попытался запустить эту страницу jsp, URL-адрес в браузере отображается как
http://localhost:7860/Phil_Hanna/Ch7RequestDispatching/ActionTags/MyPage.jsp
и сервлет успешно включен.
Я попытался поэкспериментировать с косой чертой /
Но и это не сработало:
<jsp:include page="FlavorListServlet"></jsp:include>
<jsp:include page="/Ch7RequestDispatching/ActionTags/FlavorListServlet"></jsp:include>
Теперь проходим тот же процесс (замена аннотации @WebServlet на отображение сервлета в файле web.xml)
<servlet>
<servlet-name>FlavorListServletName</servlet-name>
<servlet-class>Ch7ActionTags.FlavorListServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FlavorListServletName</servlet-name>
<url-paatern>/Ch7RequestDispatching/ActionTags/FlavorListServlet
</url-pattern>
</servlet-mapping>
Моя страница jsp сейчас:
<jsp:include page="FlavorListServlet"></jsp:include> <%-- / is absent here --%>
С помощью приведенного выше сопоставления содержимое сервлета успешно включено.
Но это не работает,
<jsp:include page="/FlavorListServlet"></jsp:include>
Итак, очевидный вопрос: почему существует разница в / при работе с двумя возможными сценариями:
<jsp:include page="/FlavorListServlet"></jsp:include> works with @WebServlet
<jsp:include page="FlavorListServlet"></jsp:include> works with web.xml