打造一款属于自己的web服务器——开篇
JVM总结慢慢来吧,先插播一篇水文,来介绍下最近业余一直在写的一个小项目——easy-httpserver(github)。适合新手学习,大神们路过即可^_^。
一、这是个什么玩意?
easy-httpserver本来的目的是实现一个简易的java web服务器,基于jdk自带的httpserver实现,可以处理http请求,使用方式类似于jetty,以jar包方式嵌入项目 。但是准确的说他又不单算一个web服务器, easy-httpserver集成了MVC中部分View和Controller的功能,使web项目只用按照规则实现页面、controller以及对应的业务处理,就能直接部署运行。
所以说,这是个什么玩意我也说不清,但是我的目的就是打造一款能够快速开发部署小型web项目的框架(虽然现在离这个目的还有一些差距)。
二、为什么要写这么个东西?
理由有如下几点:
- 摘要里提到的原因。
- 之前一直想弄明白web服务器的运行原理,虽然看了一些资料,但是还是一知半解,正好自己写个简单的来体会体会。
- 年后想搭建一个个人博客,希望能够自己定制一些功能,但是搜了下发现java的开源博客要么不好用,要么不好改,还不如自己写一个(域名、空间都买了,真有点裤子都脱了,结果.....的感觉)。所以就打算自己慢慢搞个小框架,最后基于此搭个小博客。
- 现实因素:工作有点闲,用的技术也没太高要求,只能自己折腾点东西算是混经验呗。::>_<::,无奈啊,还是待好好学习,现在学java的技术不搞nb点,找个工作都木人要。
三、目前已完成的功能
目前项目已经能够完成一个动态网站的处理,并且采用类似jetty的嵌入启动方式,网站项目只需实现Controller和View页面并引入该项目jar包即可。 已完成主要功能如下:
- 支持动态请求(后缀为do,请求路径restful风格)
- 支持静态资源请求(后缀为对应资源类型后缀,可在配置文件中拓展)
- 可通实现Controller接口处理动态请求,并支持注解方式进行映射
- 动态请求可返回页面、json数据,并支持跳转
- 整合Velocity,返回页面可通过Velocity语法渲染页面
- 支持HTTP表单方式的文件上传(input:file)
- 支持session会话处理
四、如何使用
这个看项目下的readme吧,示例代码可以参考test-httpserver(github),里边对于各种用法都有示例。
五、项目结构
项目采用eclipse开发,maven构建,jdk为1.7(1.6应该也没问题),外部依赖velocity,junit,common-logging。项目文件结构如下:
~src/main/java
--org.eh.core
--annotation
AnnocationHandler.java 注解处理类
Controller.java Controller注解
RequestMapping 请求方法注解,用来标注Controller中的处理方法
--common
Constants.java 常量类,包括系统常量和配置文件对应信息
ReturnType.java 枚举,返回类型
--http
EHHttpHandler.java httpserver请求核心处理类,完成请求的接收、处理、返回
EHServer.java 项目启动类,完成服务器启动
ApplicationContext.java 全局数据和会话相关数据,单例
HttpSession.java session会话
--model
FileInfo.java 上传文件信息封装
ResultInfo.java Controller返回结果
--util
FileUploadContentAnalysis.java 上传请求解析类,从中提取表单中的域值和文件信息
FileUtil.java 文件工具类
IOUtil.java IO工具类
PropertyUtil.java 配置文件工具类
StringUtil.java 字符串工具类
VelocityUtil.java Velocity工具类
--web
--controller
Controller.java Controller接口,处理方法必须标记RequestMapping注解
--view
ViewHandler.java View处理类,完成页面文件渲染
~src/main/resources
velocity.properties
web.properties
六、接下来干什么
目前项目已经完成了一些基本功能,接下来将不断完善,重点是并发问题(也是目前自己不擅长的方面),不求强大但求好用。等该项目稳定之后,考虑用netty实现一个httpserver代替jdk中的httpserver(要学就学彻底呗)。同时也希望各位能够多给予指导。
打造一款属于自己的web服务器——开篇的更多相关文章
- 打造一款属于自己的web服务器——从简单开始
距离开篇已经过了很久,期间完善了一下之前的版本,目前已经能够完好运行,基本上该有的功能都有了,此外将原来的测试程序改为示例项目,新项目只需按照示例项目结构实现controller和view即可,详情见 ...
- IIS Web 服务器/ASP.NET 运行原理基本知识概念整理 转
转http://www.cnblogs.com/loongsoft/p/7272830.html IIS Web 服务器/ASP.NET 运行原理基本知识概念整理 前言: 记录 IIS 相 ...
- IIS Web 服务器/ASP.NET 运行原理基本知识概念整理
前言: 记录 IIS 相关的笔记还是从公司笔试考核题开始的,问 Application Pool 与 AppDomain 的区别? 促使我对进程池进了知识的学习,所以记录一下学习 ...
- Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍
一.http_load程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把 ...
- 动手打造轻量web服务器(二)路由
tomcat启动慢?自己动手打造轻量web服务器(一) 上篇讲了怎么做一个最简单的web服务器,这篇就是在上篇加上URL路由功能(什么是路由?) 首先,根据http获得请求行 val scanner ...
- 几款Web服务器性能压力测试工具
一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载. 但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般 ...
- 介绍几款Web服务器性能压力测试工具
一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载. 但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般 ...
- Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关
什么是Jexus Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,以支持ASP.NET.ASP.NET CORE.PHP为特色,同时具备反向代理.入侵检测等重要功能.可以这样说,J ...
- 使用用树莓派打造远程WEB服务器
简介:系统配置Raspberry Pi 3B + Raspbian + MySQL5.7 + Tomcat 9 + Nginx + 公网IP. 工具:Win32DiskImager .FileZill ...
随机推荐
- MSP430F149学习之路——比较器Comparaor_A
代码一: #include <msp430x14x.h> ; void int_clk() { BCSCTL1 &= ~XT2OFF; BCSCTL2 |= SELM_2 + SE ...
- mysql显示乱码问题
在select * from table:时往往会出现上图所示乱码现象 此时,输入status,会发现: 此时只要SET NAMES utf8即可解决该问题.此时,再次输入status: 总结:S ...
- 洛谷P2724 联系 Contact
P2724 联系 Contact 17通过 86提交 题目提供者该用户不存在 标签 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目背景 奶牛们开始对用射电望远镜扫描牧场外的宇宙感 ...
- Ubuntu12.04安装java6
按照android官方文档 http://source.android.com 下载编译android源代码,jdk安装失败,尝试一下方法成功(2013-11-20) 下面我就把在Ubuntu12.0 ...
- CSS3文字描边 CSS3字体外部描边
给需要实现文字描边的元素添加如下CSS3的属性 text-shadow:#000 1px 0 0,#000 0 1px 0,#000 -1px 0 0,#000 0 -1px 0; -webkit-t ...
- hbase查询,scan详解
一.shell 查询 hbase 查询相当简单,提供了get和scan两种方式,也不存在多表联合查询的问题.复杂查询需通过hive创建相应外部表,用sql语句自动生成mapreduce进行.但是这种简 ...
- (图 BFS)走迷宫
题目: 给一个迷宫,求出从起点到终点的路径.迷宫 src.txt 文件内容如下,第一行是迷宫的行列数,后面行是迷宫,1表示可行走,0表示不可以通过,起点是最左上角,终点是最右下角: 解析: 其实就是图 ...
- 常用的MyEclipse快捷键
在调试程序的时候,我们经常需要注释一些代码,在用Myeclipse编程时,就可以用 Ctrl+/ 为选中的一段代码加上以 // 打头的注释:当需要恢复代码功能的时候,又可以用Ctrl+/ 去掉注释.这 ...
- 显示或隐藏一个Grid
The Rowset class contains two methods that can be used to show and hide all rows: ShowAllRows() Hide ...
- 64位操作系统弹出"Failed to load the JNI shared library “E:/2000/Java/JDK6/bin/..jre/bin/client/jvm.dll”
64位操作系统弹出"Failed to load the JNI shared library /..jre/bin/client/jvm.dll”,最大的可能就是jdk的版本问题.去你的C ...