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