domingo, 17 de octubre de 2010

Servlet


El servlet es una de las partes mas importates en el desarrollo de componentes web con Java,

si bien la gestión de la presentación de datos hace que el uso de JSP sea más cómodo y recomendable.

El servlet al crearse se incluye en el archivo de definición web.xml, de igual forma se puede definir el servlet manualmente sin hacer uso del asistente de elcipse.

La definición de un servlet en el xml es la siguiente:

<servlet>

<description></description>

<display-name>Nombre mostrado</display-name>

<servlet-name>Nombre del servlet</servlet-name>

<servlet-class>Clase java</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>Nombre mostrado en URL</servlet-name>

<url-pattern>/Ruta al recurso</url-pattern>

</servlet-mapping>

<servlet>


En cuanto a la clase java, su apariencia es la que sigue:

publicclassSERVLETextendsHttpServlet {

privatestaticfinallongserialVersionUID= 1L;

protectedvoiddoGet(HttpServletRequest request,HttpServletResponse response)throwsServletException, IOException {

}

protectedvoiddoPost(HttpServletRequest request,

HttpServletResponse response)throwsServletException, IOException {

}}

En los métodos doGet y doPost el servlet realiza su función.


Un error común es no redireccionar estos métodos.

Así si escribimos el código en el doGet(). El método doPost debe tener una llamada al anterior

doPost(HttpServletRequest request,HttpServletResponse response)

throwsServletException, IOException {

doGet(request,response);}

Está indicación es recomendable en ambos sentidos así, si usamos el doPost el doGet debe redirigir la petición al doGet.

La response del servlet da acceso a los siguientes objetos:

PrintWriter writer=response.getWriter();

writer.print("CODIGO HTML "+Valor de variable u objeto,...);

A través de request, se puede acceder a los siguientes campos:

request.getParameter("nombreVariable")

request.getSession.getAtribute("nombreObjeto");

request.getSession.getAtribute("nombreObjeto");

request.getSession().getServletContext ().getAtribute("nombreObjeto");

Las líneas anteriores definen los ambitos, estos pueden ser:

  • Request: petición, está "muere" al ser pintada.

  • Session: Sesión del usuario, para un usuario en concreto.

  • ServletContext: De aplicación, vive mientras esta se ejecute.

En las peticiones con getAttribute("VAR"), el objeto recuperado precisa del correspondiente casting que defina a que clase en particular pretece el objeto.

Al igual que recuperamos datos de distintos ambitos con getAtribute(""), también podemos almacenarlos haciendo uso de setParameter("NombreVariable",objeto) o setAtribute("NombreVariable",objeto)

El setParameter o getParameter solo tiene sentido en el contexto (scope) de la peticion (request).

Un método interesante del request es el siguiente:

request.getRequestDispatcher("./URL").forward(request,response);

Dado que la impresión/ generación de las vistas con SERVLET no es cómoda, normalmente el uso de servlet opera en la siguiente capa a las vistas (JSP) gestionando las redirecciones y las peticiones del usuario o sitio.


No hay comentarios:

Publicar un comentario