Почему 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-шаблон должен начинаться с/