Какое значение url-pattern в web.xml и как настроить сервлет?
Я настроил вручную web.xml
для моего приложения. Теперь у меня проблемы с запуском приложения. Я пытаюсь получить доступ к своему servlet
от моего jsp
стр. Но это бросает ошибку как page not found
,
Сервлеты размещены под папкой ниже
<application folder>/WEB-INF/classes/<package>
Итак, какими должны быть записи для сервлетов в url-pattern
а также servlet-mapping
, Чтобы, servlet
может быть доступен через URL.
2 ответа
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 url-pattern
Спецификация:
- Строка, начинающаяся с символа '/' и заканчивающаяся суффиксом '/*', используется для отображения пути.
- Строка, начинающаяся с '*.' Префикс используется как отображение расширения.
- Строка, содержащая только символ "/", обозначает сервлет "по умолчанию" приложения. В этом случае путь сервлета является URI запроса минус путь контекста, а информация о пути равна нулю.
- Все остальные строки используются только для точных совпадений.
Ссылка: Java Servlet Спецификация
Вы также можете прочитать этот Основы Java сервлетов
Servlet-mapping имеет два дочерних тега: url-pattern и servlet-name. url-pattern указывает тип URL, для которого должен вызываться сервлет, указанный в имени сервлета. Имейте в виду, что контейнер будет использовать регистрозависимый для сравнения строк для соответствия сервлетов.
Первая спецификация url-pattern
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
Контекст, расположенный по пути / examples в Agent на 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 ссылки