Mega Code Archive

 
Categories / Java / Network Protocol
 

HTTP MIME Response

//Revised from jcommon web; import java.io.*; import java.net.*; import java.util.*; public class HTTPResponse {   public static final HashMap<String,String> MIME_TYPES = new HashMap<String,String>();   static {     MIME_TYPES.put("gif", "image/gif");     MIME_TYPES.put("jpeg", "image/jpeg");     MIME_TYPES.put("jpg", "image/jpeg");     MIME_TYPES.put("jpe", "image/jpeg");     MIME_TYPES.put("bmp", "image/bmp");     MIME_TYPES.put("png", "image/png");     MIME_TYPES.put("tif", "image/tiff");     MIME_TYPES.put("tiff", "image/tiff");     MIME_TYPES.put("jnlp", "application/x-java-jnlp-file");     MIME_TYPES.put("js", "application/x-javascript");     MIME_TYPES.put("doc", "application/msword");     MIME_TYPES.put("bin", "application/octet-stream");     MIME_TYPES.put("exe", "application/octet-stream");     MIME_TYPES.put("pdf", "application/pdf");     MIME_TYPES.put("ai", "application/postscript");     MIME_TYPES.put("eps", "application/postscript");     MIME_TYPES.put("ps", "application/postscript");     MIME_TYPES.put("rtf", "application/rtf");     MIME_TYPES.put("class", "application/x-java-vm");     MIME_TYPES.put("ser", "application/x-java-serialized-object");     MIME_TYPES.put("jar", "application/x-java-archive");     MIME_TYPES.put("sh", "application/x-sh");     MIME_TYPES.put("tar", "application/x-tar");     MIME_TYPES.put("zip", "application/zip");     MIME_TYPES.put("ua", "audio/basic");     MIME_TYPES.put("wav", "audio/x-wav");     MIME_TYPES.put("mid", "audio/x-midi");     MIME_TYPES.put("htm", "text/html");     MIME_TYPES.put("html", "text/html");     MIME_TYPES.put("css", "text/css");     MIME_TYPES.put("txt", "text/plain");     MIME_TYPES.put("mpeg", "video/mpeg");     MIME_TYPES.put("mpg", "video/mpeg");     MIME_TYPES.put("mpe", "video/mpeg");     MIME_TYPES.put("qt", "video/quicktime");     MIME_TYPES.put("mov", "video/quicktime");     MIME_TYPES.put("avi", "video/avi");     MIME_TYPES.put("movie", "video/x-sgi-movie");   }      public static String SERVER = "JavaWebServer/1.0";      public static final int OK = 200;      private Socket s;   private int mode;   private HashMap<String,String> headers;   private HashSet<String> keys;      public HTTPResponse(Socket s, int mode) throws IOException {     this.s = s;     this.mode = mode;          headers = new HashMap<String,String>();     keys = new HashSet<String>();   }      public void addHeader(String header, String value) {     keys.add(header.toLowerCase());     headers.put(header, value);   }      private void writeHeaders() throws IOException {     if (mode == OK) {       writeLine("HTTP/1.1 200 OK");     }     if (!keys.contains("server")) {       headers.put("Server", SERVER);     }     if (!keys.contains("date")) {       headers.put("Date", String.format("%EEE%, %d% %MMM% %yyyy% %HH%:%mm%:%ss% %Z%",new GregorianCalendar()));     }          Iterator<String> iterator = headers.keySet().iterator();     String key;     String value;     while (iterator.hasNext()) {       key = iterator.next();       value = headers.get(key);       writeLine(key + ": " + value);     }          writeLine("");   }      private void writeLine(String string) throws IOException {     s.getOutputStream().write((string + "\r\n").getBytes());   }      public void writeFile(File f) throws IOException {     if ((!keys.contains("content-type")) && (f.getName().indexOf('.') > -1)) {       String ext = f.getName().substring(f.getName().lastIndexOf('.') + 1).toLowerCase();       if (MIME_TYPES.containsKey(ext)) {         headers.put("Content-Type", MIME_TYPES.get(ext));       }     }     if (!keys.contains("content-length")) {       headers.put("Content-Length", String.valueOf(f.length()));     }     writeHeaders();          FileInputStream fis = new FileInputStream(f);     byte[] b = new byte[512];     int len;     while ((len = fis.read(b)) > -1) {       s.getOutputStream().write(b, 0, len);     }     s.getOutputStream().flush();     s.close();   } }