tiny java web server
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的更多相关文章
- Java web server 基本实现原理
public class WebServer { //服务端Socket只要一个,所以定义成static, 同一时间只能一个线程访问(主线程) private static ServerSocket ...
- Java Web 开发的JavaBean + Servlet + Sql Server
日期:2018.12.9 博客期:026 星期日 我知道对于每个人都需要对开发web进行了解,而我们常用的技术,也应该有所了解 /*<------------------->*/知识点: ...
- [置顶] Embedded Server:像写main函数一样写Web Server
1.传统的JEE Web Server 传统的JEE中,如果我们想要部署一个Web Application,我们需要首先安装一个Container Server,如JBoss,WebLogic,Tom ...
- Tomcat是怎么工作的(2) -- 动手实现山寨版的简单Web Server
本文先讲解一下Java web server都是怎么工作的.web server也叫HTTP server——顾名思义它是用HTTP协议和客户端交互的.客户端一般就是各种各样的浏览器了.相信所有朋友都 ...
- JAVA Web学习笔记
JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...
- paip.java 开发中web server的选择jboss resin tomcat比较..
paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...
- CSAPP Tiny web server源代码分析及搭建执行
1. Web基础 webclient和server之间的交互使用的是一个基于文本的应用级协议HTTP(超文本传输协议). 一个webclient(即浏览器)打开一个到server的因特网连接,而且请求 ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
- java WEB开发入门
WEB开发入门 1 进入web JAVASE:标准- standard JAVA桌面程序 GUI SOCKET JAVAEE:企业-浏览器控制 web 2 软件结构 C/S :client ...
随机推荐
- css中clearfix清除浮动的用法及其原理示例介绍
clearfix的定义: .clearfix:after {}{ content: "."; /**//*内容为“.”就是一个英文的句号而已.也可以不写.*/ display: b ...
- Promise与Defer认识
1.deffer对象:jquery的回掉函数解决方案:含义是延迟到未来某个点再执行: 2.$.ajax链式写法: $.ajax("test.php") .done(func ...
- 学习NSRulerView
NSRulerMarker 有个imageOrigin是描述Marker中image的位置的: 在horizontal的ruler中,imageOrigin的x坐标是跟marker的location进 ...
- Javascript轮播 支持平滑和渐隐两种效果(可以只有两张图)
先上两种轮播效果:渐隐和移动 效果一:渐隐 1 2 3 4 效果二:移动 1 2 3 4 接下来,我们来大致说下整个轮播的思路: 一.先来看简单的,移动的,先上来一个图----移动效果图: 说明: ...
- Android Studio下SlidingMenu的导入与基础使用
一.关于这个控件,其实我们现在很多app都在用,最简单的,你打开QQ,当看资料卡的时候,首先要侧拉一下,那个就是SlidingMenu 这几天查了很多资料,各种方法都试了,但是一直都没有成功,最后在一 ...
- SQL注入的字符串连接函数
在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...
- SqlServer性能优化 提高并发性能(八)
并发访问: 当多个线程访问同一个资源,会产生并发性问题 并发控制与处理: 乐观并发控制:一种方式是"后来的更新者获胜" 这意味着先来的用户提交的值会在没有察觉的情况下丢失. 为 ...
- C语言指针,你还觉得难吗?
在研究式学习-c语言程序设计指针式这样介绍的: 内存中存储变量的第一个单元的地址 称为指针,存放指针的变量称为指针变量: 变量的访问方式有: 直接访问方式:按变量名查找其首地址 间接访问方式:通过指针 ...
- C++类大小
对于C++中类的大小,主要针对于无成员的空类大小,编译器会对该类进行优化,情况主要分为是否有虚表(虚函数)两种类型,对于无虚函数的类,该类大小均为1个字节(编译器插入一个char表示该类的存在),而出 ...
- 新浪微博AppKey大集合(share)
本文转自:http://blog.sina.com.cn/s/blog_9e1ea13a01017y3n.html ------------------------------------------ ...