Какое значение 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 Спецификация:

  1. Строка, начинающаяся с символа '/' и заканчивающаяся суффиксом '/*', используется для отображения пути.
  2. Строка, начинающаяся с '*.' Префикс используется как отображение расширения.
  3. Строка, содержащая только символ "/", обозначает сервлет "по умолчанию" приложения. В этом случае путь сервлета является URI запроса минус путь контекста, а информация о пути равна нулю.
  4. Все остальные строки используются только для точных совпадений.

Ссылка: 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

  1. Контейнер попытается найти точное совпадение пути запроса с путем сервлета. Успешное совпадение выбирает сервлет.
  2. Контейнер будет рекурсивно пытаться найти самый длинный префикс пути. Это делается путем постепенного перехода вниз по дереву пути к каталогу с использованием символа "/" в качестве разделителя пути. Самое длинное совпадение определяет выбранный сервлет.
  3. Если последний сегмент в пути URL содержит расширение (например,.jsp), контейнер сервлета попытается сопоставить сервлет, который обрабатывает запросы на расширение. Расширение определяется как часть последнего сегмента после последнего '.' персонаж.
  4. Если ни одно из трех предыдущих правил не приводит к совпадению сервлета, контейнер попытается обработать содержимое, соответствующее запрашиваемому ресурсу. Если для приложения определен сервлет "по умолчанию", он будет использован.

Шаблон URL ссылки

Другие вопросы по тегам