2014-09-19 14 views
6

Ciao a tutti,Tomcat includere un altro file xml per web.xml

Dal momento che ho un sacco di mapping servlet nel mio web.xml mi chiedevo se potevo davvero memorizzare tutte le mappature per separare i file e quindi includere a 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"/> 

In questo modo è possibile caricare i file XML in struts.xml. (non sono sicuro se lo stesso sia possibile in web.xml)

È possibile qualcosa del genere? O c'è un altro modo per farlo funzionare?

(Mi scuso per il mio cattivo inglese)

Grazie in anticipo, Alex

+0

Hai perché la risposta a voi precedente domanda è ... beh forse tecnicamente corretti ma non la migliore soluzione per voi problema. –

risposta

1

Se la versione servlet è inferiore a 3.0, allora non si può.

Se si utilizza 3.0 c'è un possibility

In JSR 315: Java Servlet 3.0 Specification, web-fragment.xml viene introdotto per innestabilità di vasetti di libreria che sono confezionati sotto WEB-INF/lib. Il contenuto di web.xml e web-fragment.xml sono quasi gli stessi. Si possono definire servlet, filtri e ascoltatori lì. Si può anche specificare metadata-complete = true in un dato web-fragment.xml. In quest'ultimo caso, l'elaborazione dell'annotazione delle classi in quel jar sarebbe saltata. Con web-fragment.xml, i jar della libreria possono essere autonomi e fornire informazioni sui metadati correlati al Web.

Ma avere due XML può confondere you.Just provare questo.

0

Si può cercare sotto approccio (basato sul concetto di entità XML esterni):

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

NON FARE QUESTO! Stai fondamentalmente utilizzando un exploit di sicurezza specifico di Tomcat che viene corretto nelle nuove versioni di Tomcat e non necessariamente presente in server diversi. In altre parole, la webapp con tale web.xml non è utilizzabile. Rapporto relativo al problema: https://bugzilla.redhat.com/show_bug.cgi?id=1069911 – BalusC

6

Servlet 3.0 ha introdotto il concetto di frammenti web, che affronta le tue domande su dividere la web.xml in più file. Questi frammenti possono contenere una parte (o tutti) del descrittore di distribuzione Web includendo uno 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> 

in 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> 
Problemi correlati