JVM总结慢慢来吧,先插播一篇水文,来介绍下最近业余一直在写的一个小项目——easy-httpserver(github)。适合新手学习,大神们路过即可^_^。

一、这是个什么玩意?

easy-httpserver本来的目的是实现一个简易的java web服务器,基于jdk自带的httpserver实现,可以处理http请求,使用方式类似于jetty,以jar包方式嵌入项目 。但是准确的说他又不单算一个web服务器, easy-httpserver集成了MVC中部分View和Controller的功能,使web项目只用按照规则实现页面、controller以及对应的业务处理,就能直接部署运行。
    所以说,这是个什么玩意我也说不清,但是我的目的就是打造一款能够快速开发部署小型web项目的框架(虽然现在离这个目的还有一些差距)。

二、为什么要写这么个东西?

理由有如下几点:

  1. 摘要里提到的原因。
  2. 之前一直想弄明白web服务器的运行原理,虽然看了一些资料,但是还是一知半解,正好自己写个简单的来体会体会。
  3. 年后想搭建一个个人博客,希望能够自己定制一些功能,但是搜了下发现java的开源博客要么不好用,要么不好改,还不如自己写一个(域名、空间都买了,真有点裤子都脱了,结果.....的感觉)。所以就打算自己慢慢搞个小框架,最后基于此搭个小博客。
  4. 现实因素:工作有点闲,用的技术也没太高要求,只能自己折腾点东西算是混经验呗。::>_<::,无奈啊,还是待好好学习,现在学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服务器——开篇的更多相关文章

  1. 打造一款属于自己的web服务器——从简单开始

    距离开篇已经过了很久,期间完善了一下之前的版本,目前已经能够完好运行,基本上该有的功能都有了,此外将原来的测试程序改为示例项目,新项目只需按照示例项目结构实现controller和view即可,详情见 ...

  2. IIS Web 服务器/ASP.NET 运行原理基本知识概念整理 转

    转http://www.cnblogs.com/loongsoft/p/7272830.html IIS Web 服务器/ASP.NET 运行原理基本知识概念整理  前言:      记录 IIS 相 ...

  3. IIS Web 服务器/ASP.NET 运行原理基本知识概念整理

     前言:      记录 IIS 相关的笔记还是从公司笔试考核题开始的,问 Application Pool 与 AppDomain 的区别?      促使我对进程池进了知识的学习,所以记录一下学习 ...

  4. Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍

    一.http_load程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把 ...

  5. 动手打造轻量web服务器(二)路由

    tomcat启动慢?自己动手打造轻量web服务器(一) 上篇讲了怎么做一个最简单的web服务器,这篇就是在上篇加上URL路由功能(什么是路由?) 首先,根据http获得请求行 val scanner ...

  6. 几款Web服务器性能压力测试工具

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载. 但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般 ...

  7. 介绍几款Web服务器性能压力测试工具

    一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载. 但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般 ...

  8. Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关

    什么是Jexus Jexus是一款Linux平台上的高性能WEB服务器和负载均衡网关,以支持ASP.NET.ASP.NET CORE.PHP为特色,同时具备反向代理.入侵检测等重要功能.可以这样说,J ...

  9. 使用用树莓派打造远程WEB服务器

    简介:系统配置Raspberry Pi 3B + Raspbian + MySQL5.7 + Tomcat 9 + Nginx + 公网IP. 工具:Win32DiskImager .FileZill ...

随机推荐

  1. 统计Crash工具—Crashlytics

    官网:https://www.crashlytics.com/login 步骤: 注意:有时候再次运行,或者换了Crashlytics账号之后,获取不到Crash信息,其实你需要把plist文件里的K ...

  2. 华为OJ平台——放苹果(典型整数划分问题)

    题目描述: 输入m,n,分别表示苹果数与盘子的总数,要求输出苹果放在n个盘子的方法总数(注意511和151是一种情况),例如输入 7 3 输出8((7),(6,1),(5,2),(4,3),(5,1, ...

  3. Android——Runtime类中的freeMemory,totalMemory,maxMemory等几个方法

    maxMemory() 这个方法返回的是java虚拟机(这个进程)能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程序的时 候,没有添加-Xmx参数,那么就是64兆,也就是说max ...

  4. 开源项目:windows下使用MinGW+msys编译ffmpeg

    本文参考了网络上的不少文章,但由于版本环境的问题参考文章并不能直接指导编译,本文吸收多方经验,并在自己多次编译实验的基础上写成,欢迎转载,请注名出处.    FFmpeg是在Linux平台下开发的,但 ...

  5. Windbg 内存命令 《第四篇》

    内存是存储数据.代码的地方,通过内存查看命令可以分析很多问题.相关命令可以分为:内存查看命令和内存统计命令.内存统计命令用来分析内存的使用状况. 一.查看内存 有非常丰富的内存查看命令,它们被容易为d ...

  6. 何时使用 Em 与 Rem

    原文  http://www.w3cplus.com/css/when-to-use-em-vs-rem.html   你可能已经很熟练使用这两个灵活的单位,但你可能不完全了解何时使用rem,何时使用 ...

  7. PHP 统计中文字符串的长度

    中文网站一般会选择两种编码:gbk/gb2312或是utf-8. gbk编码下每个中文字符所占字节为2,例: $zhStr = ‘您好,中国!’; echo strlen($zhStr); // 输出 ...

  8. 旅游风景展示应用源码iPad版

    一款iPad旅游风景展示应用源码,一款iPad旅游景区展示应用.效果很炫,左右可以以书本的效果进行翻页,双击左边显示该风景区的信息,双击右边可以显示该风景区的地理位置.<ignore_js_op ...

  9. [系统]制作老毛桃U盘WinPE

    准备工作,1G以上的U盘一个, Winpe 工具一个,个人推荐老毛桃winpe Ghost镜像文件(这个不用说了吧,能想到U盘装系统肯定都知道的) 可以开始了:插入U盘(最好把U盘里的东西清空,自己保 ...

  10. NASM编译器的$和$$标记

    NASM中的times相当于MASM中的dup起到重复定义的作用. $表示当前行的偏移地址,$$表示当前段的起始偏移地址, ;------------------------------------- ...