Poco a poco vamos instalando en nuestros entornos de desarrollo servidores que cumplen con los standards de JavaEE 6. Con esta versión de la plataforma el uso de anotaciones aumenta y ayuda a simplificar el trabajo. Una de las especificaciones más afectadas es la de Servlets 3.0, vamos a ver algunos ejemplos.
Registro de Servlets
Una de las cosas más habituales a realizar cuando trabajamos en Java EE es registrar un Servlet. Todos hemos manejado el web.xml para realizar este tipo de tarea. Sin embargo ya no es necesario y podemos registrarlo de forma automática a través de la anotación @WebServlet.
package com.genbetadev; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/HolaMundo") public class HolaMundo extends HttpServlet { private static final long serialVersionUID = 1L; public HolaMundo() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw=response.getWriter(); pw.println("hola"); pw.close(); } }
Acabamos de construir un Servlet y registrarlo, el siguiente paso es invocarlo.
Registro de Filtros
De forma similar podemos ahora registrar un ServletFilter apoyándonos en la anotación @WebFilter y asignando el patrón de filtro que deseemos:
package com.genbetadev; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * Servlet Filter implementation class FiltroHola */ @WebFilter("/*") public class FiltroHola implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("has pasado por un filtro"); chain.doFilter(request, response); } public void init(FilterConfig fConfig) throws ServletException { } }
Definimos en la propia anotación que rutas son afectadas por el filtro, en nuestro caso "/* ". Si invocamos el Servlet que construimos al principio el filtro se ejecutará e imprimirá por consola un mensaje.
Registro de Listeners
Otro de los elementos que a partir de ahora podremos registrar usando anotaciones son los Listeners. Vamos a ver un ejemplo apoyándonos en SessionListeners.
package com.genbetadev; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; @WebListener public class MiSessionListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent arg0) { System.out.println("session creada"); } public void sessionDestroyed(HttpSessionEvent arg0) { System.out.println("session destruida"); } }
Acabamos de cubrir algunas de las anotaciones más importantes de Servlets 3.0 pero el conjunto de anotaciones de la plataforma Java EE 6 es muy amplio y lleva tiempo conocerlas a detalle.