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("- 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("- 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("- 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("- ContextPath: " + request.getContextPath() );
out.println( "
- 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(" - PathInfo: " + request.getPathInfo() );
out.println("
- PathTranslated: " + request.getPathTranslated() );
out.println("
- ServletPath: " + request.getServletPath() );
out.println("
- QueryString: " + request.getQueryString() );
out.println("
- Class: " + request.getClass() );
out.println("
- Protocol: " + request.getProtocol() );
out.println("
- RemoteHost: " + request.getRemoteHost() );
out.println("
- RemoteUser: " + request.getRemoteUser() );
out.println("
- RequestedSessionId: " + request.getRequestedSessionId() );
//// No crea una sesión en el caso de que no la haya.
if ( request.getSession(false) != null )
out.println("
- Session.toString(): " + request.getSession(false).toString() );
else
out.println("
- Session.toString(): no se ha recuperado la sesión" );
out.println("
- RequestURI: " + request.getRequestURI() );
out.println("
- RequestURL: " + request.getRequestURL() );
out.println("
- ServerName: " + request.getServerName() );
out.println("
- ServerPort: " + request.getServerPort() );
out.println( "
");
out.println("");
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost( request, response );
}
}