import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList; /**
* Created by Administrator on 2016/7/29.
*/ public class HttpDemo extends Thread
{
private ServerSocket serverSocket;
private int port = 80; public void run()
{
String[] MIME_TYPES = {
"text/html",
"image/jpeg",
"image/png",
"image/gif",
"application/javascript",
"text/css",
};
try {
serverSocket = new ServerSocket(port);
while(true) {
Socket connectedClient = serverSocket.accept();
DataInputStream inStream = new DataInputStream(connectedClient.getInputStream());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inStream));
String str = bufferedReader.readLine();
ArrayList<String> headers = new ArrayList();
String encoding = "ISO-8859-1";
while(str != null) {
System.out.println(str);
headers.add(str);
if (str.isEmpty()) {
//analysis headers and response http request
String firstLine = headers.get(0);
String parts[] = firstLine.split(" ");
String responseHeader;
String responseBody;
String file;
responseHeader = "HTTP/1.1 200 OK\r\n";
DataOutputStream out = new DataOutputStream(connectedClient.getOutputStream());
if (parts[1].equals("/")) {
file = "./index.html";
} else {
file = "." + parts[1];
} String mimeType;
if (file.endsWith(".html")) {
mimeType = MIME_TYPES[0];
} else if(file.endsWith(".jpg")) {
mimeType = MIME_TYPES[1];
} else if(file.endsWith(".png")) {
mimeType = MIME_TYPES[2];
} else if(file.endsWith(".gif")) {
mimeType = MIME_TYPES[3];
} else if(file.endsWith(".css")) {
mimeType = MIME_TYPES[5];
} else if(file.endsWith(".js")) {
mimeType = MIME_TYPES[4];
} else {
mimeType = MIME_TYPES[0];
} try {
File fl = new File(file);
Long len = fl.length();
responseHeader += "Content-Length:" + len + "\r\n";
responseHeader += "Content-Type:" + mimeType;
byte[] buf = new byte[len.intValue()];
FileInputStream flin = new FileInputStream(file);
flin.read(buf, 0, len.intValue());
responseBody = new String(buf, encoding);
} catch(Exception e) {
connectedClient.close();
break;
} out.writeBytes(responseHeader + "\r\n\r\n" + responseBody);
connectedClient.close();
break;
}
str = bufferedReader.readLine();
}
}
} catch(Exception e) {
//do nothing
}
}
}

tiny java web server的更多相关文章

  1. Java web server 基本实现原理

    public class WebServer { //服务端Socket只要一个,所以定义成static, 同一时间只能一个线程访问(主线程) private static ServerSocket ...

  2. Java Web 开发的JavaBean + Servlet + Sql Server

    日期:2018.12.9 博客期:026 星期日 我知道对于每个人都需要对开发web进行了解,而我们常用的技术,也应该有所了解 /*<------------------->*/知识点: ...

  3. [置顶] Embedded Server:像写main函数一样写Web Server

    1.传统的JEE Web Server 传统的JEE中,如果我们想要部署一个Web Application,我们需要首先安装一个Container Server,如JBoss,WebLogic,Tom ...

  4. Tomcat是怎么工作的(2) -- 动手实现山寨版的简单Web Server

    本文先讲解一下Java web server都是怎么工作的.web server也叫HTTP server——顾名思义它是用HTTP协议和客户端交互的.客户端一般就是各种各样的浏览器了.相信所有朋友都 ...

  5. JAVA Web学习笔记

    JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...

  6. paip.java 开发中web server的选择jboss resin tomcat比较..

    paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax  艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...

  7. CSAPP Tiny web server源代码分析及搭建执行

    1. Web基础 webclient和server之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议). 一个webclient(即浏览器)打开一个到server的因特网连接,而且请求 ...

  8. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

  9. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

随机推荐

  1. android:installLocation 解析

    决定了apk安装位置 有三个选项:1.auto 2.internalOnly 3.preferExternal http://www.cnblogs.com/Lefter/archive/2012/0 ...

  2. ADO.NET与ORM的比较:NHibernate实现CRUD(转)

    原文地址 http://blog.csdn.net/zhoufoxcn/article/details/5402511 说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spr ...

  3. jQuery原生框架-----------------事件

    jQuery.extend({ // 绑定事件 addEvent: function( ele, type, fn ) { // ele不是DOM,type不是字符串,fn不是函数,打包打走 if( ...

  4. 最后一次PSP

    PSP: 一.计划 完成这个任务需要五天左右. 二.开发 1.需求分析: 作为一个排球比赛的现场工作人员,我需要统计每一名球员的得分以及技术统计(如:发球,拦网,一传等等),以便于颁发每场比赛的MVP ...

  5. C语言程序设计第4堂作业

    大家注意:本次作业稍有增加,由于放假期间大家空闲时间比较充足,将之前学习过程中遗留的问题必须在假期解决.   本次课学习主要内容: 分支结构中的二分支结构.多分支结构和else-if语句 掌握字符型数 ...

  6. elasticsearch-PHP第一天

    遇到很大的问题就是,给边做边找原因,看官方文档,全英文看不懂.只能慢慢一步一步去做.   性子太急,真的不行,跨越性太大,卡一个小时多,才发现,连安装都没搞明白.   首先需要一个JAVA环境,上百度 ...

  7. Java随笔三

    1.接口: 1)接口不是类,不能使用new运算符实例化一个接口,而是对类的一组需求描述,这些类要遵循接口描述的统一格式进行定义.个人感觉像C语言中的函数在头文件中的预先声明,但是包含了一些类的特点,比 ...

  8. ThinkPHP_SQL(1)查询语言

    推荐使用索引数组或者对象来作为查询条件,因为会更加安全. 一.使用字符串作为查询条件 这是最传统的方式,但是安全性不高,例如: $User = M("User"); // 实例化U ...

  9. DOM和IE中的 事件对象

    DOM中的事件对象:(符合W3C标准)    preventDefault()        取消事件默认行为    stopImmediatePropagation() 取消事件冒泡同时阻止当前节点 ...

  10. ThinkPHP 自动验证相关注意

    1.假如加入了表单令牌的话,表单的各种名与对应Model字段一致,不然报坑爹的令牌错误. 2.假如加入了表单令牌的话,Create只能采用默认的POST数据创建数据对象,不然又是坑爹的令牌错误. 3. ...