博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用java编写简单Webserver,理解webserver的功能。
阅读量:6977 次
发布时间:2019-06-27

本文共 4355 字,大约阅读时间需要 14 分钟。

代码来自网上。

1.文件处理类 processer.java

1 package webbook.chapter2; 2  3 import java.io.*; 4 import java.net.Socket; 5  6 /** 7  * 处理一个HTTP用户请求的线程类。 8  */ 9 public class Processor extends Thread {10     private PrintStream out;11     private InputStream input;12     /** 默认的服务器存放访问内容的目录 */13     public static final String WEB_ROOT = "/library/webserver/documents";14 15     public Processor(Socket socket) {16         try {17             input = socket.getInputStream();18             out = new PrintStream(socket.getOutputStream());19         } catch (IOException e) {20             e.printStackTrace();21         }22     }23 24     public void run() {25         try {26             String fileName = parse(input);27             readFile(fileName);28         } catch (IOException e) {29             e.printStackTrace();30         }31     }32 33     /**34      * 解析客户机发过的所有HTTP请求,如果是符合HTTP协议内容的, 就分析出客户机所要访问文件的名字,并且返回文件名。35      */36     public String parse(InputStream input) throws IOException {37         BufferedReader in = new BufferedReader(new InputStreamReader(input));38         String inputContent = in.readLine();39         if (inputContent == null || inputContent.length() == 0) {40             sendError(400, "Client invoke error");41             return null;42         }43         // 分析客户请求的HTTP信息,分析出到底想访问哪个文件,44         // 发过来的HTTP请求应该是三部分。45 46         String request[] = inputContent.split(" ");47         if (request.length != 3) {48             sendError(400, "Client invoke error");49             return null;50         }51         // 第一部分是请求的方法52         String method = request[0];53         // 第二部分是请求的文件名54         String fileName = request[1];55         // 第三部分是HTTP版本号56         String httpVersion = request[2];57         System.out.println("Method: " + method + ", file name: " + fileName + ", HTTP version: " + httpVersion);58         return fileName;59     }60 61     /**62      * 处理调用一个文件的请求63      */64     public void readFile(String fileName) throws IOException {65         File file = new File(Processor.WEB_ROOT + fileName);66         if (!file.exists()) {67             sendError(404, "File Not Found");68             return;69         }70         // 把文件的内容读取到in对象中。71         InputStream in = new FileInputStream(file);72         byte content[] = new byte[(int) file.length()];73         in.read(content);74         out.println("HTTP/1.0 200 sendFile");75         out.println("Content-length: " + content.length);76         out.println();77         out.write(content);78         out.flush();79         out.close();80         in.close();81     }82 83     /**84      * 发送错误的信息85      */86     public void sendError(int errNum, String errMsg) {87         out.println("HTTP/1.0 " + errNum + " " + errMsg);88         out.println("Content-type: text/html");89         out.println();90         out.println("");91         out.println("Error " + errNum + "--" + errMsg + "");92         out.println("

" + errNum + " " + errMsg + "

");93 out.println("");94 out.println();95 out.flush();96 out.close();97 }98 }

 

2.webserver.java

1 package webbook.chapter2; 2  3 import java.io.IOException; 4 import java.net.ServerSocket; 5 import java.net.Socket; 6  7 public class WebServer { 8     /** 默认使用的服务器Socket端口号 */ 9     public static final int HTTP_PORT = 8080;10     private ServerSocket serverSocket;11 12     public void startServer(int port) {13         try {14             serverSocket = new ServerSocket(port);15             System.out.println("Web Server startup on  " + port);16             while (true) {17                 Socket socket = serverSocket.accept();18                 // 通过线程的方式来处理客户的请求19                 new Processor(socket).start();20             }21         } catch (IOException e) {22             e.printStackTrace();23         }24     }25 26     /**27      * WebServer类的启动方法,可以通过命令行参数指定当前Web服务器所使用的端口号。28      */29     public static void main(String[] argv) throws Exception {30         WebServer server = new WebServer();31         if (argv.length == 1) {32             server.startServer(Integer.parseInt(argv[0]));33         } else {34             server.startServer(WebServer.HTTP_PORT);35         }36     }37 }

 

简单webserver 充当的作用就是接受客户端程序发过来的请求,根据请求内容转换的数据找到自己制定路径下的文件,将其文件转为流返回客服端,这个过程所用的协议为http。

 

 

转载于:https://www.cnblogs.com/wangrui-techbolg/archive/2013/03/10/2953108.html

你可能感兴趣的文章
js的执行机制
查看>>
[swift 进阶]读书笔记-第十一章:互用性 C11P1 实践:封装 CommonMark
查看>>
我的友情链接
查看>>
TypeScript 从听说到入门(上篇)
查看>>
JavaScript 闭包
查看>>
redis(4)
查看>>
koa+mongoose基础入门
查看>>
vue下实现textarea类似密码框的功能之探索input输入框keyup,keydown,input事件的触发顺序...
查看>>
python数据池连接PG
查看>>
如何开发一个区块链应用程序
查看>>
Cookie 位置_无需整理
查看>>
Ansible批量安装mysql数据
查看>>
H3C 交换机命名规则
查看>>
徒手撸出一个类Flask微框架(三)根据业务进行路由分组
查看>>
杨学海:跨境电商新通道-进口保税直邮模式解析
查看>>
rsync client backup scripts
查看>>
L09-10老男孩Linux运维实战培训-Nginx服务生产实战应用指南05(架构解决方案)
查看>>
Linux下的Shell工作原理
查看>>
FTP与TFTP的区别
查看>>
Zookeeper迁移(扩容/缩容)
查看>>