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 ...
随机推荐
- javaScript学习(入门)
不落俗套的来讲讲javascript的特点: 1.所有主流浏览器都是支持javascript的. 2.绝大部分网页都使用javascript. 3.javascript可以实现网页呈现各种动态效果. ...
- js相关参考资料
[图片等比例适配:]http://www.cnblogs.com/zengxiangzhan/archive/2009/09/12/1565323.html
- Ubuntu 14.10下搭建简易FTP服务器[vsftpd]
Ubuntu下公认最易上手的ftp软件是vsftpd,既然标题都说了是“简易”的,那么必然是用最大众的..下面是正题 目标需求:搭建一个允许匿名/本地登录的FTP,并且支持上传/下载/修改功能,同时F ...
- jsp提交表单数据乱码,内置对象,以及过滤器
jsp提交表单数据乱码解决方案 通过form表单给服务器提交数据的时候,如果提交的是中文数据,那么可能会出现乱码,如果表单的请求方式是post请求,那么可以使用如下方案解决乱码: 在调用getPara ...
- job1
http://www.newsmth.net/nForum/#!article/Career_Upgrade/221039 http://www.newsmth.net/nForum/#!articl ...
- SQL盲注之正则攻击
我们都已经知道,在MYSQL 5+中 information_schema库中存储了所有的 库名,表明以及字段名信息.故攻击方式如下: 1. 判断第一个表名的第一个字符是否是a-z中的字符,其中bli ...
- WeView 里引用的H5中的文字 到行末尾 文字被切割
这个情况 在iPhone6以上没问题 以下有问题 具体情况是 我用以下代码计算内容的高度 NSString *injectionJSString = @"var script = doc ...
- Protobuf C#教程 ThriftC#教程大合辑
android与PC,C#与Java 利用protobuf 进行无障碍通讯[Socket] http://www.cnblogs.com/TerryBlog/archive/2011/04/23/20 ...
- IntelliJ怎么读?
原来IntelliJ 的正确发音是 Intel li J. 周知.
- webview加载h5,关闭activity时,窗体泄露问题
问题描述: webview加载一个含有input控件的html页面,当点击input控件是回调app的closepage方法[closepage中只有一个finish操作],出现窗体泄露问题. 分析: ...