C:\Documents and Settings\AAF007\Configuracin local\Temp\Directorio temporal 3 para PSP05_CONT_R40_ServerHTTP (1).
zip\PSP05_CONT_R40_ServidorHTTP\Serve lunes, 25 de febrero de 2013 18:10
package PaquetePrincipal ; import import import import import import java.io.BufferedReader ; java.net.Socket; java.io.IOException; java.io.InputStreamReader ; java.io.PrintWriter; java.net.ServerSocket;
/** * ***************************************************************************** * Servidor HTTP que atiende peticiones de tipo 'GET' recibidas por el puerto * 8066 * * NOTA: para probar este cdigo, comprueba primero de que no tienes ningn otro * servicio por el puerto 8066 (por ejemplo, con el comando 'netstat' si ests * utilizando Windows) * * @author IMCG */ class ServidorHTTP { /** * ************************************************************************** * procedimiento principal que asigna a cada peticin entrante un socket * cliente, por donde se enviar la respuesta una vez procesada * * @param args the command line arguments */ public static void main(String[] args) throws IOException, Exception { //Asociamos al servidor el puerto 8066 ServerSocket socServidor = new ServerSocket(8066); imprimeDisponible (); Socket socCliente; //ante una peticin entrante, procesa la peticin por el socket cliente //por donde la recibe while (true) { //a la espera de peticiones socCliente = socServidor.accept(); //atiendo un cliente System.out.println("Atendiendo al cliente " ); procesaPeticion (socCliente); //cierra la conexin entrante socCliente.close(); System.out.println("cliente atendido" ); }
/** ***************************************************************************** * procesa la peticin recibida * * @throws IOException */ private static void procesaPeticion (Socket socketCliente ) throws IOException {
-1-
C:\Documents and Settings\AAF007\Configuracin local\Temp\Directorio temporal 3 para PSP05_CONT_R40_ServerHTTP (1).zip\PSP05_CONT_R40_ServidorHTTP\Serve lunes, 25 de febrero de 2013 18:10
//variables locales String peticion; String html; //Flujo de entrada InputStreamReader inSR = new InputStreamReader ( socketCliente .getInputStream ()); //espacio en memoria para la entrada de peticiones BufferedReader bufLeer = new BufferedReader (inSR); //objeto de java.io que entre otras caractersticas, permite escribir //'lnea a lnea' en un flujo de salida PrintWriter printWriter = new PrintWriter( socketCliente .getOutputStream (), true); //mensaje peticin cliente peticion = bufLeer.readLine(); //para compactar la peticin y facilitar as su anlisis, suprimimos todos //los espacios en blanco que contenga peticion = peticion.replaceAll(" ", ""); //si realmente se trata de una peticin 'GET' (que es la nica que vamos a //implementar en nuestro Servidor) if (peticion.startsWith("GET")) { //extrae la subcadena entre 'GET' y 'HTTP/1.1' peticion = peticion.substring(3, peticion.lastIndexOf("HTTP")); //si corresponde a la pgina de inicio if (peticion.length() == 0 || peticion.equals("/")) { //sirve la pgina html = Paginas.html_index; printWriter.println(Mensajes.lineaInicial_OK ); printWriter.println(Paginas.primeraCabecera ); printWriter.println("Content-Length: " + html.length() + 1); printWriter.println("\n"); printWriter.println(html); } //si corresponde a la pgina del Quijote else if (peticion.equals("/quijote")) { //sirve la pgina html = Paginas.html_quijote; printWriter.println(Mensajes.lineaInicial_OK ); printWriter.println(Paginas.primeraCabecera ); printWriter.println("Content-Length: " + html.length() + 1); printWriter.println("\n"); printWriter.println(html); } //en cualquier otro caso else { //sirve la pgina html = Paginas.html_noEncontrado ; printWriter.println(Mensajes.lineaInicial_NotFound ); printWriter.println(Paginas.primeraCabecera ); printWriter.println("Content-Length: " + html.length() + 1); printWriter.println("\n"); printWriter.println(html); }
-2-
C:\Documents and Settings\AAF007\Configuracin local\Temp\Directorio temporal 3 para PSP05_CONT_R40_ServerHTTP (1).zip\PSP05_CONT_R40_ServidorHTTP\Serve lunes, 25 de febrero de 2013 18:10
/** * ************************************************************************** * muestra un mensaje en la Salida que confirma el arranque, y da algunas * indicaciones posteriores */ private static void imprimeDisponible () { System.out.println("El Servidor WEB se est ejecutando y permanece a la " + "escucha por el puerto 8066.\nEscribe en la barra de direcciones " + "de tu explorador preferido:\n\nhttp://localhost:8066\npara " + "solicitar la pgina de bienvenida\n\nhttp://localhost:8066/" + "quijote\n para solicitar una pgina del Quijote,\n\nhttp://" + "localhost:8066/q\n para simular un error" );
-3-