Не коментирайте конвенцията, използвана при именуване на пакети в 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 със servlet-mapping във файла 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