JAVA编写简单的http服务器
2016-05-12 20:54
537 查看
JAVA编写简单的Http服务器:
测试所用网页:
代码下载:https://github.com/SplayHuo/JavaProject
package server; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InterruptedIOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class HttpServer { public static void main(String[] args) throws IOException { int port = 80; new HttpServer().start(port); } public void start(int port) throws IOException { @SuppressWarnings("resource") ServerSocket server = new ServerSocket(port); System.out.println("Server has started at port: " + port); while(true) { Socket client = server.accept(); Thread thread = new Thread(new Services(client)); thread.start(); } } class Services implements Runnable { Socket client; public Services(Socket client) { this.client = client; } private byte[] getResource(String resource) throws IOException { File file = new File(resource); FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1000]; int read; while((read = fis.read(buffer)) != -1) { baos.write(buffer, 0, read); } fis.close(); baos.close(); return baos.toByteArray(); } private String getHead(String url) { //使用\\对.进行正则表达式中的转义 String[] arr = url.split("\\."); String fileType = arr[arr.length - 1]; if(fileType.equals("html")) { return "HTTP/1.0200OK\n" + "Content-Type:text/html\n" + "Server:myserver\n\n"; } else if(fileType.equals("jpg") || fileType.equals("gif") || fileType.equals("png")) { return "HTTP/1.0200OK\n" + "Content-Type:image/jpeg\n" + "Server:myserver\n\n"; } else { return null; } } @Override public void run() { try { InputStream is = client.getInputStream(); OutputStream os = client.getOutputStream(); client.setSoTimeout(500); String url = ""; int state = 0; while(true) { int readInt = is.read(); char c = (char)readInt; boolean space = Character.isWhitespace(c); switch (state) { case 0: if(space) continue; else state = 1; case 1: if(space) { state = 2; continue; } else { continue; } case 2: if(space) continue; else state = 3; case 3: if(space) break; else { url += c; continue; } } break; } while(true) { try { @SuppressWarnings("unused") int readInt = is.read(); } catch(InterruptedIOException e) { byte[] data = getResource("webapp" + url); os.write(getHead(url).getBytes("utf-8")); os.write(data); os.close(); break; } } } catch(IOException e) { e.printStackTrace(); } } } }
测试所用网页:
<html> <head> <title> A famous hero, hxy! </title> </head> <body> <h1 align="center">hxy's home page</h1> <h2 align="center">hxy's home page</h2> <h3 align="center">hxy's home page</h3> <h4 align="center">hxy's home page</h4> <h5 align="center">hxy's home page</h5> </body> </html>
代码下载:https://github.com/SplayHuo/JavaProject
相关文章推荐
- 配置grub开机图片(网络转)
- TCP/IP的三次握手协议
- Http请求
- RobotFrameWork http/https oauth接口测试 (二)
- http协议,全部看懂面试就成功了一半
- 关于Android studio 启动报错Internal error. Please report to https://code.google.com/p/android/issues
- 支持https的axel修改
- Android中进行基于 HTTP协议的网络访问
- 使用HC(HttpClient)/UC(HttpURLConnection)进行网络访问的基本步骤:
- android的两种网络请求方式关键代码详解
- Android 服务器连接工具类HttpUtil
- http转https
- java中的网络通信
- 网络get/post请求异步同步请求回调
- 未能加载文件或程序集 system.Web.Http.WebHost解决办法。
- 机器学习之——神经网络模型
- RobotFrameWork http/https oauth接口测试 (一)
- Android开发本地及网络Mp3音乐播放器(十六)歌词显示及滚动事件实现、ViewPager使用
- Android开发本地及网络Mp3音乐播放器(十六)歌词显示及滚动事件实现、ViewPager使用
- Android中基于HTTP协议的网络访问的两种方式