打造一款属于本身的web服务器——开篇

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

1、这是个什么玩意?

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

2、为何要写这么个东西?

    理由有以下几点:
github

  1. 摘要里提到的缘由。
  2. 以前一直想弄明白web服务器的运行原理,虽然看了一些资料,可是仍是一知半解,正好本身写个简单的来体会体会。
  3. 年后想搭建一个我的博客,但愿可以本身定制一些功能,可是搜了下发现java的开源博客要么很差用,要么很差改,还不如本身写一个(域名、空间都买了,真有点裤子都脱了,结果.....的感受)。因此就打算本身慢慢搞个小框架,最后基于此搭个小博客。
  4. 现实因素:工做有点闲,用的技术也没过高要求,只能本身折腾点东西算是混经验呗。::>_<::,无奈啊,仍是待好好学习,如今学java的技术不搞nb点,找个工做都木人要。

3、目前已完成的功能 

  目前项目已经可以完成一个动态网站的处理,而且采用相似jetty的嵌入启动方式,网站项目只需实现Controller和View页面并引入该项目jar包便可。 已完成主要功能以下: web

  • 支持动态请求(后缀为do,请求路径restful风格)
  • 支持静态资源请求(后缀为对应资源类型后缀,可在配置文件中拓展)
  • 可通实现Controller接口处理动态请求,并支持注解方式进行映射
  • 动态请求可返回页面、json数据,并支持跳转
  • 整合Velocity,返回页面可经过Velocity语法渲染页面
  • 支持HTTP表单方式的文件上传(input:file)
  • 支持session会话处理

4、如何使用

    这个看项目下的readme吧,示例代码能够参考test-httpserver(github),里边对于各类用法都有示例。 json

5、项目结构

    项目采用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

6、接下来干什么

    目前项目已经完成了一些基本功能,接下来将不断完善,重点是并发问题(也是目前本身不擅长的方面),不求强大但求好用。等该项目稳定以后,考虑用netty实现一个httpserver代替jdk中的httpserver(要学就学完全呗)。同时也但愿各位可以多给予指导。restful

相关文章
相关标签/搜索