package docen_servlet01;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

/*****************************************************************
 * Información de ServletContext (se obtiene en init()) y del sistema (se
 * obtiene de doPost())
*****************************************************************/
public class Metodos extends HttpServlet {
   StringBuffer m = new StringBuffer(800); // Cadena que se define en init()
   ServletContext sc;                      // Contexto del servlet

   /****************************************************************
    * init(): inicialización del servlet
    * Un ejemplo de cómo obtener información de ServletConfig (params de
    * inicialización de web.xml) y de contexto
    *****************************************************************/
   public void init(ServletConfig config) throws ServletException {

       //// Nombre del servlet
       m.append("<P>Servlet '"+config.getServletName()+"' arrancado a las " + new Date());

       //// Obtener parametros del servidor web
       m.append( "<OL>");
       for ( Enumeration e= config.getInitParameterNames(); e.hasMoreElements(); ) {
		   String nom_par = (String) e.nextElement();                    // Obtiene nombre del parámetro
		   m.append("<LI>Parámetro de inicialización (ServletConfig): " + nom_par);
		   m.append(". Valor: " + config.getInitParameter( nom_par ) );  // Obtiene valor del parametro
       }
       m.append( "</OL>");

       sc = config.getServletContext();      // Conseguimos un contexto

       // Obtener el path real a partir de un path virtual, dentro del contexto de aplicación del servlet
       m.append( "<P>RealPath: " + sc.getRealPath( "/"));
       m.append( "<P>ServerInfo: " + sc.getServerInfo());// Nombre del servidor web
       m.append( "<P>Versión API Servlet: " + sc.getMajorVersion() + "." +sc.getMinorVersion());//API

       //// Obtener atributos del contexto
       m.append( "<OL>");
       for ( Enumeration e= sc.getAttributeNames(); e.hasMoreElements(); ) {
		   String nom_par = (String) e.nextElement(); // Obtenemos el nombre del atrib
		   m.append("<LI>Atributo de contexto: " + nom_par);
		   m.append(". Valor: " + sc.getAttribute( nom_par ) ); // Se obtiene el valor del atrib
       }
       m.append( "</OL>");

       sc.log( "----> Inicio de servlet Metodos" ); // Salida a archivo LOG o consola
   }

   /*****************************************************************
    * Procesar una petición HTTP con el método POST
   *****************************************************************/
   public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       response.setContentType( "text/html; charset=iso-8859-1" );
       PrintWriter out = response.getWriter();

       //// Empezamos a escribir la página de respuesta usando 'out'
       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>Uso de ServletContext y propiedades del sistema</H3></CENTER><HR>");

       //// Información obtenida en init()
       out.println("<P><B>El servlet da información en init() que puede ser interesante:</B></P>");
       out.println( m );

       //// Propiedades del sistema
       out.println("<P><B>Información de propiedades del sistema (System):</B></P>");
       Properties p = System.getProperties();
       out.println( "<TABLE BORDER=1 align='center' width='700'>");
       for (Enumeration en= p.keys(); en.hasMoreElements(); ) {
    	   String clave = (String) en.nextElement();
    	   out.println( "<TR><TD>CLAVE: " + clave + "</TD>" );
    	   out.println( "<TD>" + p.getProperty(clave) + "</TD></TR>" );
       }
       out.println( "</TABLE>");
       out.println("</body></html>");
   }

   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      doPost(request, response);
   }

   public void destroy() {
      sc.log( "----> Fin de servlet Metodos" );
   }
}

