{"id":29782,"date":"2025-09-19T16:00:29","date_gmt":"2025-09-19T13:00:29","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/"},"modified":"2025-09-19T16:00:29","modified_gmt":"2025-09-19T13:00:29","slug":"java-ile-statik-dosya-sunucusu-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/","title":{"rendered":"Java ile Statik Dosya Sunucusu Olu\u015fturma"},"content":{"rendered":"<p>Java ile Statik Dosya Sunucusu Olu\u015fturma<\/p>\n<p>Web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, statik dosyalar\u0131 (HTML, CSS, JavaScript, resimler vb.) sunmak s\u0131kl\u0131kla ihtiya\u00e7 duyulan bir i\u015flemdir.  Bu makalede, Java kullanarak soket programlama ile kendi statik dosya sunucunuzu nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz.  Basit bir sunucudan ba\u015flayarak, performans optimizasyonlar\u0131 ve g\u00fcvenlik \u00f6nlemleri ekleyerek ileri seviye tekniklere ula\u015faca\u011f\u0131z.  Java&#8217;n\u0131n g\u00fc\u00e7l\u00fc ve esnek yap\u0131s\u0131n\u0131 kullanarak, \u00f6zelle\u015ftirilebilir ve verimli bir statik dosya sunucusu in\u015fa edece\u011fiz.<\/p>\n<h2>Java Soket Programlama Temelleri: Ba\u015flang\u0131\u00e7 Noktas\u0131<\/h2>\n<p>\u00d6ncelikle, Java soket programlamas\u0131n\u0131n temel prensiplerini anlamak \u00f6nemlidir.  Bir soket, iki uygulama aras\u0131nda ileti\u015fim kurmak i\u00e7in kullan\u0131lan bir a\u011f ba\u011flant\u0131s\u0131 noktas\u0131d\u0131r. Sunucu taraf\u0131nda bir soket dinleyerek gelen istekleri bekler ve istemci taraf\u0131 bir sokete ba\u011flanarak sunucuyla ileti\u015fim kurar.  Java&#8217;da <code>ServerSocket<\/code> s\u0131n\u0131f\u0131 sunucu taraf\u0131n\u0131, <code>Socket<\/code> s\u0131n\u0131f\u0131 ise istemci taraf\u0131n\u0131 temsil eder.  Bu iki s\u0131n\u0131f, veri ak\u0131\u015f\u0131n\u0131 y\u00f6netmek i\u00e7in <code>InputStream<\/code> ve <code>OutputStream<\/code> nesneleri kullan\u0131r.  Basit bir \u00f6rnek olarak,  bir istemciye &#8220;Merhaba D\u00fcnya!&#8221; mesaj\u0131 g\u00f6nderen bir sunucu \u015f\u00f6yle yaz\u0131labilir:<\/p>\n<pre><code class=\"java\">\nimport java.io.*;\nimport java.net.*;\n\npublic class SimpleServer {\n    public static void main(String[] args) throws IOException {\n        ServerSocket serverSocket = new ServerSocket(8080);\n        System.out.println(\"Sunucu 8080 portunda dinliyor...\");\n\n        Socket clientSocket = serverSocket.accept();\n        System.out.println(\"\u0130stemci ba\u011fland\u0131!\");\n\n        OutputStream outputStream = clientSocket.getOutputStream();\n        outputStream.write(\"Merhaba D\u00fcnya!\\n\".getBytes());\n\n        outputStream.close();\n        clientSocket.close();\n        serverSocket.close();\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu basit \u00f6rnek, temel soket i\u015flemlerini g\u00f6stermektedir. Ancak, statik dosya sunucusu olu\u015fturmak i\u00e7in daha geli\u015fmi\u015f tekniklere ihtiyac\u0131m\u0131z var.  \u00d6rne\u011fin, HTTP protokol\u00fcn\u00fc anlamak ve HTTP isteklerini i\u015flemek gerekiyor. Daha fazla bilgi i\u00e7in  <a href=\"https:\/\/fatihsoysal.com\">fatihsoysal.com<\/a> sitesini ziyaret edebilirsiniz.<\/p>\n<h2>HTTP Protokol\u00fc ve Statik Dosya Sunucusu Tasar\u0131m\u0131<\/h2>\n<p>HTTP (Hypertext Transfer Protocol), web taray\u0131c\u0131lar\u0131 ve web sunucular\u0131 aras\u0131nda ileti\u015fim kurmak i\u00e7in kullan\u0131lan bir protokol\u00fcd\u00fcr.  Statik dosya sunucumuzun HTTP isteklerini anlamal\u0131 ve uygun yan\u0131tlar\u0131 g\u00f6ndermelidir.  Bir HTTP iste\u011fi genellikle bir ba\u015fl\u0131k sat\u0131r\u0131 (method, path, HTTP version) ve iste\u011fe ba\u011fl\u0131 bir g\u00f6vde i\u00e7erir.  Sunucu, iste\u011fin yoluna (path) g\u00f6re dosyay\u0131 bulur ve dosya i\u00e7eri\u011fi ile birlikte bir HTTP yan\u0131t\u0131 (ba\u015fl\u0131klar ve g\u00f6vde) g\u00f6nderir.  Bu yan\u0131tta, HTTP durum kodu (\u00f6rne\u011fin, 200 OK, 404 Not Found)  ve i\u00e7erik t\u00fcr\u00fc (Content-Type) gibi bilgiler bulunur.  HTTP protokol\u00fcn\u00fc iyi anlamak, g\u00fc\u00e7l\u00fc ve g\u00fcvenilir bir statik dosya sunucusu olu\u015fturman\u0131n anahtar\u0131d\u0131r.<\/p>\n<h2>Ad\u0131m Ad\u0131m: Basit Bir Statik Dosya Sunucusu Geli\u015ftirme<\/h2>\n<p>\u015eimdi, temel bir statik dosya sunucusu olu\u015ftural\u0131m.  Bu \u00f6rnekte,  sunucunun belirli bir dizindeki dosyalar\u0131 sunaca\u011f\u0131n\u0131 varsay\u0131yoruz.  Dosya bulunamad\u0131\u011f\u0131nda 404 Not Found hatas\u0131 d\u00f6nd\u00fcrecektir.  \u0130\u015fte Java kodu:<\/p>\n<pre><code class=\"java\">\nimport java.io.*;\nimport java.net.*;\n\npublic class StaticFileServer {\n    public static void main(String[] args) throws IOException {\n        ServerSocket serverSocket = new ServerSocket(8080);\n        System.out.println(\"Sunucu 8080 portunda dinliyor...\");\n        String documentRoot = \".\/public\"; \/\/ Dosyalar\u0131n bulundu\u011fu dizin\n\n        while (true) {\n            Socket clientSocket = serverSocket.accept();\n            System.out.println(\"\u0130stemci ba\u011fland\u0131!\");\n\n            new Thread(() -> {\n                try {\n                    BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));\n                    String line;\n                    StringBuilder request = new StringBuilder();\n                    while (!(line = reader.readLine()).isEmpty()) {\n                        request.append(line).append(\"\\r\\n\");\n                    }\n\n                    String filePath = extractFilePath(request.toString());\n                    if(filePath == null) {\n                        sendError(clientSocket, 400,\"Bad Request\");\n                        return;\n                    }\n\n                    File file = new File(documentRoot, filePath);\n                    if (!file.exists() || !file.isFile()) {\n                        sendError(clientSocket, 404, \"Not Found\");\n                    } else {\n                        sendFile(clientSocket, file);\n                    }\n\n                } catch (IOException e) {\n                    e.printStackTrace();\n                } finally {\n                    try {\n                        clientSocket.close();\n                    } catch (IOException e) {\n                        e.printStackTrace();\n                    }\n                }\n            }).start();\n        }\n    }\n\n\n    private static String extractFilePath(String request) {\n        String[] lines = request.split(\"\\r\\n\");\n        if (lines.length > 0) {\n            String firstLine = lines[0];\n            String[] parts = firstLine.split(\" \");\n            if (parts.length >= 2) {\n                return parts[1].substring(1); \/\/ \u0130lk '\/' karakterini kald\u0131r\n            }\n        }\n        return null;\n    }\n\n    private static void sendFile(Socket socket, File file) throws IOException {\n        OutputStream outputStream = socket.getOutputStream();\n        String contentType = getContentType(file.getName());\n        outputStream.write((\"HTTP\/1.1 200 OK\\r\\n\" +\n                \"Content-Type: \" + contentType + \"\\r\\n\" +\n                \"Content-Length: \" + file.length() + \"\\r\\n\" +\n                \"\\r\\n\").getBytes());\n\n        FileInputStream inputStream = new FileInputStream(file);\n        byte[] buffer = new byte[4096];\n        int bytesRead;\n        while ((bytesRead = inputStream.read(buffer)) != -1) {\n            outputStream.write(buffer, 0, bytesRead);\n        }\n\n        outputStream.flush();\n        inputStream.close();\n    }\n\n\n    private static void sendError(Socket socket, int errorCode, String errorMessage) throws IOException {\n        OutputStream outputStream = socket.getOutputStream();\n        outputStream.write((\"HTTP\/1.1 \" + errorCode + \" \" + errorMessage + \"\\r\\n\" +\n                \"\\r\\n\").getBytes());\n        outputStream.flush();\n    }\n\n    private static String getContentType(String fileName) {\n        if(fileName.endsWith(\".html\")) return \"text\/html\";\n        if(fileName.endsWith(\".css\")) return \"text\/css\";\n        if(fileName.endsWith(\".js\")) return \"text\/javascript\";\n        if(fileName.endsWith(\".png\")) return \"image\/png\";\n        if(fileName.endsWith(\".jpg\") || fileName.endsWith(\".jpeg\")) return \"image\/jpeg\";\n        return \"application\/octet-stream\";\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod, gelen HTTP isteklerini i\u015fler, dosyay\u0131 bulur ve HTTP yan\u0131t\u0131n\u0131 g\u00f6nderir.  <code>documentRoot<\/code> de\u011fi\u015fkeni, statik dosyalar\u0131n bulundu\u011fu dizini belirler.  <code>getContentType<\/code> metodu dosya uzant\u0131s\u0131na g\u00f6re Content-Type ba\u015fl\u0131\u011f\u0131n\u0131 belirler.  Hata durumlar\u0131 i\u00e7in 404 ve 400 yan\u0131tlar\u0131 g\u00f6nderilir.  \u00d6nemli bir nokta ise, her istemci i\u00e7in yeni bir thread olu\u015fturarak, sunucunun birden fazla istemciye e\u015f zamanl\u0131 hizmet verebilmesidir.<\/p>\n<h2>Orta Seviye: Performans Optimizasyonlar\u0131<\/h2>\n<p>Basit sunucumuz \u00e7al\u0131\u015f\u0131yor olsa da, performans\u0131n\u0131 iyile\u015ftirmek i\u00e7in baz\u0131 optimizasyonlar yapabiliriz.  \u00d6rne\u011fin, b\u00fcy\u00fck dosyalar i\u00e7in verimli bir \u015fekilde veri aktar\u0131m\u0131 sa\u011flamak \u00f6nemlidir. Bunun i\u00e7in <code>BufferedInputStream<\/code> ve <code>BufferedOutputStream<\/code> kullanarak tamponlama yapabiliriz.  Ayr\u0131ca, her istek i\u00e7in yeni bir thread olu\u015fturmak yerine, bir thread pool kullanarak thread y\u00f6netimini optimize edebiliriz.  Bu, thread olu\u015fturma ve yok etme maliyetlerini azaltarak performans\u0131 art\u0131r\u0131r.  Bu optimizasyonlar, \u00f6zellikle y\u00fcksek trafikli ortamlarda \u00f6nemli performans kazan\u0131mlar\u0131 sa\u011flar.  Daha geli\u015fmi\u015f bir yakla\u015f\u0131m olarak, NIO (New I\/O) API'sini kullanarak non-blocking i\u015flemlerle performans\u0131 daha da art\u0131rabilirsiniz.  NIO, daha az threadle daha fazla istek i\u015fleme olana\u011f\u0131 sa\u011flar.  Bu tekniklerin detaylar\u0131 <a href=\"https:\/\/fatihsoysal.com\">fatihsoysal.com<\/a> adresinde bulunabilir.<\/p>\n<h2>\u0130leri Seviye: G\u00fcvenlik ve Hata Y\u00f6netimi<\/h2>\n<p>Bir \u00fcretim ortam\u0131nda kullan\u0131lan statik dosya sunucusunun g\u00fcvenli olmas\u0131 \u00e7ok \u00f6nemlidir.  Bu nedenle, dosya eri\u015fimini kontrol etmek ve k\u00f6t\u00fc ama\u00e7l\u0131 istekleri \u00f6nlemek i\u00e7in \u00f6nlemler almak gereklidir.  \u00d6rne\u011fin, sunucunun dosya sistemine direkt eri\u015fimini s\u0131n\u0131rland\u0131rarak, yaln\u0131zca belirli bir dizindeki dosyalar\u0131n sunulmas\u0131n\u0131 sa\u011flayabilirsiniz.  Ayr\u0131ca, olas\u0131 hatalar\u0131 ele almak i\u00e7in try-catch bloklar\u0131n\u0131 kullanarak uygulama stabilitesini art\u0131rabilirsiniz.  G\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 tespit etmek ve gidermek i\u00e7in d\u00fczenli g\u00fcvenlik denetimleri yapmak da \u00f6nemlidir.  Dikkat edilmesi gereken hususlardan biri de, dosya adlar\u0131nda  \"..\", \"\/\" gibi dizin de\u011fi\u015ftirme karakterlerini kontrol etmek ve bunlar\u0131n k\u00f6t\u00fcye kullan\u0131m\u0131n\u0131 \u00f6nlemektir. Aksi takdirde, sunucunun dosya sisteminde iste\u011fe ba\u011fl\u0131 olarak dola\u015f\u0131lmas\u0131na imkan vermi\u015f olursunuz.\n<\/p>\n<div class=\"uyar\u0131\">\n<h3>Dikkat!<\/h3>\n<p>G\u00fcvenlik a\u00e7\u0131klar\u0131, sunucunuzun sald\u0131r\u0131lara a\u00e7\u0131k kalmas\u0131na ve verilerinizin \u00e7al\u0131nmas\u0131na neden olabilir. G\u00fcvenlik \u00f6nlemlerini ihmal etmeyin!<\/p>\n<\/div>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131: Vaka \u00c7al\u0131\u015fmalar\u0131<\/h2>\n<p>\u00d6rne\u011fin, b\u00fcy\u00fck bir e-ticaret sitesi, \u00fcr\u00fcn resimleri ve statik i\u00e7eriklerini sunmak i\u00e7in Java tabanl\u0131 bir statik dosya sunucusu kullanabilir. Bu sunucu, y\u00fcksek trafik y\u00fck\u00fcne dayan\u0131kl\u0131 ve g\u00fcvenli olmal\u0131d\u0131r.  Ba\u015fka bir \u00f6rnek olarak, bir mobil uygulama, sunucudan statik kaynak dosyalar\u0131n\u0131 indirmek i\u00e7in bir Java sunucusuna ba\u011flanabilir.  Bu senaryoda, performans optimizasyonlar\u0131 \u00e7ok \u00f6nemlidir \u00e7\u00fcnk\u00fc kullan\u0131c\u0131lar h\u0131zl\u0131 bir indirme deneyimi bekler.  Son olarak, k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli bir web sitesi i\u00e7in, basit bir Java statik dosya sunucusu yeterli olabilir.  Ancak, b\u00fcy\u00fcmeyle birlikte sunucu mimarisinin \u00f6l\u00e7eklenebilirli\u011fini d\u00fc\u015f\u00fcnmek gereklidir.<\/p>\n<h2>\u00d6\u011frenme Yol Haritas\u0131<\/h2>\n<h3>Yeni Ba\u015flayan:<\/h3>\n<ul>\n<li>Java temelleri (nesne y\u00f6nelimli programlama, giri\u015f\/\u00e7\u0131k\u0131\u015f i\u015flemleri)<\/li>\n<li>Soket programlama temelleri (ServerSocket, Socket)<\/li>\n<li>HTTP protokol\u00fcn\u00fcn temel prensipleri<\/li>\n<li>Basit bir statik dosya sunucusu \u00f6rne\u011fi uygulamas\u0131<\/li>\n<\/ul>\n<h3>Orta Seviye:<\/h3>\n<ul>\n<li>Performans optimizasyonlar\u0131 (tamponlama, thread pool)<\/li>\n<li>HTTP durum kodlar\u0131 ve hata y\u00f6netimi<\/li>\n<li>Farkl\u0131 dosya t\u00fcrleri i\u00e7in Content-Type ba\u015fl\u0131klar\u0131n\u0131n ayarlanmas\u0131<\/li>\n<li>Orta \u00f6l\u00e7ekli bir statik dosya sunucusu geli\u015ftirilmesi<\/li>\n<\/ul>\n<h3>\u0130leri Seviye:<\/h3>\n<ul>\n<li>NIO (New I\/O) API'si ile non-blocking i\u015flemler<\/li>\n<li>G\u00fcvenlik \u00f6nlemleri (dosya eri\u015fim kontrol\u00fc, k\u00f6t\u00fc ama\u00e7l\u0131 isteklerin engellenmesi)<\/li>\n<li>\u00d6l\u00e7eklenebilir mimariler (load balancing, caching)<\/li>\n<li>Performans testleri ve optimizasyonu<\/li>\n<\/ul>\n<h2>Sonu\u00e7<\/h2>\n<p>Bu makalede, Java kullanarak soket programlama ile statik dosya sunucusu olu\u015fturman\u0131n temellerini ve ileri seviye tekniklerini ele ald\u0131k.  Basit bir sunucudan ba\u015flayarak, performans optimizasyonlar\u0131 ve g\u00fcvenlik \u00f6nlemleri ekleyerek daha sa\u011flam ve \u00f6l\u00e7eklenebilir bir sistem geli\u015ftirdik.  Unutmay\u0131n ki, g\u00fcvenlik ve performans, her zaman \u00f6ncelikli olmal\u0131d\u0131r.  Bu bilgilerle kendi statik dosya sunucunuzu olu\u015fturabilir ve web uygulamalar\u0131n\u0131z\u0131n ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131layabilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li><strong>Java'n\u0131n statik dosya sunucusu olu\u015fturmak i\u00e7in en iyi tercih olup olmad\u0131\u011f\u0131?<\/strong> Java, g\u00fc\u00e7l\u00fc ve esnek bir dil oldu\u011fu i\u00e7in statik dosya sunucusu geli\u015ftirmek i\u00e7in iyi bir se\u00e7enektir. Ancak, performans a\u00e7\u0131s\u0131ndan Node.js gibi di\u011fer se\u00e7enekler de g\u00f6z \u00f6n\u00fcnde bulundurulabilir.<\/li>\n<li><strong>\u00c7ok b\u00fcy\u00fck dosyalar\u0131 nas\u0131l verimli bir \u015fekilde sunabilirim?<\/strong> B\u00fcy\u00fck dosyalar i\u00e7in ak\u0131\u015f tabanl\u0131 (streaming) bir yakla\u015f\u0131m kullanmak ve tamponlama tekniklerini uygulamak \u00f6nemlidir.<\/li>\n<li><strong>Sunucumun g\u00fcvenli\u011fini nas\u0131l art\u0131rabilirim?<\/strong> Dosya eri\u015fimini s\u0131n\u0131rland\u0131rmak, k\u00f6t\u00fc ama\u00e7l\u0131 istekleri engellemek ve d\u00fczenli g\u00fcvenlik denetimleri yapmak \u00f6nemlidir.<\/li>\n<li><strong>Hata y\u00f6netimi nas\u0131l yap\u0131lmal\u0131d\u0131r?<\/strong> Try-catch bloklar\u0131 kullanarak olas\u0131 hatalar\u0131 yakalamak ve uygun \u015fekilde i\u015flemek \u00f6nemlidir.<\/li>\n<li><strong>Performans\u0131 nas\u0131l \u00f6l\u00e7ebilirim?<\/strong>  Performans testleri yapmak ve sunucunun farkl\u0131 y\u00fckler alt\u0131ndaki davran\u0131\u015f\u0131n\u0131 analiz etmek i\u00e7in \u00e7e\u015fitli ara\u00e7lar kullan\u0131labilir.<\/li>\n<\/ul>\n<p>Yazar: Fatih Soysal<\/p>\n","protected":false},"excerpt":{"rendered":"Java ile Statik Dosya Sunucusu Olu\u015fturma Web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, statik dosyalar\u0131 (HTML, CSS, JavaScript, resimler vb.) sunmak&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-29782","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java ile Statik Dosya Sunucusu Olu\u015fturma<\/title>\n<meta name=\"description\" content=\"Web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, statik dosyalar\u0131 (HTML, CSS, JavaScript, resimler vb.) sunmak s\u0131kl\u0131kla ihtiya\u00e7 duyulan bir i\u015flemdir. Bu makalede, Java kullanarak soket programlama ile kendi statik dosya sunucunuzu nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Basit bir sunucudan ba\u015flayarak, performans optimizasyonlar\u0131 ve g\u00fcvenlik \u00f6nlemleri ekleyerek ileri seviye tekniklere ula\u015faca\u011f\u0131z. Java&#039;n\u0131n g\u00fc\u00e7l\u00fc ve esnek yap\u0131s\u0131n\u0131 kullanarak, \u00f6zelle\u015ftirilebilir ve verimli bir statik dosya sunucusu in\u015fa edece\u011fiz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java ile Statik Dosya Sunucusu Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"Web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, statik dosyalar\u0131 (HTML, CSS, JavaScript, resimler vb.) sunmak s\u0131kl\u0131kla ihtiya\u00e7 duyulan bir i\u015flemdir. Bu makalede, Java kullanarak soket programlama ile kendi statik dosya sunucunuzu nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Basit bir sunucudan ba\u015flayarak, performans optimizasyonlar\u0131 ve g\u00fcvenlik \u00f6nlemleri ekleyerek ileri seviye tekniklere ula\u015faca\u011f\u0131z. Java&#039;n\u0131n g\u00fc\u00e7l\u00fc ve esnek yap\u0131s\u0131n\u0131 kullanarak, \u00f6zelle\u015ftirilebilir ve verimli bir statik dosya sunucusu in\u015fa edece\u011fiz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-19T13:00:29+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Java ile Statik Dosya Sunucusu Olu\u015fturma\",\"datePublished\":\"2025-09-19T13:00:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/\"},\"wordCount\":1265,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/\",\"name\":\"Java ile Statik Dosya Sunucusu Olu\u015fturma\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-19T13:00:29+00:00\",\"description\":\"Web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, statik dosyalar\u0131 (HTML, CSS, JavaScript, resimler vb.) sunmak s\u0131kl\u0131kla ihtiya\u00e7 duyulan bir i\u015flemdir. Bu makalede, Java kullanarak soket programlama ile kendi statik dosya sunucunuzu nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Basit bir sunucudan ba\u015flayarak, performans optimizasyonlar\u0131 ve g\u00fcvenlik \u00f6nlemleri ekleyerek ileri seviye tekniklere ula\u015faca\u011f\u0131z. Java'n\u0131n g\u00fc\u00e7l\u00fc ve esnek yap\u0131s\u0131n\u0131 kullanarak, \u00f6zelle\u015ftirilebilir ve verimli bir statik dosya sunucusu in\u015fa edece\u011fiz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java ile Statik Dosya Sunucusu Olu\u015fturma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java ile Statik Dosya Sunucusu Olu\u015fturma","description":"Web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, statik dosyalar\u0131 (HTML, CSS, JavaScript, resimler vb.) sunmak s\u0131kl\u0131kla ihtiya\u00e7 duyulan bir i\u015flemdir. Bu makalede, Java kullanarak soket programlama ile kendi statik dosya sunucunuzu nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Basit bir sunucudan ba\u015flayarak, performans optimizasyonlar\u0131 ve g\u00fcvenlik \u00f6nlemleri ekleyerek ileri seviye tekniklere ula\u015faca\u011f\u0131z. Java'n\u0131n g\u00fc\u00e7l\u00fc ve esnek yap\u0131s\u0131n\u0131 kullanarak, \u00f6zelle\u015ftirilebilir ve verimli bir statik dosya sunucusu in\u015fa edece\u011fiz.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"Java ile Statik Dosya Sunucusu Olu\u015fturma","og_description":"Web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, statik dosyalar\u0131 (HTML, CSS, JavaScript, resimler vb.) sunmak s\u0131kl\u0131kla ihtiya\u00e7 duyulan bir i\u015flemdir. Bu makalede, Java kullanarak soket programlama ile kendi statik dosya sunucunuzu nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Basit bir sunucudan ba\u015flayarak, performans optimizasyonlar\u0131 ve g\u00fcvenlik \u00f6nlemleri ekleyerek ileri seviye tekniklere ula\u015faca\u011f\u0131z. Java'n\u0131n g\u00fc\u00e7l\u00fc ve esnek yap\u0131s\u0131n\u0131 kullanarak, \u00f6zelle\u015ftirilebilir ve verimli bir statik dosya sunucusu in\u015fa edece\u011fiz.","og_url":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-19T13:00:29+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"8 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Java ile Statik Dosya Sunucusu Olu\u015fturma","datePublished":"2025-09-19T13:00:29+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/"},"wordCount":1265,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/","name":"Java ile Statik Dosya Sunucusu Olu\u015fturma","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-19T13:00:29+00:00","description":"Web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, statik dosyalar\u0131 (HTML, CSS, JavaScript, resimler vb.) sunmak s\u0131kl\u0131kla ihtiya\u00e7 duyulan bir i\u015flemdir. Bu makalede, Java kullanarak soket programlama ile kendi statik dosya sunucunuzu nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Basit bir sunucudan ba\u015flayarak, performans optimizasyonlar\u0131 ve g\u00fcvenlik \u00f6nlemleri ekleyerek ileri seviye tekniklere ula\u015faca\u011f\u0131z. Java'n\u0131n g\u00fc\u00e7l\u00fc ve esnek yap\u0131s\u0131n\u0131 kullanarak, \u00f6zelle\u015ftirilebilir ve verimli bir statik dosya sunucusu in\u015fa edece\u011fiz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/java-ile-statik-dosya-sunucusu-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java ile Statik Dosya Sunucusu Olu\u015fturma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/29782","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=29782"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/29782\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=29782"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=29782"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=29782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}