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. TestNG插件的安装问题

    一.可以采用离线安装的方式 离线安装若不成功,可以删除之前的eclipse,然后在新下载eclipse中添加离线安装包 1.离线安装方法: 发现很多同学和我一样无法在线安装testNg,现在分享一个离 ...

  2. 探索javascript----事件对象下的各种X和Y

    每次用到诸如client,screen,offset等,虽然通常都是能用对的,但是总觉得不是那么的自信没错.所以整理一下可以再需要的时候来查阅. 一:clientX和clientY,screenX和s ...

  3. 安全协议系列(四)----SSL与TLS

    当今社会,电子商务大行其道,作为网络安全 infrastructure 之一的 -- SSL/TLS 协议的重要性已不用多说.OpenSSL 则是基于该协议的目前应用最广泛的开源实现,其影响之大,以至 ...

  4. iOS一些常用的小知识点

    //获取全局的Delegate对象,这样我们可以调用这个对象里的方法和变量 [[UIApplication sharedApplication] delegate]; //获得程序的主Bundle N ...

  5. win7 解决IE浏览器不能打开网页的问题

    网络连接和网络映射正常,ping命令正常,但是无法上网. 以管理员身份运行命令行,在弹出的窗口中运行如下命令: netsh winsock reset catalog netsh int ip res ...

  6. 【C】二级指针探秘 & 星号的两种用法(1.与基本类型结合形成另一种类型,比如与int结合形成int* 2.取值操作)

    1)问题:二级指针到底是什么?怎么用的?怎么存放的? #include <stdio.h> #define TEST_ADDR 0x12FF40 void main() { int a = ...

  7. OpenSuse 中目录中文路径改为英文路径

    在很多发行版中可以通过: export LANG=en_US xdg-user-dirs-gtk-update 将主目录的英文路径名改为中文,然后恢复: export LANG=zh_CN 但是Ope ...

  8. 禁用 baloo_file_extractor 加速 ubuntu 14.04 (KDE)

    在复制了一堆零散文件后,系统同然变得奇卡,看看cpu和ram都占用不高,但看到这个进程 baloo_file_extractor 时不时地冒一下泡,怀疑是它在频繁访问硬盘.禁止它自动启动的方式: $ ...

  9. 重写ajax方法实现异步请求session过期时跳转登录页面

    jQuery(function($){ // 备份jquery的ajax方法 var _ajax=$.ajax; // 重写ajax方法, $.ajax=function(opt){ var _suc ...

  10. java 接口

    1.接口的引出:发现没有继承关系的类也能共享行为 2.接口不是类,类描述对象的属性和行为,但是接口只关注实现的行为3.当我们发现有行为在多个没有继承关系的类中共享,我们要把它抽取到接口中,而不是写到父 ...