package docen_servlet01; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; /************************************************************************* * 1. EJEMPLO DE SERVLET QUE MANEJA OBJETOS DE LAS CLASES ServletContext y * HttpServletRequest, ademas muestra parámetros y atributos de inicio. * 2. Gestiona método GET y POST * 3. Observar que con el método get quedan al descubierto los parámetros * enviados desde la página, pero no con el método POST **************************************************************************/ public class InformeContexto extends HttpServlet { StringBuffer m = new StringBuffer(800); // Cadena que se define en init() y se muestra en doPost /**************************************************************** * init(): inicialización del servlet * Un ejemplo de cómo obtener información de configuración y contexto *****************************************************************/ public void init(ServletConfig config) throws ServletException { //// Nombre del servlet m.append("

Servlet '"+config.getServletName()+"' arrancado a las " + new Date()); //// Obtener parametros del servidor web m.append( "

    "); for ( Enumeration e= config.getInitParameterNames(); e.hasMoreElements(); ) { String nom_par = (String) e.nextElement(); // Obtenemos el nombre del parámetro m.append("
  1. Parámetro de ServletConfig: " + nom_par); //// Se obtiene el valor del parametro m.append(". Valor: " + config.getInitParameter( nom_par ) ); } m.append( "
"); /********************************************************** * Conseguimos un contexto para: * 1. Obtener el path real a partir de un path virtual dentro del sistema de ficheros * del servidor. * 2. Obtener el nombre del servidor web * 3. Obtener la versión del API servlet soportado **********************************************************/ ServletContext sc = config.getServletContext(); m.append( "

RealPath: " + sc.getRealPath( "/")); m.append( "

ServerInfo: " + sc.getServerInfo()); m.append( "

Versión API Servlet: " + sc.getMajorVersion() + "." + sc.getMinorVersion()); //// Obtener atributos del contexto m.append( "

    "); for ( Enumeration e= sc.getAttributeNames(); e.hasMoreElements(); ) { String nom_par = (String) e.nextElement(); // Obtenemos el nombre del atrib m.append("
  1. Atributo de contexto: " + nom_par); m.append(". Valor: " + sc.getAttribute( nom_par ) ); // Se obtiene el valor del atrib } m.append( "
"); sc.log( "----> Inicio de servlet "+ config.getServletName() ); // A archivo LOG y/o consola } /**************************************************************** * destroy(): Se ejecuta al destruirse el servlet, normalmente por el cierre del servidor *****************************************************************/ public void destroy() { System.out.println("----> Servlet "+this.getClass().getName() +" detenido a las " + new Date()); } /***************************************************************** * 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(""); out.println("Ejemplo de Servlet"); out.println(""); out.println("

Uso de ServletContext y HttpServletRequest


"); //// Información obtenida en init() out.println("

El servlet da información en init() que puede ser interesante:

"); out.println( m ); out.println("

Este servlet gestiona métodos GET y POST. Información de parámetros:

"); //// Parámetros (extraidos de una Enumeration de parámetros out.println( "
    "); for ( Enumeration e= request.getParameterNames(); e.hasMoreElements(); ) { String nom_par = (String) e.nextElement(); // Obtenemos el nombre del parámetro out.print("
  1. Parámetro: " + nom_par); //// Se obtiene el valor del parametro enviado out.println(". Valor: " + request.getParameter( nom_par ) ); } out.println( "
"); //// Información de HttpServletRequest out.println("

Información de la petición (HttpServletRequest):

    " ); out.println("
  1. ContextPath: " + request.getContextPath() ); out.println( "
  2. Headers:
      "); for ( Enumeration e= request.getHeaderNames(); e.hasMoreElements(); ) { String nom_h = (String) e.nextElement(); out.println("
    • Header: " + nom_h + ". Valor:" + request.getHeader( nom_h )); } out.println( "
    "); out.println("
  3. PathInfo: " + request.getPathInfo() ); out.println("
  4. PathTranslated: " + request.getPathTranslated() ); out.println("
  5. ServletPath: " + request.getServletPath() ); out.println("
  6. QueryString: " + request.getQueryString() ); out.println("
  7. Class: " + request.getClass() ); out.println("
  8. Protocol: " + request.getProtocol() ); out.println("
  9. RemoteHost: " + request.getRemoteHost() ); out.println("
  10. RemoteUser: " + request.getRemoteUser() ); out.println("
  11. RequestedSessionId: " + request.getRequestedSessionId() ); //// No crea una sesión en el caso de que no la haya. if ( request.getSession(false) != null ) out.println("
  12. Session.toString(): " + request.getSession(false).toString() ); else out.println("
  13. Session.toString(): no se ha recuperado la sesión" ); out.println("
  14. RequestURI: " + request.getRequestURI() ); out.println("
  15. RequestURL: " + request.getRequestURL() ); out.println("
  16. ServerName: " + request.getServerName() ); out.println("
  17. ServerPort: " + request.getServerPort() ); out.println( "
"); out.println(""); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost( request, response ); } }