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. GridView在ScrollView中实现在家更多

    这个本身会有bug  应该在滑动监听中作出判断的 <?xml version="1.0" encoding="utf-8"?><Relativ ...

  2. java中开源日志记录工具log4j

    日志:除了能记录异常信息,还可以记录程序正常运行时的关键信息. 使用log4j来进行日志文件记录经典步骤: 001.在项目中创建一个lib文件夹,然后将下载好的jar包copy到该文件夹下 002.对 ...

  3. python selenium与自动化

    大学是学习过java,但是工作中没用,忘完了,而且哪怕以后有了机会,就是很不愿意去学这个语言,开始喜欢上了c#,但是随着学的升入,感觉.net太庞大了,要学习那么多,总感觉我学这个要做什么,感觉要做的 ...

  4. ionic2 图片上传

    参考URL:https://github.com/dsgriffin/Ionic-2-File-Transfer-Example

  5. WebGL中添加天空盒的两种方法

    天空盒 的添加可以让模型所在的场景非常漂亮,而其原理也是非常简单的,相信看完下面代码就可以明白了. 说到天空盒的两种方法,倒不如说是两种写法,分别用了纹理加载的两个方法:loadTexture和loa ...

  6. entity framework 新手入门篇(4)-entity framework扩展之 entityframework.extended

    对于EF的操作,我们已经有了大概的了解了,但对于实战来说,似乎还欠缺着一些常用的功能,那就是批量的删除,更新数据. 承接上面的部分,我们有一个叫做House的数据库,其中包含house表和seller ...

  7. 解决iOS9下隐藏App返回按钮文字导致的诡异闪屏问题

    问题的原因竟是一行代码导致的,这行代码的作用是隐藏App返回按钮的文字. 看看这有问题的代码: //将返回按钮的文字position设置不在屏幕上显示 [[UIBarButtonItem appear ...

  8. javascript之小积累-获取url传参的值

    在项目中经常遇到两个页面传值的情况,我采取的方案是通过url后面加参数,也就是get方式传值. 这个方式的优点是:传值.获取很方便. 缺点是:1. 把参数都暴露在浏览器中了,一些敏感信息不建议这样传: ...

  9. easyUI参数传递Long型8100131457085857579980953变成8.100131457085857e 24的问题,如下可以解决

    function addOptBtn(val, row, index) { var ht = "<a href='${pageContext.request.contextPath}/ ...

  10. EasyUI 开发笔记(一)

    由于某些原因,在公司做的后台需要改成类似于Ext.js 形式的后台,主要看好其中的 框架布局,以及tab开页面和弹出式内部窗体. 后来看看,改成EasyUI,较Ext.js 库小很多,也便于公司的初级 ...