JavaScriptで作るWebサーバ
JavaScriptでWebサーバを作るといっても、Rhinoです。
きしださんとこにあったコードの単なるJavaScript化ですが。
Javaがインストールされていれば、以下のテキストファイル一つで簡易的なWebサーバになってしまうわけです。
webserver.js
importClass(com.sun.net.httpserver.HttpExchange); importClass(com.sun.net.httpserver.HttpHandler); importClass(com.sun.net.httpserver.HttpServer); importClass(java.io.File); importClass(java.io.IOException); importClass(java.io.InputStream); importClass(java.io.OutputStream); importClass(java.io.PrintWriter); importClass(java.net.InetSocketAddress); importClass(java.util.HashMap); importClass(java.util.Map); var PORT = 8081; var DOCUMENT_ROOT = "C:\\"; var contentTypes = new HashMap(); contentTypes.put("html", "text/html"); contentTypes.put("jpg", "image/jpeg"); contentTypes.put("png", "image/png"); contentTypes.put("gif", "image/gif"); contentTypes.put("css", "text/css"); contentTypes.put("js", "text/javascript"); var root = new File(DOCUMENT_ROOT); var server = HttpServer.create(new InetSocketAddress("localhost", PORT), 0); server.createContext("/", new HttpHandler({ handle : function(he) { var path = he.getRequestURI().getPath(); var f = new File(root, path); if(!f.exists()){ //ファイルがない he.sendResponseHeaders(404, 0); sendMessage(he.getResponseBody(), "not found."); return; } if(f.isDirectory()){ var indexFile = new File(f, "index.html"); if(!indexFile.exists()){ he.sendResponseHeaders(403, 0); sendMessage(he.getResponseBody(), "fobbiden."); return; } f = indexFile; } var idx = path.lastIndexOf("."); if(idx >= 0){ var ext = path.substring(idx + 1); if(contentTypes.containsKey(ext)){ he.getResponseHeaders().add( "Content-Type", contentTypes.get(ext)); } } he.sendResponseHeaders(200, f.length()); var is = new java.io.FileInputStream(f); var res = he.getResponseBody(); var buf = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 1024); var len; while((len = is.read(buf)) >= 0){ res.write(buf, 0, len); } res.close(); is.close(); } })); server.start(); function sendMessage(res, message) { var pw = new PrintWriter(res); pw.println(message); pw.close(); res.close(); } java.lang.Thread.currentThread().suspend();
起動は、
jrunscript -f webserver.js
上記コードの場合、
http://localhost:8081/[Cドライブ配下のパス]
で、Cドライブ配下全部さらしちゃいます。