Gel vatandas gell.. TikLaa'da gel..
Posts tagged Java Webserver
Java ile Webserver Yapımı (Socket)
Ara 9th
Selam arkadaşlar deneme amaçlı bi Webserver yapmıştım. Sizlerle paylaşmak istedim. Serveri java’da yazdim. WebServer ve HttpRequest class’ları olmak üzere iki class’dan oluşuyor.
Webserver.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.io.*; import java.net.*; import java.util.*; public final class WebServer { public static void main(String argv[]) throws Exception { int port = 3542; ServerSocket listenSocket = new ServerSocket(port); while (true) { Socket connectionSocket = listenSocket.accept(); HttpRequest request = new HttpRequest(connectionSocket); Thread thread = new Thread(request); thread.start(); } } } |
HttpRequest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
import java.io.* ; import java.net.* ; import java.util.* ; final class HttpRequest implements Runnable { final static String CRLF = "\r\n"; Socket socket; // Constructor public HttpRequest(Socket socket) throws Exception { this.socket = socket; } // Implement the run() method of the Runnable interface. public void run() { try { processRequest(); } catch (Exception e) { System.out.println(e); } } private void processRequest() throws Exception { InputStream is = socket.getInputStream(); DataOutputStream os = new DataOutputStream(socket.getOutputStream()); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String requestLine = br.readLine(); System.out.println(); System.out.println(requestLine); String headerLine = null; while ((headerLine = br.readLine()).length() != 0) { System.out.println(headerLine); } StringTokenizer tokens = new StringTokenizer(requestLine); tokens.nextToken(); String fileName = tokens.nextToken(); fileName = "." + fileName; FileInputStream fis = null; boolean fileExists = true; try { fis = new FileInputStream(fileName); } catch (FileNotFoundException e) { fileExists = false; } String statusLine = null; String contentTypeLine = null; String entityBody = null; if (fileExists) { statusLine = "HTTP/1.0 200 OK" + CRLF; contentTypeLine = "Content-type: " + contentType( fileName ) + CRLF; } else { statusLine = "HTTP/1.0 404 Not Found" + CRLF; contentTypeLine = "Content-type: " + "text/html" + CRLF; entityBody = "<HTML>" + "<HEAD><TITLE>Not Found</TITLE></HEAD>" + "<BODY>Not Found</BODY></HTML>"; } os.writeBytes(statusLine); os.writeBytes(contentTypeLine); os.writeBytes(CRLF); if (fileExists) { sendBytes(fis, os); fis.close(); } else { os.writeBytes(entityBody); } System.out.println(); System.out.println(requestLine); os.close(); br.close(); socket.close(); } private static void sendBytes(FileInputStream fis, OutputStream os) throws Exception { byte[] buffer = new byte[1024]; int bytes = 0; while ((bytes = fis.read(buffer)) != -1) { os.write(buffer, 0, bytes); } } private static String contentType(String fileName) { if (fileName.endsWith(".htm") || fileName.endsWith(".html")) { return "text/html"; } if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) { return "image/jpeg"; } if (fileName.endsWith(".gif")) { return "image/gif"; } if (fileName.endsWith(".txt")) { return "text/plain"; } if (fileName.endsWith(".pdf")) { return "application/pdf"; } return "application/octet-stream"; } } |
Bu iki class’ımızı oluşturduktan sonra Webserver.java dosyasında belirlediğimiz port üzerinden sorgumuzu yapabiliriz.
Örneğin : http://127.0.0.1:3542/dosya.txt
HttpRequest.java class’ını biraz daha geliştirebilirz. contentType içinde daha fazla uzantı ekleyebiliriz vs.