打造一款屬於自己的web服務器——開篇


    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(要學就學徹底唄)。同時也希望各位能夠多給予指導。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM