我們青鳥從事IT教育10多年,培訓(xùn)出6000+的IT人才,見(jiàn)了無(wú)數(shù)IT小白,他們想要學(xué)習(xí)IT,想要學(xué)web前端,但是找不到方法,找不到方向,覺(jué)得web前端好難學(xué),想要放棄了,其實(shí)web前端在我們青鳥導(dǎo)師眼力就好像1+1=2一樣簡(jiǎn)單,我們的青鳥老師就為想要學(xué)習(xí)web前端的學(xué)員們總結(jié)了一些“重點(diǎn)”,看了之后你就會(huì)撥開云霧見(jiàn)青天,直搗黃龍成大神了!
1. 理解瀏覽器/服務(wù)器結(jié)構(gòu) (B/S)B/S 是從 90年代的客戶端/服務(wù)器端發(fā)展而來(lái), 共同點(diǎn)都是由一個(gè)(或一組)服務(wù)器來(lái)服務(wù)多個(gè)客戶端。
差別在于:首先,C/S結(jié)構(gòu)的客戶端可能是由不同語(yǔ)言編寫的,例如VB,Delphi,PowerBuilder等, B/S結(jié)構(gòu)中瀏覽器成為了一個(gè)通用的客戶端, 程序以Web的方式呈現(xiàn),不需要安裝,服務(wù)器端的升級(jí)就意味著所有客戶端的升級(jí),這和C/S相比是個(gè)翻天覆地的變化。
其次B/S的訪問(wèn)協(xié)議也標(biāo)準(zhǔn)化為HTTP(s) ,而不是原來(lái)各種各樣的私有協(xié)議。
*B/S結(jié)構(gòu)中的服務(wù)器面向全球用戶訪問(wèn),而不像C/S那樣僅僅是局域網(wǎng),所以壓力更大, 挑戰(zhàn)更大。
2. Web頁(yè)面是怎么組成的?簡(jiǎn)單來(lái)說(shuō)就是HTML + CSS + Javascript , 我們看到的Web界面就是由這三者組成。
HTML負(fù)責(zé)結(jié)構(gòu), CSS負(fù)責(zé)展現(xiàn), 而Javascript負(fù)責(zé)行為。
我們說(shuō)的前端開發(fā)也主要是做這一塊, 對(duì)于前端工程師,需要能理解DOM 模型,以及如何通過(guò)javascript(例如JQuery等框架)來(lái)操作DOM模型。
3. 瀏覽器和服務(wù)器是怎么打交道的?當(dāng)然是HTTP ! HTTP說(shuō)穿了就是瀏覽器和服務(wù)器聊天是的一種約定,這個(gè)約定確保雙方互相理解。
完整的HTTP是非常復(fù)雜的,《HTTP權(quán)威指南》一書厚達(dá)700多頁(yè)。
其實(shí)我們最常用, 也是最重要的也就那么幾點(diǎn):
(1) GET 和 POST 。 GET從服務(wù)器端獲取數(shù)據(jù), POST 向服務(wù)器端發(fā)送數(shù)據(jù)(由此引出圖片上傳問(wèn)題)
(2) HTTP是個(gè)沒(méi)有狀態(tài)的協(xié)議,需要通過(guò)額外的機(jī)制來(lái)維持狀態(tài)(例如登錄狀態(tài)), 常用的方法就是cookie。
(3) 理解HTTP 狀態(tài)碼
(4) 理解 同步 vs 異步(由此引出AJAX,以及JQuery等框架)4. URL 和 代碼的映射理解url 和 代碼之間的關(guān)聯(lián)。
這樣的規(guī)則是在哪里定義的? 用代碼、注解還是配置文件?
后端的業(yè)務(wù)代碼該如何組織? 相信現(xiàn)在不會(huì)有人把業(yè)務(wù)邏輯都寫到Servlet當(dāng)中了, 所以需要很多MVC 框架像Struts , SpringMVC 來(lái)組織代碼,讓系統(tǒng)清晰易懂。
5. 數(shù)據(jù)的驗(yàn)證、轉(zhuǎn)換和綁定如何保證瀏覽器發(fā)過(guò)來(lái)的數(shù)據(jù)是符合要求的?
例如不能為空、不超過(guò)8個(gè)字符、兩個(gè)密碼必須相等.... , 出錯(cuò)了得給出錯(cuò)誤提示。
瀏覽器發(fā)過(guò)來(lái)的數(shù)據(jù)都是形如username=liuxin&password=123456這樣簡(jiǎn)單的文本,但是后臺(tái)程序卻有著豐富的數(shù)據(jù)類型,什么String, Date ,Integer等等。 所以需要把文本變成指定語(yǔ)言的類型。
類型轉(zhuǎn)換以后, 后端的業(yè)務(wù)代碼怎么才能有效的使用呢?
最簡(jiǎn)單的就是弄一個(gè)key : value 這個(gè)樣的Map 出來(lái),業(yè)務(wù)代碼直接用map.get(key) 即可。
高級(jí)一點(diǎn)的可以把頁(yè)面發(fā)來(lái)的數(shù)據(jù)直接綁定到對(duì)象的屬性上, 并且支持?jǐn)?shù)組,嵌套等復(fù)雜的結(jié)構(gòu)。
例如user.name=liuxin&user.password=123456 可以綁定到一個(gè)叫User的對(duì)象, 其中有兩個(gè)屬性u(píng)serName和password。
6. Web安全如何防止黑客利用SQL 注入,跨站腳本攻擊, 跨站請(qǐng)求偽造等手段來(lái)攻擊系統(tǒng)?
7. 數(shù)據(jù)庫(kù)訪問(wèn)這一塊是比較麻煩的,畢竟面向?qū)ο?OO)世界和關(guān)系(Relational)數(shù)據(jù)庫(kù)之間存在著天然的鴻溝。
對(duì)于簡(jiǎn)單的應(yīng)用, 直接寫點(diǎn)JDBC就夠用了,只需要掌握Connection,Statement , Resultset這三個(gè)基礎(chǔ)。
復(fù)雜點(diǎn)的需要用O/R Mapping 框架來(lái)搞定,例如Hibernate, MyBatis ,還有RoR的ActiveRecord。
這其中比較棘手的就是表之間的關(guān)聯(lián), 就是所謂的一對(duì)多, 一對(duì)一, 多對(duì)多這樣的關(guān)系,如何在面向?qū)ο蟮氖澜缋锩枋觥?
擴(kuò)展開去,還需要處理連接池, 事務(wù),鎖 等各種煩人問(wèn)題。
8. 用什么技術(shù)來(lái)生成Web頁(yè)面?這里說(shuō)的Web頁(yè)面就是第2點(diǎn)中的頁(yè)面,包括HTML, CSS, Javascript。
能不能直接用Servlet的PrintWriter 直接輸出HTML ? 當(dāng)然可以,只是以后就沒(méi)有人看懂了。
現(xiàn)在用來(lái)創(chuàng)建Web頁(yè)面的技術(shù)多如牛毛:例如 JSP,Velocity, Freemaker, Groovy 等等, 他們都有一個(gè)共同點(diǎn): 模板技術(shù)。
說(shuō)白了就是有一個(gè)HTML的模板, 里邊可以嵌入代碼, 這個(gè)模板在運(yùn)行時(shí)(例如在Tomcat當(dāng)中)就可以根據(jù)輸入的不同而生成不同內(nèi)容的Web界面了。
無(wú)論哪種模板,都需要面對(duì)一個(gè)重要問(wèn)題:如何展示從業(yè)務(wù)邏輯層發(fā)送來(lái)的數(shù)據(jù)? 這一步驟其實(shí)和第5步中的數(shù)據(jù)綁定有密切關(guān)系。因?yàn)檫@一步需要確定諸如user.name ,user.password這樣的字段名稱。
9. 如何把對(duì)象變成XML或者JSON字符串?由于AJAX以及手機(jī)端的存在,對(duì)于一個(gè)URL的請(qǐng)求, 他們要求的返回值通常不是HTML頁(yè)面, 而是XML或者JSON數(shù)據(jù),此時(shí)需要有框架把對(duì)象轉(zhuǎn)化成相應(yīng)的字符串。
搞定了Web這些基礎(chǔ)的東西,在公司里做一個(gè)Web程序員應(yīng)該不在話下了, 接下來(lái)需要學(xué)習(xí)的就是像高并發(fā),緩存,搜索,分布式等高級(jí)的內(nèi)容了。什么?你說(shuō)還是太難,你是小白完全看不懂?別擔(dān)心,來(lái)青鳥,青鳥專業(yè)導(dǎo)師面對(duì)面授課,別說(shuō)web前端,你想要成為IT界大神都不成問(wèn)題!選擇青鳥,你就是IT大神!