2010-10-27 16 views
9

¿Es posible obtener una lista de todos los servlets disponibles en una aplicación?¿Cómo obtener una lista de todos los servlets disponibles?

Estoy escribiendo una aplicación web que expondrá una gran cantidad de servlets y quiero utilizar HttpUnit para probar cada uno para ver si está volviendo (¡o no!).

Como gran parte de esto devolverá una simple respuesta XML, sería realmente útil no escribir un caso de prueba para cada uno, solo verificar que esté funcionando (un cambio de base de datos no ha detenido este servlet para funcionar, por ejemplo)

+0

No conozco una función para hacerlo, pero la aplicación web.xml tendrá una lista de todas ellas. – Powerlord

Respuesta

0

Usando la reflexión puede buscar todas las clases que son HTTPServlet.

+1

No creo que puedas usar la reflexión para ver las implementaciones de HTTPServlet. Sé que no es posible obtener instancias de una clase/interfaz ya que la clase cargada no las conoce hasta que estén cargadas. –

1

No crea que hay algo fuera de la caja. Sin embargo, podría escribir un pequeño programa que analiza su web.xml para obtener la información necesaria.

0

Si usa tomcat, puede incluir los jar de servidor en su classpath, y luego enviar el ServletContext a la implementación de Tomcat. Contiene todo lo que necesitas.

+1

A partir de tomcat 5.5, no está disponible. Ambos getServletNames() y getServlets() están en desuso, sin reemplazo, y siempre devuelven una enumeración vacía. Consulte http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getServlets() –

+0

No puede usar las API públicas, solo las API internas. Esta es la razón por la cual saif "include the server jars", esa jarra en $ TOMCAT_HOME/server/lib – Daniel

7
Map<String, ? extends ServletRegistration> servletRegistrations = request.getServletContext().getServletRegistrations(); 

Te ayudará.

+2

Esto funcionó para mí, gracias. Pero digo a otros, el método 'getServletRegistrations()' solo está disponible desde la especificación de Servlet 3.0 (es decir, Java EE 6 - es decir, Tomcat 7+) – Javaru

Cuestiones relacionadas