- 浏览: 162838 次
- 性别:
- 来自: 北京
最新评论
-
tanliwei:
Mr-su 写道行业(xingye),why?行是个多音字。
...
利用Java开源库把汉字转拼音 -
u148:
java.io.IOException: Stream clo ...
自己封装的一个编码转换工具类 -
Mr-su:
行业(xingye),why?
利用Java开源库把汉字转拼音 -
364902709:
此意悠悠 写道不可能的,java反射刚出来,最差的时候是正常编 ...
测试Java反射效率 -
此意悠悠:
不可能的,java反射刚出来,最差的时候是正常编程的10倍时间 ...
测试Java反射效率
我最近修的电子商务概论的课程,老师布置的作业,是要做个简单的web服务器
我做了一个,还拿去给同学当做软件课设给交了
我在里面挂了一个静态的网站,运行的还比较稳定
不过没有做多线程,也没有处理很多的mime类型
比较小,总共就一百多行,呵呵
package cn.tuoxie007.webserver; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date; public class Server { private boolean run = true; public Server(int port) { //start server try { ServerSocket ss = new ServerSocket(port); while (run) { //get a client Socket s = ss.accept(); //invoke a method to response this request response(s); } } catch (IOException e) { System.err.println("server eroor :" + e.getMessage()); } } byte[] readFile(File f){ try { return StringUtil.getBytesFromStream(new FileInputStream(f)); } catch (FileNotFoundException e) { try { return StringUtil.getBytesFromStream(new FileInputStream("www/404.html")); } catch (FileNotFoundException e1) { } catch (IOException e1) { } } catch (IOException e) { } return new byte[0]; } int getFileLength(File f){ return readFile(f).length; } static byte[] FILE_NOT_FOUND_HEAD = "HTTP/1.1 404 Not Found\n".getBytes(); static byte[] REPONSE_OK = "HTTP/1.1 200 OK\n".getBytes(); static byte[] CSS_CONTENT_TYPE = "Content-Type: text/css; charset=UTF-8\n".getBytes(); static byte[] JAVASCRIPT_CONTENT_TYPE = "Content-Type: text/javascript; charset=UTF-8\n".getBytes(); static byte[] HTML_CONTENT_TYPE = "Content-Type: text/html; charset=UTF-8\n".getBytes(); static byte[] JPEG_CONTENT_TYPE = "Content-Type: image/jpeg\n".getBytes(); static byte[] GIF_CONTENT_TYPE = "Content-Type: image/gif\n".getBytes(); static byte[] IMPORTANT_DATA = new byte[]{ 83, 101, 114, 118, 101, 114, 58, 32, 115, 105, 109, 112, 108, 101, 32, 115, 116, 97, 116, 105, 99, 32, 119, 101, 98, 32, 115, 101, 114, 118, 101, 114, 32, 98, 121, 32, 116, 117, 111, 120, 105, 101, 48, 48, 55, 10}; /** * response client * @param s */ private void response(Socket s) { try { BufferedReader br = new BufferedReader(new InputStreamReader(s .getInputStream())); String firstLine = br.readLine(); if (firstLine.startsWith("GET") && firstLine.contains("HTTP/")) { String[] parts = firstLine.split("\\s+"); if (parts.length > 1) { String requestFile = parts[1]; File f = getFile(requestFile); OutputStream out = s.getOutputStream(); if(!f.exists()){// file not found out.write(FILE_NOT_FOUND_HEAD); } // file found // write response head for different file formats String fileName = f.getName(); out.write(REPONSE_OK); out.write(IMPORTANT_DATA); out.write(("Content-Length: " + getFileLength(f) + "\n").getBytes()); if(fileName.endsWith("css")){ out.write(CSS_CONTENT_TYPE); }else if(fileName.endsWith("js")){ out.write(JAVASCRIPT_CONTENT_TYPE); }else if(fileName.endsWith("jpg")){ out.write("Accept-Ranges: bytes\n".getBytes()); out.write(JPEG_CONTENT_TYPE); }else if(fileName.endsWith("gif")){ out.write("Accept-Ranges: bytes\n".getBytes()); out.write(GIF_CONTENT_TYPE); }else{ out.write(REPONSE_OK); out.write(HTML_CONTENT_TYPE); } out.write("\n".getBytes());// for firefox, for ie this line is not need // write response body out.write(readFile(f)); // log this request log(s.getInetAddress().getHostAddress(), f.getAbsolutePath().split("www")[1]); } } } catch (IOException e) { }finally{ if(s != null){ try { s.close(); } catch (IOException e) { } } } } private void log(String ip, String file) { // TODO you can record this request here // write this message to disk yourself okay? I just print them System.out.println("[INFO] " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ", client:" + ip + ", request file:" + file); } /** * get local file * @param file * @return * @author xuke */ private File getFile(String file) { if(file.equals("/")){ file += "index.html"; }else{ String[] parts = file.split("/"); String endFile = parts[parts.length-1]; if(endFile.endsWith("/")){ file += "index.html"; }else if(!endFile.contains(".")){ file += "/index.html"; } } return new File(new File("www"), file); } /** * close server * @author xuke */ public void shutdown() { this.run = false; } /** * Main * @param args */ public static void main(String[] args) { new Server(80); } }
还有个类StringUtil,是我常用的一个工具类的一部分
有兴趣的话可以整个下过去看看, 运行上面贴出来的这个类就启动了,在80端口
服务器名字里面有我的名字,呵呵,在代码里,比较隐蔽,不过牛哥哥们一定会识破的,呵呵
- WebServer.zip (408.8 KB)
- 下载次数: 688
评论
13 楼
taupo
2009-06-16
我晕,单线程啊?
每次只能处理一个请求
起码也弄个线程池,能同时响应多请求吧
每次只能处理一个请求
起码也弄个线程池,能同时响应多请求吧
12 楼
tuoxie007
2009-06-16
EdwardWorld 写道
试试这个
package test; /** * * @author bu gao su ni */ public class TestByteWord { /** * @param args the command line arguments */ public static void main(String[] args) { byte[] xuke = new byte[]{-48,-20, -65, -53, -75,-60,119,101, 98, -73, -2, -50, -15, -58, -9, -78, -69, -76, -19,}; System.out.println( new String(xuke) ); } }
呵呵,谢谢鼓励
11 楼
EdwardWorld
2009-06-16
试试这个
package test; /** * * @author bu gao su ni */ public class TestByteWord { /** * @param args the command line arguments */ public static void main(String[] args) { byte[] xuke = new byte[]{-48,-20, -65, -53, -75,-60,119,101, 98, -73, -2, -50, -15, -58, -9, -78, -69, -76, -19,}; System.out.println( new String(xuke) ); } }
10 楼
lqql
2009-06-16
如果真想写,学学NIO吧!
9 楼
cauxu
2009-06-16
大学一年级的时候写过
当时用C写, 觉得可复杂啦,调来调去好不容易能输出一个页面
用java做就是简单,几下就能搭出来
当时用C写, 觉得可复杂啦,调来调去好不容易能输出一个页面
用java做就是简单,几下就能搭出来
8 楼
whaosoft
2009-06-16
不泼冷水 ~!还挺好玩的 没事多写写 我也多看看
7 楼
tuoxie007
2009-06-16
lqql 写道
实在是太简漏了!
一个实验而已,又不是拿来用的,当然简陋啦
6 楼
lqql
2009-06-16
实在是太简漏了!
5 楼
香克斯
2009-06-16
tuoxie007 写道
呵呵,我说来嘛,里面有我的名字
* @author xuke */
还以为说的是这个名字。
徐克?
4 楼
kimmking
2009-06-16
最后一个10是\n 换行符。
3 楼
tuoxie007
2009-06-16
呵呵,我说来嘛,里面有我的名字
2 楼
lqql
2009-06-16
zhangsatanyang 写道
static byte[] IMPORTANT_DATA = new byte[]{ 83, 101, 114, 118, 101, 114, 58, 32, 115, 105, 109, 112, 108, 101, 32, 115, 116, 97, 116, 105, 99, 32, 119, 101, 98, 32, 115, 101, 114, 118, 101, 114, 32, 98, 121, 32, 116, 117, 111, 120, 105, 101, 48, 48, 55, 10};
请问,你这个东西是干嘛用的??
Server: simple static web server by tuoxie007 就这个意思!
1 楼
zhangsatanyang
2009-06-16
static byte[] IMPORTANT_DATA = new byte[]{ 83, 101, 114, 118, 101, 114, 58, 32, 115, 105, 109, 112, 108, 101, 32, 115, 116, 97, 116, 105, 99, 32, 119, 101, 98, 32, 115, 101, 114, 118, 101, 114, 32, 98, 121, 32, 116, 117, 111, 120, 105, 101, 48, 48, 55, 10};
请问,你这个东西是干嘛用的??
发表评论
-
管中窥豹,结合多线程,对于tomcat中servlet加载的一点试探
2010-05-18 23:58 3157对于Servlet自己的生命周 ... -
测试Java反射效率
2010-05-15 23:58 6304测试分为3个方面:1. 实例化效率;2. 方法调用效率;3. ... -
传一本书里的代码
2010-04-13 22:24 1354RT 我把编译产生的bin删了,小了很多 -
想想我們大學都教了啥, 差距呀
2010-03-27 01:02 1111昨天还发现了一个新的概念,叫OAuth,OpenSSO ... -
我也說說OpenSSO
2010-03-24 22:24 1500昨天看到Oracle要關閉OpenSSO的消息,還說要 ... -
考慮用g4j實現一個gmail客戶端
2010-03-20 20:37 1033公司考慮信息安全,所以圖允許我們在公司里使用gmail ... -
Gmailer api for java
2010-03-19 16:43 1020今天研究了一下子g4j,這個東西,沒弄完,因為公司里面不能隨便 ... -
网站莫名其妙老是挂,原来是线程数太小
2009-11-04 07:54 3286昨天下午我们那个网站忽然变得很慢,我登上去看了下,没发现什么异 ... -
我设计的权限管理方案
2009-06-15 00:34 1849这是给我们学校的某管 ... -
(两年前初学JAVA时写过的一篇文章,发现给我们班同学看还挺有用的)
2009-06-04 04:02 1236最近装了 fedora 7感觉满好,虽然许多人都推崇ubunt ... -
记两次服务器不能启动大原因
2009-05-25 22:44 1141遇到这种很诡异的情况,tomcat无缘无故不能启动,一直处于s ... -
利用Java开源库把汉字转拼音
2009-05-21 02:52 35313最近做的项目,因为下拉框中的项目太多,需要有个过滤的方法。我想 ... -
java 预申请磁盘空间处理大文件
2009-05-09 03:40 1587熟悉电驴和bt的你可能经常看到这些软件可以在下载文件之初就先在 ... -
自己封装的一个编码转换工具类
2009-05-01 23:34 2047java做编码转换有两中方法 1.基于流的编码转换 I ... -
http parser 基本用法
2009-04-24 22:40 8058手动解析HTML是一件很崩溃的事情,sun的swing里也有解 ... -
用httpclient模仿firefox发送http请求
2009-04-10 12:18 7166最近需要做爬虫,研究了一下进行做http客户端的东 ... -
在Java中实现伪静态页面
2009-02-18 14:58 3501在Java中做这个事情好像有很多中方案,比较简单的方法是使用U ... -
关于Hibernate懒加载问题的最终解决方案
2009-02-18 14:40 12488Hibernate的强大之处之一是懒加载功能,可以有效的降低数 ...
相关推荐
"简单Web服务器设计与实现" 本文主要介绍了简单Web服务器的设计与实现,涵盖了WWW的工作原理、HTTP协议、Java语言、Web服务器的设计与实现等方面的知识点。 WWW的工作原理基于客户机/服务器计算模型,由Web浏览器...
本文将详细介绍如何简单搭建一个WEB服务器,包括基础概念、所需工具及步骤,旨在帮助初学者快速入门。 一、Web服务器的基础概念 1. HTTP:HTTP是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本...
1. **易操作性**:守望简单Web服务器的用户界面简洁明了,无需复杂的设置步骤,只需几步即可启动服务器,这对于初学者或者不熟悉服务器管理的用户来说非常友好。 2. **快速部署**:软件提供一键启动服务,能够迅速...
总的来说,通过学习和实践这个C#简单Web服务器开发实例,你可以了解到如何利用`HttpListener`构建基本的Web服务,这将有助于理解HTTP协议、网络编程以及.NET Framework的网络功能。随着对Web服务器原理和`...
【标题】:简单的web服务器 在IT行业中,Web服务器是至关重要的组成部分,它们负责接收HTTP请求并返回HTTP响应。这个“简单的web服务器”项目旨在通过Java实现一个基础版的Web服务器,类似于流行的Tomcat服务器,它...
【超级简单的Web服务器】 在IT领域,Web服务器是运行在计算机上的一种软件,它能够接收HTTP(超文本传输协议)请求,并返回相应的HTML页面或其他Web内容。这些服务器为我们提供了访问互联网上的网页和其他资源的...
#### 四、基于 Java 的简单 Web 服务器设计与实现 **1. 项目背景** 课程设计的目标是开发一个简单的 Web 服务器,该服务器能够处理 HTTP GET 请求并返回 HTML 文件。这个项目的实现需要掌握以下几个关键技术点: ...
【标题】"易语言简易WEB服务器源码.rar" 指的是一款基于易语言开发的简单Web服务器的源代码资源。易语言是中国本土设计的一种编程语言,它以其独特的汉字编程方式,降低了编程的门槛,使得非计算机专业人员也能快速...
本项目“简单JAVA WEB服务器”旨在提供一个基础的平台,帮助学习者理解Java Web服务器的工作原理,特别是静态网页服务和JSP(Java Server Pages)的执行,以及Cookie的解析。 1. **多线程技术**:Java Web服务器...
在这个场景中,我们关注的是一个使用C#编程语言实现的简单Web服务器。C#是Microsoft开发的一种面向对象的编程语言,广泛应用于Windows平台上的应用程序开发,包括Web服务。 1. **C#与Web服务器**: C#提供了丰富的...
本实例将带你走进Web服务器编程的世界,通过一个简单的实例来理解其工作原理。 首先,我们要了解Web服务器的基本概念。Web服务器主要任务是接收来自客户端(如浏览器)的HTTP请求,解析请求中的信息,如URL、HTTP...
应用服务器提供的是客户端应用程序可以调用的方法,而不是简单地传送页面。 IIS、Apache、Tomcat、Weblogic、WebSphere 都是不同的服务器, Apache 是纯粹的 Web 服务器,Tomcat 是一个 Servlet 和 JSP 容器,可以...
6. **ASP.NET Core**:虽然题目描述的是一个简单的C# Web服务器,但现代的C#开发往往使用ASP.NET Core框架,它提供了一套完整的Web开发工具和库,可以更高效地构建高性能的Web应用。不过,基础的Web服务器实现可以...
1、建立简单WEB服务器 2、用于局域网,互相点对点传送文件 3、建立临时WEB服务器,供大家临时下载文件等 【使用方法】 启动软件后,需要作一些设置: 1. 设置WEB服务器的根目录(又称:主目录)。以后所有的HTTP...
总的来说,"Linux- 用C语言实现的简单Web服务器源代码"为学习者提供了一个宝贵的实践平台,帮助他们从零开始理解Web服务器的运作方式。通过分析和修改源代码,不仅可以提高C语言编程技能,还能增强对网络协议和...
易语言简易WEB服务器是一款基于易语言开发的简单网络服务器软件,主要目标是为初学者提供一个学习和理解HTTP协议、网络编程以及服务器构建基础的平台。这个源码可以帮助开发者了解如何处理HTTP请求,如何响应客户端...
在互联网的世界里,Web服务器扮演着至关重要的角色。...本教程将引导你创建自己的Web服务器,让你更深入地理解网络通信的工作原理。...动手做自己的Web服务器,是探索网络世界的一扇窗口,也是技术成长的重要里程碑。
本文将深入探讨一个基于C#语言实现的简单TCP Web服务器,标题为"C#基于TCP写的简单WEB服务器"。这个项目主要展示了如何利用C#的网络编程库来构建一个基本的HTTP服务器,以处理GET请求并返回相应的网页内容。 首先,...
超简单的web服务器,打开程序后输入你网站的根目录 回车即可。要退出程序直接关闭程序就好。纯属测试用。服务器ip为本机ip,端口号为2233
微型Web服务器,通常被称为轻量级或微型HTTP服务器,是一种设计简单、小巧且易于部署的服务器软件。这种服务器主要用于测试、开发或者在低资源环境下提供基础的Web服务。标题中的"微型web服务器-单文件"指出,这个...