打造一款屬於本身的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包便可。 已完成主要功能以下:
  • 支持動態請求(後綴爲do,請求路徑restful風格)
  • 支持靜態資源請求(後綴爲對應資源類型後綴,可在配置文件中拓展)
  • 可通實現Controller接口處理動態請求,並支持註解方式進行映射
  • 動態請求可返回頁面、json數據,並支持跳轉
  • 整合Velocity,返回頁面可經過Velocity語法渲染頁面
  • 支持HTTP表單方式的文件上傳(input:file)
  • 支持session會話處理

4、如何使用

    這個看項目下的readme吧,示例代碼能夠參考test-httpserver(github),裏邊對於各類用法都有示例。 web

5、項目結構

    項目採用eclipse開發,maven構建,jdk爲1.7(1.6應該也沒問題),外部依賴velocity,junit,common-logging。項目文件結構以下:
shell

~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(要學就學完全唄)。同時也但願各位可以多給予指導。 json

相關文章
相關標籤/搜索