package docen_servlet01;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;


/********************************************************************************
 * Ejemplo de mantenimiento de datos de sesión
 * Este servlet genera un formulario que invoca a otro servlet (AtributosSesion2)
 * AtributosSesion recibe del formulario HTML el login y lo almacena como
 * atributo de sesión. El segundo servlet muestra la información almacenada en los
 * atributos de la sesión.
 * En un archivo properties almacenamos la ruta del siguiente servlet 
 ********************************************************************************/
public class AtributosSesion extends HttpServlet {
   private Propiedades acceso;                // Clase de propiedades: host, etc.
 
   public void init(ServletConfig config) throws ServletException {
      super.init(config);
      ServletContext sc = null;
      try {
	      sc = config.getServletContext();	// Obtengo contexto del servlet
	
	      //// El path donde está el archivo de propiedades es 'contexto/propiedades/paquete/'
	      //// sc.RealPath("/") me da el path del contexto de aplicación
	      acceso = new Propiedades( sc.getRealPath("/")+"propiedades/" + getClass().getPackage().getName() + "/");

      }
      catch (Exception e) {
    	  sc.log( "----> " + this.getClass().getName() + ": ERROR EN INIT.");    	  
      }
   }

   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      response.setContentType("text/html; charset=iso-8859-1");  // Definir tipo de salida
      PrintWriter out = response.getWriter();

      //// Obtiene la sesión. Con el argumento true crea una sesión si no existiese
      HttpSession sesion = request.getSession( true );

      //// LO ESENCIAL: poner nombre (recibido del form) como un atributo de la sesion
      sesion.setAttribute("login", request.getParameter("login"));

      //// Escribe el inicio de la página
      out.println("<html>");
      out.println("<head><title>Ejemplo de Servlet</title></head>");
      out.println("<body bgcolor=\"#FFFF9D\"><FONT color=\"#000080\" FACE=\"Arial,Helvetica,Times\" SIZE=2>");
      out.println("<CENTER><H3>Atributos de sesión (1)</H3></CENTER><HR>");

      //// Informo de la carga de propiedades
      if ( acceso.mensajeError != null )
    	  out.println("<p>En la clase " + getClass().getName() +
    			  			": no se han cargado propiedades.</p>");
      else {   
      
	      //// Obtenemos el atributo de sesión que acabamos de almacenar
	      out.println("<P>Este es el primer servlet. Hemos almacenado su login (" + sesion.getAttribute( "login" ) +
			  ") como atributo de la sesión. Ponga su apellido y también lo almacenaremos como " +
			  "atributo de la sesión. Invocaremos al segundo servlet: " +request.getContextPath()+
			  acceso.getParametro("AtributosSesion.siguiente.servlet")+"</P>");
	
	      //// Escribe el formulario
	      out.println("<P><form action='"+request.getContextPath()+ acceso.getParametro("AtributosSesion.siguiente.servlet")+"' method='post'>");
	      out.println("<blockquote><p>Su primer apellido: <INPUT TYPE='text' NAME='apellido' size='30'></p>");
	      out.println("<blockquote><blockquote><p><input type='submit' name='enviar' value='Entrar'></p>");
	      out.println("</blockquote></blockquote></blockquote></form>");

      }
      
      //// Fin de página
      out.println("</body></font></html>");
   }

   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	   doPost(request, response);
   }

}
