Почему url-шаблон в отображении сервлетов начинается с косой черты (/)
Я читал книгу Head First JSP и Servlets. Я просматривал карту сервлетов. И мое сомнение здесь
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.avinash.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/ServletBeer.do</url-pattern>
</servlet-mapping>
- Почему начало
url-pattern
начинается с косой черты (/
)?
- Что означает косая черта (
/
)? Является ли это нашим именем webapp?
- Что произойдет, если
url-pattern
не начинается с косой черты (/
)?
- Это спецификация для начала с косой чертой (
/
)?
И в книге ясно сказано:
Не забудьте переднюю косую черту (/) в шаблоне url.
Можете ли вы объяснить?
Ответы
Ответ 1
/
в url-pattern означает корень веб-приложения, которое использует этот web.xml. Поэтому, когда вы даете /ServletBeer.do
. Это означает http://<yourhost>:<port>/<your context Root>/ServletBeer.do
. Когда вы нажмете этот URL-адрес, будет выведен сервлет, который сопоставлен с этим i.e com.avinash.TestServlet
.
Не обязательно, что вы должны использовать /
во всех ваших URL-адресах - это зависит от того, как вы хотите его настроить. /
является просто регулярным выражением. Вы также можете использовать *.jsp
в своем url-шаблоне - который фактически вызовет этот сервлет каждый раз, когда вы запрашиваете jsp в своем веб-приложении.
Рассмотрим раздел 12.2 Спецификация сопоставлений ** из ** JSR-000315 Завершение релиза Java Servlet 3.0
12.2 Спецификация сопоставлений В дескрипторе развертывания веб-приложения для определения сопоставлений используется следующий синтаксис:
■ Строка, начинающаяся с символа '/и заканчивая символом'/* суффикс используется для отображения пути.
■ Строка, начинающаяся с символа '*. префикс используется как расширение отображение.
■ Пустая строка ( ") представляет собой специальный шаблон URL, который точно соответствует корень контекста приложения, то есть запросы формы http://host:port/<contextroot>/
. В этом случае информация о пути является/ и путь сервлетов и путь контекста - пустая строка (" ").
■ Строка, содержащая только символ /, указывает на значение по умолчанию" сервлет приложения. В этом случае путь сервлета является запросить URI минус путь контекста, а информация о пути - null.
■ Все остальные строки используются только для точных совпадений
Ответ 2
По вышеуказанным вопросам я мог бы найти ответ на один из вопросов.
Что произойдет, если url-шаблон не начинается с косой черты (/). Я проверил его, но я не помню
Когда я начал tomcat, удалив/в url-шаблоне, я получил следующую ошибку
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> ServletBeer.do in servlet mapping
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3267)
at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3242)
at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1324)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1348)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:880)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:378)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5343)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
Это указывает на то, что если мы не используем обязательное расширение расширения, url-шаблон должен начинаться с/