用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      * 服务器监听一个端口,并读取浏览器的请求信息,从该信息提取出访问的资源(这里为文件名)。并在工作目录下查找是否有该资源,有则输出资源内容,否则返回404
12      * 测试方法:
13      * 1、用String path=System.getProperty("user.dir");获取当前的工作目录,并在该目录下放要测试的文件
14      * 2、访问127.0.0.1:8080/test.html
15      */
16     public static void main(String[] args) {
17         // TODO Auto-generated method stub
18         ServerSocket server = null;
19         Socket s=null;
20         try
21         {
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 IOException
13     {
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 IOException
21     {
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             else
46             {
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 }
时间: 2024-10-09 23:20:53

用Java实现简单的web服务器的相关文章

java实现一个简单的Web服务器

Web服务器也称为超文本传输协议服务器,使用http与其客户端进行通信,基于java的web服务器会使用两个重要的类, java.net.Socket类和java.net.ServerSocket类,并基于发送http消息进行通信. 这个简单的Web服务器会有以下三个类: *HttpServer *Request *Response 应用程序的入口在HttpServer类中,main()方法创建一个HttpServer实例,然后调用其await()方法,顾名思义,await()方法会在指定端口

Java Socket编程(五) 简单的WEB服务器

简单的WEB服务器 一个简单的WEB服务器将由列表9.2这样构建.当然,还必须要对方法和回应事件进行改进.简单的服务器不会分析和存储请求头.新的WEB服务器将分析和存储请求,为以后的处理作准备.为了达到这个目的,你必须有一个包含HTTP请求的类. HTTPrequest类 列表9.5列出了一个完整的HTTPrequest类.这个类必须包括一个请求头所需的所有信息. 列表9.5.HTTPrequest类. import java.io.*; import java.util.*; import j

Tomcat学习笔记(一)一个简单的Web服务器

内容为<深入剖析Tomcat>第一章重点,以及自己的总结,如有描述不清的,可查看原书. 一.HTTP协议: 1.定义:用于服务器与客户端的通讯的协议,允许web服务器和浏览器通过互联网进行发送和接收数据.是一种请求和响应协议,使用可靠的TCP协议,TCP协议的端口为80,是一种面向连接的协议. 2.HTTP协议请求的三个组成部分:这三部分之间用回车换行符(CRLF)隔开 请求部分:方法(GET/POST等7种,其他的很少用,书上有介绍)[空格,该部分内容以空格隔开] 统一资源标识符URI[空格

JAVA 实现 简单的 HTTP服务器

关于JAVA的HTTP服务器的简单实现,还望大家给出宝贵建议,谢谢. 1.首先来说下HTTP所有的状态碼,相信对于网页开发的博友们,肯定不陌生. 状态码 状态码英文名称 中文描述 100 Continue 继续.客户端应继续其请求 101 Switching Protocols 切换协议.服务器根据客户端的请求切换协议.只能切换到更高级的协议,例如,切换到HTTP的新版本协议 200 OK 请求成功.一般用于GET与POST请求 201 Created 已创建.成功请求并创建了新的资源 202

自己模拟的一个简单的web服务器

首先我为大家推荐一本书:How Tomcat Works.这本书讲的很详细的,虽然实际开发中我们并不会自己去写一个tomcat,但是对于了解Tomcat是如何工作的还是很有必要的. Servlet容器是如何工作的 servlet容器是一个复杂的系统.不过,一个servlet容器要为一个servlet的请求提供服务,基本上有三件事要做: 1,创建一个request对象并填充那些有可能被所引用的servlet使用的信息,如参数.头部. cookies.查询字符串. URI 等等.一个 request

徒手用Java来写个Web服务器和框架吧&lt;第三章:Service的实现和注册&gt;

徒手用Java来写个Web服务器和框架吧<第一章:NIO篇> 徒手用Java来写个Web服务器和框架吧<第二章:Request和Response> 这一章先把Web框架的功能说一些,有个雏形. 先是制作一个Service,并绑定到一个正则地址.用到了注解和反射. 项目地址: Telemarketer Service的定义 Telemarketer的Service是一个服务,请求了跟它关联的地址,那就由它来为你服务. 它对外只需一个方法.并且对这个方法的要求大概只有输入一个Reque

《Python入门》第一个Python Web程序——简单的Web服务器

上一篇讲了<Python入门>Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序--简单的Web服务器. 与其它Web后端语言不同,Python语言需要自己编写Web服务器. 如果你使用一些现有的框架的话,可以省略这一步: 如果你使用Python CGI编程的话,也可以省略这一步: 用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录

自己动手模拟开发一个简单的Web服务器

开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的Web服务器来体会一下. 一.请求-处理-响应模型 1.1 基本过程介绍 每一个HTTP请求都会经历三个步凑:请求-处理-响应:每当我们在浏览器中输入一个URL时都会被封装为一个HTTP请求报文发送到Web服务器,而Web服务器则接收并解析HTTP请求报文,然后针对请求进行处理(返回指定的HTML页面

代码片段 - Golang 实现简单的 Web 服务器

------------------------------ 下面一段代码,实现了最简单的 Web 服务器: 编译环境: Linux Mint 18 Cinnamon 64-bit Golang 1.7 ------------------------------ // main.go package main import ( "fmt" "log" "net/http" ) // 处理主页请求 func index(w http.Respon