2011-11-09 6 views
16

dado que la especificación Servlet 3.0 existe la posibilidad de declarar metadatos de mapeo de servlets como anotación en la clase del servlet:Los casos de uso para @WebInitParam

@WebServlet(name="appInfoServlet", urlPatterns ="/appInfo", initParams = @WebInitParam(name="ocwd.deployer.email", value="[email protected]")) 
public class AppInfoServlet extends HttpServlet { 

} 

Lo que no entiendo es sin embargo el caso de uso para mantener los parámetros de inicialización en la misma clase que el servlet. Por lo que entiendo, estos parámetros deben mantenerse separados de la clase y colocados en el descriptor de despliegue.

¿Qué casos de uso existen para especificar los parámetros init dentro de la anotación @WebServlet?

Respuesta

16

Las anotaciones se utilizan para dar los valores predeterminados.

En JavaEE las propiedades de implementación también se pueden proporcionar mediante anotaciones. Dados los valores para las anotaciones, el descriptor de implementación, es decir, web.xml, aún se puede usar para anular los valores predeterminados provistos por las anotaciones.


En el ejemplo anterior, la init-param se puede anular mediante la configuración de un servlet con un nombre coincidente en web.xml:

<servlet> 
    <servlet-name>appInfoServlet</servlet-name> 
    <init-param> 
     <param-name>ocwd.deployer.email</param-name> 
     <param-value>[email protected]</param-value> 
    </init-param> 
    </servlet> 
+0

Gracias por la respuesta. He agregado un ejemplo sobre cómo funciona la anulación en tu respuesta. –

+0

Esto es correcto. –

3

Puedo pensar en uno, de la parte superior de mi cabeza: proporciona el valor predeterminado (es decir, por el diseñador de la clase).

Si el usuario de esta clase está bien con el valor predeterminado, no necesita agregar nada y solo lo usa. Si no lo está, puede modificarlo usando el DD.

2

Creo que el caso de uso es como otros casos de uso para otras anotaciones en varios marcos donde utilizamos XML por separado antes de las anotaciones.

Puede decir lo mismo sobre las anotaciones de JAXB. Realmente, puedes implementar una clase y usar múltiples estrategias de su mapeo a XML. Pero una vez que te mueves a las anotaciones, creas un tipo de acoplamiento estrecho entre la clase y los metadatos. Lo mismo es relevante para las anotaciones de primavera. Etc.

En la práctica, raramente implementamos el mismo servlet dos veces utilizando diferentes configuraciones o utilizamos el mismo EJB dos veces o asignamos clase a diferentes esquemas XML. Pero en este caso, es muy conveniente almacenar metadatos junto con el código. Este problema está resuelto en Java con anotaciones.

En pocas palabras: utilice esta definición en la aplicación concreta, donde cada servlet tiene cierta funcionalidad y función y, por definición, no es reutilizable y está estrechamente relacionado con su asignación y configuración de URL. No use esto si crea un entorno como Struts o Spring Controller. En este caso, el programador de la aplicación debería poder configurar el servlet.

Cuestiones relacionadas