Дескриптор развертывание – очень важная часть web-приложения. В нем, в кратком виде, содержатся требования web-приложения. Его можно прочитать в большинстве XML-редакторов. Web.xml файл – это место, где вы:
- Регистрируете и создаете отображение URL на ваши сервлеты;
- Регистрируете и задаете любые фильтры и слушатели приложения;
- Задаете начальные параметры контекста в виде пар имя/значение;
- Конфигурируете страницы ошибок;
- Указываете начальные файлы приложения;
- Задаете время простоя сеанса (тайм-аут);
- Задаете настройки безопасности, управляющие тем, кто к каким web-компонентам может обращаться.
И это только часть тех настроек, которые можно задать в web.xml. В предыдущих постах мы уже сталкивались с дескриптором развертывания. Разберемся с ним более детально. Начнем с пункта 1.
Одной из важных задач конфигурации web-приложения является создание пути, с помощью которого пользователи сети будут обращаться к сервлету. Иногда в этом качестве используют полное имя сервлета, что приводит к появлению невообразимых URI. Вспомним созданный нами в первом посте сервлет FirstServlet. При использовании полного имени сервлета URL запроса может выглядеть так: http://localhost:8084/servlets/ru.topcode.testserv.FirstServlet. Не каждому человеку под силу набрать такой адрес, поэтому имеет смысл поставить сервлету в соответствие некоторый путь к сервлету (servlet path), который будет являться псевдонимом данного сервлета. Новый адрес (с использованием пути к сервлету) может быть таким: http://localhost:8084/test-servlet/firstservlet, где /firstservlet – путь к сервлету.
Путь к сервлету также является идентификатором, используемым другими сервлетами и JSP для переадресации запросов на этот сервлет, он также является адресом, используемым в атрибуте action тегов HTML-форм для передачи сервлету имен и значений параметров. Спецификация сервлетов предлагает интуитивно понятный и гибкий способ: отображение HTTP-запросов на сервлеты с помощью дескриптора развертывания web.xml.
Создание псевдонима сервлета осуществляется с помощью элемента servlet-mapping, находящегося в дескрипторе развертывания. Элемент servlet-mapping ссылается на имя сервлета, появляющееся в элементе servlet-name, например на следующее.
<servlet><servlet-name>FirstServlet</servlet-name></servlet>
Это зарегистрированное имя сервлета. Затем в servlet-mapping приводится имя или шаблон URL, которое пользователи web-приложения могут вводить вбраузере для доступа к данному сервлету. Например:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>ru.topcode.testserv.FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/firstservlet</url-pattern> </servlet-mapping> </web-app>
В данном случае зарегистрированное имя сервлета: FirstServlet. Имя класса указывается в элементе servlet-class. Этот класс сервлета может находиться в каталоге WEB-INF/classes/ru/topcode/testserv/ или в JAR-файле, расположенном в WEB-INF/lib. Имя FirstServlet становится зарегистрированным именем, под которым сервлет выступает в оставшейся части файла web.xml.
А теперь рассмотрим как создать путь к сервлету, по которому пользователи web-приложения будут обращаться к сервлету из браузеров. Это назначение псевдонима выполняется с помощью элемента servlet-mapping. Итак, servlet-name определяет зарегистрированное имя, по которому можно ссылаться на сервлет в файле web.xml, а элемент url-pattern создает URL для доступа к этому сервлету. Символ “/” в шаблоне /firstservlet означает “начиная с корневого каталога web-приложения”.
Обобщая, любому сервлету соответствует следующий URL:
http://<хост>:<порт>/<путь_к_контексту>/<путь_к_сервлету>
А теперь попробуем создать несколько отображений на один сервлет.
Чтобы это сделать, достаточно определить для одного сервлета несколько элементов servlet-mapping. Например:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>ru.topcode.testserv.FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/firstservlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/firstservlet_too</url-pattern> </servlet-mapping> </web-app>
Кстати, если вы используете версию сервлетов (спецификацию) 2.3, то все элементы servlet-mapping в дескрипторе развертывания должны появляться только после всех элементов servlet.
Для расширения шаблона отображения можно использовать символ подстановки (*). Если вы сейчас попробуете обратиться к странице http://localhost:8084/test-servlet/firstservlet_too/ (со “/” в конце), то получите ошибку 404, т.к. этот URL уже не удовлетворяет шаблону /firstservlet_too. С помощью символа подстановки можно решить этупроблему. Измените значение в url-pattern с /firstservlet_too на /firstservlet_too/*. Это приведет к выводу сервлета FirstServlet для всех URL, которые начинаются с /firstservlet_too/ и затем, возможно, одержат некоторое имя после слеша. Т.е. теперь вы можете ввести в адресную строку браузера http://localhost:8084/test-servlet/firstservlet_too/blah-blah-blah и все равно попадете на FirstServlet.
Вы также можете использовать шаблоны, указывающие на все файлы с некоторым расширением, например,
В этом посте мы разобрались как с помощью дескриптора развертывания web.xml сделать человеко-понятный URL (ЧПУ). Это самый простой способ присвоить имя сервлету. В следующих постах я расскажу о том, как:
- Создать для сервлета URL как у JSP;
- Отображать на сервлет обращения к статичному содержимому (html-файлу);
- Вызывать сервлеты, не имеющие отображения в web.xml;
- Отображать на сервлет все запросы к web-приложению;
- Отображать запросы на контроллер с сохранением отображений сервлетов;
- Создавать начальные (welcome) файлы web-приложения;
- Ограничивать запросы к определенным сервлетам;
- Предоставлять доступ к определенным сервлетам только контроллеру.



#1 by Валентин on 21 Июль 2011 - 17:27
Quote
Не совсем понятно как указывать, если у нас в проекте больше одного сервлета