虽然写的不是很好,但 最终解释权以及版权归13东倍所有!

package com.web;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
new HttpWeb();
}

}

package com.web;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class HttpWeb {
private static int port=8880;
private boolean isRun=true;
public HttpWeb() throws IOException{
//System.out.println("coming HttpWeb()");
ServerSocket listening=new ServerSocket(port);
System.out.println("listening监听的端口号---"+listening.getLocalPort());
while(isRun){
System.out.println("loop");
Socket socket=listening.accept();
System.out.println("socket---"+socket);
Request request=new Request(socket.getInputStream());
//request.getURI();
Response response=new Response(socket.getOutputStream());
//response.outHTML(request.getURI());
WebProcess wp=new WebProcess(request,response);
//wp.returnFile();
response.outHTML(wp.returnFile());
 
socket.close();
}
}
}

package com.web;
import java.io.IOException;
import java.io.InputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Request {
private InputStream inputStream=null;
public Request(InputStream inputStream) {
this.inputStream=inputStream;
}

public String getURI() throws IOException{
String resource=null;
BufferedReader in=new BufferedReader(new InputStreamReader(inputStream));
System.out.println("in----------"+in);
String line=in.readLine();
System.out.println("line---------"+line);
resource=line.substring(line.indexOf("/")+1,line.lastIndexOf("/")-5);
System.out.println("resource---------"+resource);
return resource;
}

}

package com.web;
import java.io.OutputStream;
import java.io.PrintWriter;
public class Response {
private PrintWriter out=null;
public Response(OutputStream outputStream) {
out=new PrintWriter(outputStream,true);
}
public void outHTML(String datas){
System.out.println("coming outHTML()");
out.println(datas);
}

}

package com.web;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class WebProcess {
private Request request=null; 
private Response response=null;
public WebProcess(Request request, Response response) {
this.request=request;
this.response=response;
}
public String returnFile() throws IOException{
String resource=request.getURI();
File file=new File(resource);
System.out.println("file-----------"+file);
FileInputStream fis=new FileInputStream(file.getAbsolutePath());
System.out.println("fis----------"+fis);
byte[] data=new byte[fis.available()];
fis.read(data);
String datas=new String(data);
return datas;
}

}

HttpWeb服务器之--用OO方式写的更多相关文章

  1. 用OO方式写键盘字母小游戏

    <html>  <head>   <title>0.0</title>   <script>    window.onload=functi ...

  2. Session服务器之Redis

    Session服务器之Redis Redis与Memcached的区别内存利用率:使用简单的key value (键值对)存储的话,Mermcached 的内存利用率更高,而如果Redis采用hash ...

  3. linux下维护服务器之常用命令

    linux下维护服务器之常用命令! 第1套如下: 正则表达式: 1.如何不要文件中的空白行和注释语句: [root@localhost ~]# grep -v '^$' 文件名 |grep -v '^ ...

  4. backup服务器之rsync服务

    backup服务器之rsync服务   rsync是开源的.快速的.多功能的可实现全量及增量的本地或远程数据同步备份的优秀工具.它拥有scp.cp的全量复制功能,同时比scp.cp命令更优秀.更强大. ...

  5. Web地图服务、WMS 请求方式、网络地图服务(WMS)的三大操作

    转自奔跑的熊猫原文 Web地图服务.WMS 请求方式.网络地图服务(WMS)的三大操作 1.GeoServer(地理信息系统服务器) GeoServer是OpenGIS Web 服务器规范的 J2EE ...

  6. Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。

    系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  7. C#高性能TCP服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...

  8. OO方式下,ALV TREE和ALV GRID的不同之处

    作为大部分报表程序的基础,ALV GRID差不多是每个ABAP开发者必须了解和掌握的内容,因此网上也不乏相关资料,而ALV TREE的应用相对较少,中文资料也就比较少见了.实际上,ALV TREE和A ...

  9. Web服务器之iis,apache,tomcat三者之间的比较

    IIS-Apache-Tomcat的区别 IIS与Tomcat的区别 IIS是微软公司的Web服务器.主要支持ASP语言环境. Tomcat是Java Servlet 2.2和JavaServer P ...

随机推荐

  1. 富文本编辑器 - wangEditor 上传图片

    效果: . 项目结构图: wangEditor-upload-img.html代码: <html> <head> <title>wangEditor-图片上传< ...

  2. gethostbyname() -- 用域名或主机名获取IP地址

    #include <netdb.h>    #include <sys/socket.h> struct hostent *gethostbyname(const char * ...

  3. svn回滚版本1

    我刚开始使用SubVersion时, 想把svn代码库回滚到以前某个版本,  上网找来找去都找不到(那时文档比较少), 让我郁闷了好一阵子.  现在记录一下 SubVersion回滚的方法: 第一种方 ...

  4. 【译】在Asp.Net中操作PDF - iTextSharp - 绘制矢量图

    原文 [译]在Asp.Net中操作PDF - iTextSharp - 绘制矢量图 在上一篇iTextSharp文章中讲述了如何将现有的图片插入PDF中并对其进行操作.但有时,你需要在PDF中绘制不依 ...

  5. Android 程式开发:(二十)内容提供者 —— 20.6 自定义ContentProvider的使用

    现在,ContentProvider已经创建好了,可以去尝试使用一下. 1. 使用之前的工程,在布局文件main.xml中添加一些控件. <?xml version="1.0" ...

  6. 用 PS 复制权限

    用 PS 复制权限 我们要把源计算机上的文件权限复制到目的计算机上. get-acl .\s.txt | Export-Clixml sddl.xml 把 s.txt 文件的权限保存到 sddl.xm ...

  7. Android bitmap序列化

    最近在开发中需要用到图片bitmap的序列化并进行传递,发现bitmap是没有序列化的,下面是自己实现的一个序列化方法,分享下. 以下是通过byte[]来进行序列化的,因为bitmap是没有序列化的, ...

  8. WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理

    原文:WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理 在前面一片文章(服务代理不能得到及时关闭会有什么后果?)中,我们谈到及时关闭服务代理(Service Proxy)在一个高并发环境 ...

  9. 基于visual Studio2013解决C语言竞赛题之1042字符串比较

          题目 解决代码及点评 /********************************************************************** ...

  10. Netty IO线程模型学习总结

    Netty框架的 主要线程是IO线程.线程模型的好坏直接决定了系统的吞吐量.并发性和安全性. Netty的线程模型遵循了Reactor的基础线程模型.以下我们先一起看下该模型 Reactor线程模型 ...