2012-09-26 17 views
8

En uno de los códigos que vi, no había <servlet-mapping> etiquetas y sólo su declarada como a continuación¿Se puede invocar a un servlet sin <servlet-mapping> en la entrada Web.xml

<servlet> 
    <servlet-name>startServlet</servlet-name> 
    <servlet-class>com.login.StartupServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

puede este trabajo sin <servlet-mapping> y trabajar en <load-on-startup>1</load-on-startup> ??

Este servlet se cargará en el inicio del servidor para conectarse a la base de datos y realizar pocas operaciones de almacenamiento en la memoria caché.

PD: esto está en la versión Servlet 2.0+ y no tiene anotaciones.

gracias Punith

Respuesta

7

El código que envió define algo que se podría llamar un "Servlet inicializador". No se accede directamente desde el mundo exterior (usando una URL) pero será iniciado por el contenedor Servlet.

Es válido pero no puede ser accedido por los clientes. A menudo se usa con fines de inicialización. Puede acceder a los servlets sin <servlet-mapping> usando las anotaciones de Servlets 3.0.

Tenga en cuenta que <load-on-startup> no tiene valor verdadero/falso (0/1) pero define un número entero que es un orden de inicio. Un número más alto significa que el Servlet se cargará después de los que tienen un número más bajo.

+0

En realidad, una de las herramientas de seguridad arroja un error, diciendo ... No se puede acceder a un servlet definido en web.xml sin una correspondencia de servlet correspondiente. –

+1

Bueno, es cierto :-) Sin embargo, no creo que muestre un error, una advertencia sería más apropiada en mi opinión. –

2

Este patrón se utiliza a menudo para la inicialización de una aplicación web Java EE. Por ejemplo, es una solución popular para la anotación anhelada @Singleton introducida en EJB 3.1.

Cuestiones relacionadas