首页 > 代码库 > 用Java实现简单的web服务器
用Java实现简单的web服务器
1、WebServer.java文件
1 package webserver; 2 3 import java.io.*; 4 import java.net.*; 5 6 public class WebServer { 7 8 /** 9 * web服务器:实现200和404操作10 * 原理:11 * 服务器监听一个端口,并读取浏览器的请求信息,从该信息提取出访问的资源(这里为文件名)。并在工作目录下查找是否有该资源,有则输出资源内容,否则返回40412 * 测试方法:13 * 1、用String path=System.getProperty("user.dir");获取当前的工作目录,并在该目录下放要测试的文件14 * 2、访问127.0.0.1:8080/test.html15 */16 public static void main(String[] args) {17 // TODO Auto-generated method stub18 ServerSocket server = null;19 Socket s=null;20 try21 {22 server=new ServerSocket(8080,3,InetAddress.getByName("127.0.0.1"));23 }catch(Exception e)24 {25 e.printStackTrace();26 }27 while(true)28 {29 try{30 s=server.accept();31 OutputStream output=s.getOutputStream();32 InputStream input=s.getInputStream();33 34 //接收请求信息35 Request request=new Request(input);36 String filename=request.getUri();37 //System.out.println(filename);38 39 //处理并响应请求信息40 Response response=new Response(output,filename);41 response.response();42 43 }catch(Exception e)44 {45 e.printStackTrace();46 }47 }48 }49 50 }
2、Request.java
1 package webserver; 2 import java.io.*; 3 public class Request { 4 /* 5 * 接收请求的信息,并返回资源(文件名) 6 * */ 7 InputStream input; 8 public Request(InputStream input) 9 {10 this.input=input;11 }12 public String getUri() throws IOException13 {14 String content=null,str=null;15 StringBuffer request = new StringBuffer(); 16 byte[] buffer = new byte[2048]; 17 int i = 0; 18 19 try { 20 i = input.read(buffer); //读取内容并存入buffer数组中,并返回读取的的字节数。21 } catch (IOException e) { 22 e.printStackTrace(); 23 i = -1; 24 } 25 //将buffer数组转换为字符串26 for(int k = 0; k < i; k++) { 27 request.append((char)buffer[k]); 28 } 29 content=request.toString();30 /* 31 *以下方法错误!用该返回会使浏览器不断处于请求连接状态32 * BufferedReader br=new BufferedReader(new InputStreamReader(input));33 while((str=br.readLine())!=null)34 {35 content=content+str+"\r\n";36 }37 */ 38 if(content!=null)39 return getFilename(content);40 else return null;41 }42 /*提取文件名*/43 public String getFilename(String content)44 {45 int a,b;46 a=content.indexOf(‘ ‘);47 if(a!=-1)48 {49 b=content.indexOf(‘?‘,a+1);50 if(b==-1)b=content.indexOf(‘ ‘,a+1);51 return content.substring(a+2,b);52 }53 return null;54 }55 }
3、Response.java
1 package webserver; 2 3 import java.io.*; 4 import java.io.File; 5 import java.io.IOException; 6 import java.io.OutputStream; 7 8 public class Response { 9 /**10 * 响应并处理请求信息11 */12 public OutputStream output;13 public String filename;14 private static final int BUFFER_SIZE = 1024; 15 public Response(OutputStream output,String filename)16 {17 this.output=output;18 this.filename=filename;19 }20 public void response() throws IOException21 {22 String path=System.getProperty("user.dir");//获取当前的工作目录23 byte[] buffer = new byte[BUFFER_SIZE]; 24 int ch; 25 FileInputStream fis = null; 26 //System.out.println(path+File.separator+filename);27 if(path!=null&&filename!=null)28 {29 File file=new File(path,filename);30 String str="";31 /*必须添加响应头,否则无法以html格式显示内容*/32 if(file.exists())33 {34 fis = new FileInputStream(file); 35 str = "HTTP/1.1 200 OK \r\n" + 36 "Content-Type: text/html\r\n" + 37 "\r\n" ;38 output.write(str.getBytes());39 ch = fis.read(buffer); 40 while(ch != -1) { 41 output.write(buffer, 0, ch); 42 ch = fis.read(buffer, 0, BUFFER_SIZE); 43 } 44 }45 else46 {47 str = "HTTP/1.1 404 File Not Found \r\n" + 48 "Content-Type: text/html\r\n" + 49 "Content-Length: 100\r\n" + 50 "\r\n" + 51 "<h1>404 File Not Found!</h1>"; 52 output.write(str.getBytes());53 }54 }55 output.close();56 }57 }
用Java实现简单的web服务器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。