Tomcat включает еще один XML файл в web.xml
Привет всем,
Так как у меня много отображений сервлетов в моем web.xml, мне было интересно, могу ли я фактически сохранить все сопоставления для отдельного файла, а затем включить его в web.xml.
servervlet-mapping.xml
<servlet>
<servlet-name>red</servlet-name>
<servlet-class>Test.Red</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>red</servlet-name>
<url-pattern>/blue</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>blue</servlet-name>
<servlet-class>Test.Blue</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>blue</servlet-name>
<url-pattern>/blue</url-pattern>
</servlet-mapping>
web.xml
<include file="servlet_mapping.xml"/>
Таким образом, можно загрузить xml файлы в struts.xml. (не уверен, что это возможно в web.xml)
Что-то вроде этого возможно? Или есть другой способ заставить его работать?
(Извинения за мой плохой английский)
Спасибо заранее,
Alex
Ответы
Ответ 1
Servlet 3.0 представил концепцию веб-фрагментов, в которой рассматривается ваш вопрос о разделении web.xml
на несколько файлов. Эти фрагменты могут содержать часть (или все) дескриптора веб-развертывания, включая META-INF/web-fragment.xml
<web-fragment metadata-complete="true" version="3.0"
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-fragment_3_0.xsd">
<name>fragment1</name>
<servlet>
<servlet-name>red</servlet-name>
<servlet-class>Test.Red</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>red</servlet-name>
<url-pattern>/blue</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>blue</servlet-name>
<servlet-class>Test.Blue</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>blue</servlet-name>
<url-pattern>/blue</url-pattern>
</servlet-mapping>
</web-fragment>
в web.xml
...
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>MyWelcomePage</servlet-name>
<servlet-class>MyWelcomePage</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyWelcomePage</servlet-name>
<url-pattern>/MyWelcomePage/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<absolute-ordering>
<name>fragment1</name>
</absolute-ordering>
</web-app>
Ответ 2
Если ваша версия сервлета ниже 3.0, вы не можете.
Если вы используете 3.0, существует возможность
В JSR 315: Спецификация Java Servlet 3.0, web-fragment.xml вводится для вместимости библиотечных банок, которые упакованы в WEB-INF/lib. Содержимое web.xml и web-fragment.xml практически одинаково. Здесь можно определить сервлеты, фильтры и прослушиватели. Можно также указать metadata-complete = true в данном web-фрагменте .xml. В последнем случае обработка аннотаций классов в этой банке будет пропущена. С web-fragment.xml банки библиотеки могут быть автономными и предоставлять информацию о метаданных в Интернете.
Но наличие двух XML
может вас смутить. Просто попробуйте это.
Ответ 3
Вы можете попробовать подходить к подходу (основанному на концепции внешних XML-объектов):
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" [
<!ENTITY textreplacements SYSTEM "textreplacements.xml">
]>
<web-app>
<filter>
<filter-name>TextReplaceFilter</filter-name>
<filter-class>TextReplaceFilter</filter-class>
&textreplacements;
</filter>
textreplacements.xml
<init-param>
<param-name>whatever</param-name>
<param-value>whenever</param-value>
</init-param>