搞懂了這幾點,你就學會了Web程式設計

碼農翻身 mp發表於2016-08-17

做了那麼多年Web程式設計,仔細想想,其實本質上就那點事兒,你抓住了幾個重點問題,學起來一點都不難。

1.理解瀏覽器/伺服器結構(B/S)

B/S是從90年代的客戶端/伺服器端發展而來,共同點都是由一個(或一組)伺服器來服務多個客戶端。

差別在於:首先,C/S結構的客戶端可能是由不同語言編寫的,例如VB,Delphi,PowerBuilder等,B/S結構中瀏覽器成為了一個通用的客戶端,程式以Web的方式呈現,不需要安裝,伺服器端的升級就意味著所有客戶端的升級,這和C/S相比是個翻天覆地的變化。

其次B/S的訪問協議也標準化為HTTP(s),而不是原來各種各樣的私有協議。

最後B/S結構中的伺服器面向全球使用者訪問,而不像C/S那樣僅僅是區域網,所以壓力更大,挑戰更大。

2.Web頁面是怎麼組成的?

簡單來說就是HTML+CSS+Javascript,我們看到的Web介面就是由這三者組成。

HTML負責結構,CSS負責展現,而Javascript負責行為。

我們說的前端開發也主要是做這一塊,對於前端工程師,需要能理解DOM模型,以及如何通過javascript(例如JQuery等框架)來操作DOM模型。

3.瀏覽器和伺服器是怎麼打交道的?

當然是HTTP!HTTP說穿了就是瀏覽器和伺服器聊天是的一種約定,這個約定確保雙方互相理解。

完整的HTTP是非常複雜的,《HTTP權威指南》一書厚達700多頁。

其實我們最常用,也是最重要的也就那麼幾點:

(1)GET和POST。GET從伺服器端獲取資料,POST向伺服器端傳送資料(由此引出圖片上傳問題)

(2)HTTP是個沒有狀態的協議,需要通過額外的機制來維持狀態(例如登入狀態),常用的方法就是cookie。

(3)理解HTTP狀態碼

(4)理解同步vs非同步(由此引出AJAX,以及JQuery等框架)

4.URL和程式碼的對映

理解url和程式碼之間的關聯,例如www.xxx.com?action=login這樣的url是怎麼和後端的業務程式碼關聯起來的?

這樣的規則是在哪裡定義的?用程式碼、註解還是配置檔案?

後端的業務程式碼該如何組織?相信現在不會有人把業務邏輯都寫到Servlet當中了,所以需要很多MVC框架像Struts,SpringMVC來組織程式碼,讓系統清晰易懂。

5.資料的驗證、轉換和繫結

如何保證瀏覽器發過來的資料是符合要求的?

例如不能為空、不超過8個字元、兩個密碼必須相等….,出錯了得給出錯誤提示。

瀏覽器發過來的資料都是形如username=liuxin&password=123456這樣簡單的文字,但是後臺程式卻有著豐富的資料型別,什麼String,Date,Integer等等。所以需要把文字變成指定語言的型別。

型別轉換以後,後端的業務程式碼怎麼才能有效的使用呢?

最簡單的就是弄一個key:value這個樣的Map出來,業務程式碼直接用map.get(key)即可。

高階一點的可以把頁面發來的資料直接繫結到物件的屬性上,並且支援陣列,巢狀等複雜的結構。

例如user.name=liuxin&user.password=123456可以繫結到一個叫User的物件,其中有兩個屬性userName和password。

6.Web安全

如何防止黑客利用SQL隱碼攻擊,跨站指令碼攻擊,跨站請求偽造等手段來攻擊系統?

7.資料庫訪問

這一塊是比較麻煩的,畢竟物件導向(OO)世界和關係(Relational)資料庫之間存在著天然的鴻溝。

對於簡單的應用,直接寫點JDBC就夠用了,只需要掌握Connection,Statement,Resultset這三個基礎。

複雜點的需要用O/RMapping框架來搞定,例如Hibernate,MyBatis,還有RoR的ActiveRecord。

這其中比較棘手的就是表之間的關聯,就是所謂的一對多,一對一,多對多這樣的關係,如何在物件導向的世界裡描述。

擴充套件開去,還需要處理連線池,事務,鎖等各種煩人問題。

8.用什麼技術來生成Web頁面?

這裡說的Web頁面就是第2點中的頁面,包括HTML,CSS,Javascript。

能不能直接用Servlet的PrintWriter直接輸出HTML?當然可以,只是以後就沒有人看懂了。

現在用來建立Web頁面的技術多如牛毛:例如JSP,Velocity,Freemaker,Groovy等等,他們都有一個共同點:模板技術。

說白了就是有一個HTML的模板,裡邊可以嵌入程式碼,這個模板在執行時(例如在Tomcat當中)就可以根據輸入的不同而生成不同內容的Web介面了。

無論哪種模板,都需要面對一個重要問題:如何展示從業務邏輯層傳送來的資料?這一步驟其實和第5步中的資料繫結有密切關係。因為這一步需要確定諸如user.name,user.password這樣的欄位名稱。

9.如何把物件變成XML或者JSON字串?

由於AJAX以及手機端的存在,對於一個URL的請求,他們要求的返回值通常不是HTML頁面,而是XML或者JSON資料,此時需要有框架把物件轉化成相應的字串。

搞定了Web這些基礎的東西,在公司裡做一個Web程式設計師應該不在話下了,接下來需要學習的就是像高併發,快取,搜尋,分散式等高階的內容了。

相關文章