最近本身作了幾個Java Web項目,有公司的商業項目,也有我的作着玩的小項目,寫篇文章記錄總結一下收穫,列舉出在作項目的整個過程當中,所須要用到的技能和知識點,帶給尚未真正接觸過完整Java Web項目的同窗一個比較完整的視角,提供一個所謂的「大局觀」,也以便於同窗們更有針對性地學習。固然,這裏所用到的例子項目是很是初級,簡單的項目,因此大神們就能夠不用往下看了。css
首先咱們從網站的架構談起。通常來講,咱們將網站分爲前端和後端。前端主要負責頁面的展現,後端則是業務邏輯的實現。因爲html5的興起,前端領域已經愈來愈火熱,前端技術發展極快,今天咱們不作過多介紹,由於如今的互聯網公司,前端工程師和Java工程師是徹底不一樣的兩種技術崗位。因此咱們仍是以Java的角度去看待一個項目。在前端沒有那麼火的前幾年,或者說在經典的Java Web的開發模式中,咱們使用Jsp技術來做爲展示層的實現,其實也就是所謂的前端。固然只懂得Jsp是不夠的還須要懂html,css,js,ajax等一些前端的基礎技術,Jsp技術在其中扮演外層包裝的角色。那麼後端呢?後端是因爲一些實現了業務邏輯Java代碼和數據庫組成。說到這,就能夠推出Web開發中經典的MVC模式,Model-View-Controller。View,,就是指表現層,Model,是用來承載數據的抽象結構,而Controller則是View和Model的橋樑。View存在與前端代碼中,Controller,Model存在與後端代碼中。在後端代碼中,爲了保證代碼的整潔,易讀性,通常會採用分層的辦法,自頂向下分爲controller層,service層,dao層,數據層或者叫持久層(直接與數據庫打交道)。有時候,爲了達到解耦的目的,會在上述基層中間加入響應的接口層,以使得接口與實現分離。在更加大型的網站中,會出現更加複雜的架構,好比dao層與數據層之間要有緩存層,或者訪問壓力增大後,須要使用集羣,負載均衡等高級技術,但在這裏,咱們就不深刻討論複雜架構了。html
因此以上咱們看到,一個Web 項目前端須要表現層,後端有controller層,service層,dao層,持久層。在表現層,除了剛纔提到的html,css,js,ajax,jsp等基礎知識,在實際開發中,咱們還會用到許多框架技術,好比tiles,velocity,freemarker等模板技術來簡化表現層的開發。在持久層,除了jdbc外,還有Mybatis,Hibernate等框架來提升開發效率。在Java Web中最耀眼的當屬Spring了,Spring做爲一個貫穿整個項目的框架,爲項目開發帶來依賴注入,面向切面編程的功能。除了這些,咱們還須要熟練掌握一種關係型數據庫的使用,如MySQL,Oracle等,固然更好地話還須要掌握一種非關係型數據庫,MongoDB,Redis。 前端
掌握了以上知識點,恭喜你,你已經能夠開始寫Java Web項目了。可是隻會寫而不會部署,咱們的項目仍然不能拿出來用。因此說到這裏,咱們的項目代碼已經寫好,接下來該怎麼辦呢?固然是須要找一個容器來運行咱們的代碼。這裏的容器是固然不是指Java裏的數據類型,而是指應用服務器,此處要特別區分應用服務器與Web服務器,至於Web服務器是什麼,稍後會介紹。(若是有同窗不是很清楚服務器的概念,能夠先看下一段,再回來看)目前,市面主要流行的應用服務器有Tomcat,Jetty,JBoss等。不少人會問咱們爲何須要應用服務器?顧名思義,應用服務器就是用來運行咱們的應用代碼的。這裏須要特別提到的是,Java Web用到了像Jsp,servlet這樣的動態web技術,而這些技術的代碼是必須運行中應用服務器中的。因此當咱們寫好應用代碼後,須要把本身的應用部署到應用服務器上。應用部署好後,那麼用戶們該怎麼訪問呢?直接訪問應用服務器嗎?這個時候就須要web服務器出場了。在互聯網上,最強大的應用層協議當屬http協議了,人們訪問網站就是經過http協議來進行訪問的,而Web服務器就是支持http協議的服務器,因此就叫http服務器。Web服務器接收http請求,而後再將請求轉交給應用服務器。有人會問用戶直接訪問應用服務器很差嗎?爲何要給web服務器,而後再到應用服務器?從功能實現上來講,是能夠的。許多應用服務器,好比Tomcat是具備web服務器的功能,因此直接訪問也能夠。可是因爲在實際的生產環境中,因爲負載均衡,cdn加速等緣由,咱們仍是須要在應用服務器的前端再加一個web服務器來提升訪問效率,經常使用的有Nginx,Apache這樣的服務器。 html5
以前總是在講這個服務器,那個服務器,不知道有沒有同窗聽懵了。其實服務器這個概念,咱們應該在真正接觸計算機專業領域以前早就據說過,好比之前打遊戲以爲卡的時候你們都時不時會用到服務器這個詞彙。可是我真正理解並研究服務器是在學習tomcat, jetty以後纔開始的。那麼服務器到底什麼呢?服務器這個概念其實很簡單,就是一臺電腦,那它和咱們平常用的電腦有什麼區別?第一,它通常沒有顯示器,它只有主機。第二,它的操做系統不一樣於咱們經常使用的windows , Mac OS。更多的是nix系統。第三,它運行了一些服務器端軟件。好比說,咱們上文提到的Tomcat , Jetty , Nginx,Apache,其實這些都是服務器軟件,只是主機運行了這些軟件,因此有時候你們就混淆了叫法。因此所謂的數據庫服務器,你們也知道了,其實就是運行了數據庫的主機。說到服務器,咱們所須要掌握的重點知識就是服務器操做系統,也就是nix系統,好比CentOS , Ubuntu等。web
說到這裏,其實一個簡單的完整的Java Web項目就差很少了。咱們簡單回顧一下,首先,咱們須要利用各類框架和開發技術寫出應用代碼。接下來,咱們須要一個檯安裝了*nix系統的主機,在上面安裝好Web服務器軟件,應用服務器軟件,再把咱們的應用代碼部署到應用服務器上。如今咱們只須要獲取到主機的IP地址,就可以遠程訪問應用了。面試
開發:ajax
一、視圖層技術——HTML,CSS,JS,AJAX,Tiles,Velocity,FreeMarker
二、持久層技術——MyBatis,Hibernate
三、Spring , Spring MVC
四、項目構建工具Maven
五、日誌Log4j
六、版本控制 Git數據庫
數據庫技術:編程
一、SQL語句
二、參數調優windows
操做系統:
一、熟練掌握一種Linux系統,原理,Shell命令
服務器技術:
一、熟練使用並理解一個應用服務器技術的原理(Tomcat)
二、熟練使用並理解一個Web服務器技術的原理(Nginx)
緩存技術:
一、熟練使用並理解一種緩存技術(Redis,Memcache,EhCache)
非關係型數據庫
熟練使用並理解一種非關係型數據庫(MongoDB)
中間件技術:
一、JMS:activeMQ和kafka/
二、RPC: Dubbo
設計模式:
一、瞭解並可以使用幾種最主要的設計模式
網絡:
一、熟練使用並理解一個網絡開發技術(Netty)
二、熟悉http,TCP協議
Java虛擬機:
一、熟悉jvm運行原理,內存分佈
二、jvm參數調優
原文:
blog.csdn.net/JasonLiuLJX/article/details/51494048
![微信圖片_20180703092352.jpg(https://upload-images.jianshu...