techno-

Servidor web con peticiones actualizadas

Feb 23rd, 2023
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.80 KB | None | 0 0
  1. package es.udc.redes.webserver;
  2.  
  3. import java.net.*;
  4. import java.io.*;
  5. import java.util.Date;
  6.  
  7.  
  8. public class ServerThread extends Thread {
  9.  
  10.     private Socket socket;
  11.  
  12.     public ServerThread(Socket s) {
  13.         // Store the socket s
  14.         this.socket = s;
  15.     }
  16.  
  17.     private static String getContentType(File file) {
  18.         String name = file.getName();
  19.         String extension = name.substring(name.lastIndexOf(".") + 1);
  20.         String contentType;
  21.         switch (extension) {
  22.             case "html":
  23.                 contentType = "text/html";
  24.                 break;
  25.             case "txt":
  26.                 contentType = "text/plain";
  27.                 break;
  28.             case "css":
  29.                 contentType = "text/css";
  30.                 break;
  31.             case "js":
  32.                 contentType = "application/javascript";
  33.                 break;
  34.             case "jpg":
  35.             case "jpeg":
  36.                 contentType = "image/jpeg";
  37.                 break;
  38.             case "gif":
  39.                 contentType = "image/gif";
  40.                 break;
  41.             case "png":
  42.                 contentType = "image/png";
  43.                 break;
  44.             case "ico":
  45.                 contentType = "image/x-icon";
  46.                 break;
  47.             default:
  48.                 contentType = "application/octet-stream";
  49.         }
  50.         return contentType;
  51.     }
  52.  
  53.     public void run() {
  54.         try {
  55.             // This code processes HTTP requests and generates
  56.             // HTTP responses
  57.             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  58.             OutputStream out = socket.getOutputStream();
  59.             String peticion = in.readLine();
  60.             String[] parts = peticion.split(" ");
  61.             String metodo = parts[0];
  62.             String url = parts[1];
  63.  
  64.             if (metodo.equals("GET")) {
  65.                 File file = new File(System.getProperty("user.dir") + File.separator + "p1-files" + File.separator + url);
  66.                 if (file.exists()) {
  67.                     FileInputStream fis = new FileInputStream(file);
  68.                     byte[] data = new byte[(int) file.length()];
  69.                     fis.read(data);
  70.                     fis.close();
  71.                     String contentType = getContentType(file);
  72.                     Date fecha = new Date(file.lastModified());
  73.                     String response = "HTTP/1.0 200 OK\r\n" +
  74.                             "Content-Length: " + data.length + "\r\n" +
  75.                             "Content-Type: " + contentType + "\r\n" +
  76.                             "Last modified: " +  fecha +
  77.                             "\r\n";
  78.                     out.write(response.getBytes());
  79.                     out.write(data);
  80.                     System.out.println(response);
  81.                 } else {
  82.                     String response = "HTTP/1.0 404 Not Found\r\n" +
  83.                             "\r\n";
  84.                     out.write(response.getBytes());
  85.                 }
  86.             } else if(metodo.equals("HEAD")){
  87.                 System.out.println("Programar método HEAD");
  88.             } else{
  89.                 String response = "HTTP/1.0 400 Bad Request\r\n" +
  90.                         "Allow: GET, HEAD\r\n" +
  91.                         "\r\n";
  92.                 out.write(response.getBytes());
  93.             }
  94.  
  95.             in.close();
  96.             out.close();
  97.             socket.close();
  98.  
  99.             // Uncomment next catch clause after implementing the logic
  100.             //
  101.             } catch (SocketTimeoutException e) {
  102.                 System.err.println("Nothing received in 300 secs");
  103.         } catch (Exception e) {
  104.             System.err.println("Error: " + e.getMessage());
  105.         } finally {
  106.             // Close the client socket
  107.         }
  108.     }
  109. }
Add Comment
Please, Sign In to add comment