tomcat启动慢?自己动手打造轻量web服务器(一)

  上篇讲了怎么做一个最简单的web服务器,这篇就是在上篇加上URL路由功能(什么是路由?)

首先,根据http获得请求行

 val scanner = Scanner(socket.getInputStream())
scanner.use { it ->
val requestLine = it.nextLine()//获得请求行
socket.getOutputStream().use { out ->//将请求行传会浏览器
out.write("HTTP/1.1 200 OK".toByteArray())
out.write("\n".toByteArray())
out.write(("content-type:text/html").toByteArray())
out.write("\n".toByteArray())
out.write("\n".toByteArray())
out.write(requestLine.toByteArray())
out.flush()
}
}

此时在浏览器上打开,就会打印出请求行。

接下来我们来做一个静态资源的访问

import java.io.File
import java.net.ServerSocket
import java.util.* fun main(args: Array<String>) {
val workerSpace = "workerSpace"//工作空间
val port = 80//端口
ServerSocket(port).let { serverSocket ->
while (!serverSocket.isClosed) {//不间断接收accept请求
serverSocket.accept().let { socket ->
Thread {
Scanner(socket.getInputStream())
.use { scanner ->
val requestLine = scanner.nextLine()//获得请求行
val url = requestLine.trim().split(" ")[1]//获得请求url
val filePath = workerSpace + url//文件路径
File(filePath).let { file ->
if (file.isFile) {//找到文件
socket.getOutputStream().use { out ->
out.write("HTTP/1.1 200 OK".toByteArray())//响应行
out.write("\n".toByteArray())//换行符
val contentType = when (file.extension.toLowerCase()) {
"css" -> "text/css"
"js" -> "text/javascript"
"html" -> "text/html"
"plain" -> "text/plain"
"json" -> "application/json"
"xls" -> "application/vnd.ms-excel"
else -> "application/octet-stream"
}
//响应头
out.write("content-type:$contentType".toByteArray())
out.write("\n".toByteArray())
out.write("content-length:${file.length()}".toByteArray())
//注意这里需要两个换行符
out.write("\n\n".toByteArray())
out.write(file.readBytes())//响应体
}
} else {//没有找到资源404
socket.getOutputStream().use { out ->
out.write("HTTP/1.1 404".toByteArray())
out.write("\n".toByteArray())
out.write("content-type : text/html".toByteArray())
//注意这里需要两个换行符
out.write("\n\n".toByteArray())
out.write("<h1>not found</h1>".toByteArray())
}
}
}
}
}.start()
}
}
}
}

在程序工作目录下新建文件夹叫workerSpace,在其中放入index.html

运行程序,在浏览器上输入127.0.0.1/[文件路径/]index.html

是不是很简单呢

动手打造轻量web服务器(二)路由的更多相关文章

  1. tomcat启动慢?自己动手打造轻量web服务器(一)

    废话少说,直接上代码. 编程语言:kotlin import java.net.ServerSocketimport java.net.Socket fun main(args:Array<St ...

  2. 【转载】阿里云轻量应用型服务器和ECS服务器比较

    在采购阿里云服务器的时候,我们会发现阿里云服务器分好多种,如GPU服务器.ECS服务器.轻量应用型服务器等.ECS服务器和轻量应用型服务器很多人无法搞明白其中的差别,个人的观点是轻量应用型服务器适合入 ...

  3. 初识python轻量web框架flask

    1.使用pip安装Python包 大多数Python包都使用pip实用工具安装,使用pyvenv创建的虚拟环境会自动安装pip. 1.使用pip安装Flask(其它Python包同理) pip ins ...

  4. express搭建web服务器、路由、get、post请求、multer上传文件、EJS模板引擎的使用

    express官网 postman工具下载地址  multer的npm文档地址 express模板引擎怎么使用  地址:http://www.expressjs.com.cn/guide/using- ...

  5. 最小安装centos 7 无GUI静默安装 oracle 12c,打造轻量linux化服务器

    CentOS 7 下载地址:http://mirrors.opencas.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1511.iso 一.安 ...

  6. OSCHina技术导向:Java轻量web开发框架——JFinal

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restful.在拥有Java语言所有优势的同时再拥有ru ...

  7. MVC轻量web应用

    前言:为了能够清晰的理解mvc架构,以一个简单的mvc架构web应用为例.例子为一个beer项目,用户可通过页面选择啤酒的种类,服务端根据用户的选择,给出相应的推荐. 涉及到的代码: view层:fo ...

  8. Python轻量Web框架Flask使用

    http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask ...

  9. 轻量ORM-SqlRepoEx (二)初始化SqlRepoEx

    一.SqlRepoEx引用 暂时没放至nuget上,可以直接到https://github.com/AzThinker/SqlRepoEx下载源码,编译引用. (一).静态引用 1.需引用以下dll在 ...

随机推荐

  1. Linux 下shell中exec解析

    exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息.       bash shell ...

  2. 微软最新设计Fluent Design System初体验

    微软最新设计Fluent Design System初体验 本文图片不全!建议移步知乎专栏查看!!! https://zhuanlan.zhihu.com/p/30582886 原创 2017-11- ...

  3. 自动化测试全套流程(一)-搭建Jenkins环境

    前提 既然要做自动化测试,那我们就做得彻底一些,将整套系统部署在Linux服务器上,在搭建Jenkins环境之前,我已经通过VirtualBox安装了一个CentOS的服务器,搭建Jenkins是基于 ...

  4. Linux基础入门 - 1

    第一节 Linux简介 Linux 就是一个操作系统,也就是系统调用和内核那两层,Linux 本身只是操作系统的内核(内核是使其他程序能够运行的基础.它实现了多任务和硬件管理,用户或者系统管理员交互运 ...

  5. 深入剖析php执行原理(2):函数的编译

    本文只探讨纯粹的函数,并不包含方法.对于方法,会放到类.对象中一起研究. 想讲清楚在zend vm中,函数如何被正确的编译成op指令.如何发生参数传递.如何模拟调用栈.如何切换作用域等等,的确是一个很 ...

  6. ZooKeeper教程(一)----Centos7下安装ZooKeeper(单机版)

    1.下载源码 官网下载地址: http://mirrors.hust.edu.cn/apache/zookeeper/ 选择最新的版本进行下载 这里选择3.4.10进行下载: wget http:// ...

  7. 批量修改文件格式到UTF-8

    系统环境: Unbuntu14.10 目标: 多个文件夹加下的大量.java文件,需要由ASCII,转为UTF-8编码格式,文件嵌套较深. 解决方案: 执行Console中,目标目录下执行一下命令: ...

  8. BZOJ1012:[JSOI2008]最大数maxnumber(线段树)

    Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L 个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. ...

  9. 【vue】饿了么项目-header组件开发

    1.数据传递的理解 在App.vue中用到了header组件,首先注册组件 components: { 'v-header': header } 然后才能引用 <v-header :seller ...

  10. 如何批量下载bing的背景图片?

    工具准备 wget(点击下载) 批处理命令(点击下载) 网友提供的接口:http://area.sinaapp.com/bingImg?daysAgo=1(1代表天数) 实现步骤 1.打开记事本,并将 ...