Что такое url-шаблон в web.xml и как настроить сервлет
Я вручную настроил web.xml
для своего приложения. Теперь я сталкиваюсь с проблемами при запуске приложения. Я пытаюсь получить доступ к моей servlet
с моей страницы jsp
. Но, это бросает ошибку как page not found
.
Сервлеты помещаются в папку ниже
<application folder>/WEB-INF/classes/<package>
Итак, какими должны быть записи для сервлетов в url-pattern
и servlet-mapping
. Таким образом, servlet
может быть доступен через URL.
Ответы
Ответ 1
url-pattern
используется в web.xml
для сопоставления вашего servlet
с определенным URL-адресом. См. Ниже код xml, аналогичный код, который вы можете найти в конфигурационном файле web.xml
.
<servlet>
<servlet-name>AddPhotoServlet</servlet-name> //servlet name
<servlet-class>upload.AddPhotoServlet</servlet-class> //servlet class
</servlet>
<servlet-mapping>
<servlet-name>AddPhotoServlet</servlet-name> //servlet name
<url-pattern>/AddPhotoServlet</url-pattern> //how it should appear
</servlet-mapping>
Если вы измените url-pattern
на AddPhotoServlet
от /AddPhotoServlet
до /MyUrl
. Тогда сервлет AddPhotoServlet
может быть доступен с помощью /MyUrl
. Хорошо по соображениям безопасности, где вы хотите скрыть свой фактический URL-адрес страницы.
Java Servlet url-pattern
Спецификация:
- Строка начинается с символа '/' и заканчивается символом '/*'суффикс используется для отображения пути.
- Строка, начинающаяся с '*.'префикс используется как расширение.
- Строка, содержащая только символ '/', указывает сервлет приложения по умолчанию. В этом случае путь сервлета является URI запроса, минус путь контекста, и информация о пути ноль.
- Все остальные строки используются только для точных совпадений.
Ссылка: Спецификация сервлетов Java
Вы также можете увидеть эту настройку сервлета
Ответ 2
Сервлет-сопоставление имеет два дочерних тега, url-шаблон и имя сервлета. url-pattern указывает тип URL-адресов, для которых должен быть вызван сервлет, указанный в имени сервлета. Имейте в виду, что контейнер будет использовать регистр для сравнения строк для сопоставления сервлетов.
Первая спецификация файла url-pattern
a web.xml
для контекста сервера в контейнере сервлета на сервере .com соответствует шаблону в <url-pattern>/status/*</url-pattern>
следующим образом:
http://server.com/server/status/synopsis = Matches
http://server.com/server/status/complete?date=today = Matches
http://server.com/server/status = Matches
http://server.com/server/server1/status = Does not match
Вторая спецификация url-pattern
Контекст, расположенный на пути/примерах агента в example.com, соответствует шаблону в <url-pattern>*.map</url-pattern>
следующим образом:
http://server.com/server/US/Oregon/Portland.map = Matches
http://server.com/server/US/server/Seattle.map = Matches
http://server.com/server/Paris.France.map = Matches
http://server.com/server/US/Oregon/Portland.MAP = Does not match, the extension is uppercase
http://example.com/examples/interface/description/mail.mapi =Does not match, the extension is mapi rather than map`
Третья спецификация url-mapping
. Отображение, содержащее шаблон <url-pattern>/</url-pattern>
, соответствует запросу, если другой шаблон не совпадает. Это сопоставление по умолчанию. Сервлет, сопоставленный этому шаблону, называется сервлетом по умолчанию.
Отображение по умолчанию часто направляется на первую страницу приложения. Явное предоставление сопоставления по умолчанию также гарантирует, что искаженные URL-запросы в обращении приложения обрабатываются приложением, а не возвращают ошибку.
Элемент сопоставления сервлет ниже отображает экземпляр сервлета server
в сопоставление по умолчанию.
<servlet-mapping>
<servlet-name>server</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
В контексте, который содержит этот элемент, любой запрос, который не обрабатывается другим сопоставлением, перенаправляется в сервлет server
.
И самое главное, мы должны знать о правиле для сопоставления URL-адресов
- Контейнер попытается найти точное соответствие пути запроса к пути сервлета. Успешное совпадение выбирает сервлет.
- Контейнер будет рекурсивно пытаться сопоставить самый длинный префикс пути. Это делается путем постепенного изменения дерева путей в каталоге, используя символ/как разделитель путей. Наибольшее совпадение определяет выбранный сервлет.
- Если последний сегмент пути URL содержит расширение (например,.jsp), контейнер сервлета попытается сопоставить сервлет, обрабатывающий запросы для расширения. Расширение определяется как часть последнего сегмента после последнего. характер.
- Если ни одно из предыдущих трех правил не приводит к совпадению сервлета, контейнер будет пытаться обслуживать контент, соответствующий запрашиваемому ресурсу. Если для приложения определен сервлет по умолчанию, он будет использоваться.
Ссылка Шаблон URL