2009-08-14 14 views
5

C'è un modo per un filtro servlet per ottenere un elenco di tutti i servlet e dei relativi mapping?Come si fa a introspettare web.xml da un servlet?

+1

Non utilizzando l'API standard. Contenitori specifici potrebbero permetterti di farlo, ma ciò dipenderà dal tuo contenitore. – skaffman

+0

È strano che esistessero API per cose come questa, ma che sono state eliminate. – jsight

risposta

4

Non esiste più l'API standard (e quello che era piuttosto limitato), ma si tratta di un file XML con uno schema standard. È possibile ottenere nel vostro filtro tramite:

filterConfig.getServletContext().getResource("/WEB-INF/web.xml"); 

e ottenere ciò che si vuole da esso utilizzando SAX/DOM/XPath/quello che hai, per esempio

InputStream is = filterConfig.getServletContext() 
    .getResourceAsStream("/WEB-INF/web.xml"); 
DocumentBuilder builder = DocumentBuilderFactory.newInstance() 
    .newDocumentBuilder(); 
Document document = builder.parse(is); 
NodeList servlets = document.getElementsByTagName("servlet"); 
+0

Questo cade un po 'in EE6, dove le servlet possono essere definite da annotazioni e da file web-fragment.xml. Lo stesso approccio può essere usato su quelli, però; è semplicemente una semplice questione di programmazione. –

Problemi correlati