2014-09-19 4 views
6

Привет всем,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

+0

Вы их, потому что ответ вам предыдущий вопрос ... ну, может быть технически правильным, но не самое лучшее решение для вас проблемой. –

ответ

1

Если ваш сервлет версии ниже 3.0, то вы не можете.

Если вы используете 3.0 есть possibility

В JSR 315: Java Servlet 3.0 Спецификация, веб-fragment.xml вводится для pluggability библиотечных банок, которые упаковывают в WEB-INF/Lib. Содержимое web.xml и web-fragment.xml практически одинаково. Здесь можно определить сервлеты, фильтры и прослушиватели. Можно также указать metadata-complete = true в данном web-фрагменте.xml. В последнем случае обработка аннотаций классов в этой банке будет пропущена. С web-fragment.xml банки библиотеки могут быть автономными и предоставлять информацию о метаданных в Интернете.

Но с двумя XML может вас смутить. Просто попробуйте это.

0

Вы можете попробовать ниже подход (основанный на концепции внешних сущностей 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> 
+6

НЕ ДЕЛАЙТЕ ЭТО! В основном вы используете уязвимость безопасности, специфичную для Tomcat, которая исправлена ​​в новых версиях Tomcat и не обязательно присутствует на разных серверах. Другими словами, webapp с таким web.xml не переносится. Связанный отчет о проблеме: https://bugzilla.redhat.com/show_bug.cgi?id=1069911 – BalusC

6

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> 
Смежные вопросы