姓名:攀ⅲ康 ?學(xué)號:17101223416
轉(zhuǎn)載自:https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513276&idx=1&sn=52e8206731e613c60d7ff3b5db9f958b&scene=38#wechat_redirect
【嵌牛導(dǎo)讀】:做了多年的Web編程脱盲,仔細(xì)想想闽烙, 其實(shí)本質(zhì)上就那點(diǎn)事兒, 你抓住了幾個重點(diǎn)問題捷泞, 學(xué)起來就不會太難足删。
【嵌牛鼻子】:Web編程
【嵌牛提問】:Web編程的實(shí)質(zhì)是什么?
【嵌牛正文】:
1. ?理解瀏覽器/服務(wù)器結(jié)構(gòu) (B/S)
B/S 是從 90年代的客戶端/服務(wù)器端發(fā)展而來锁右, 共同點(diǎn)都是由一個(或一組)服務(wù)器來服務(wù)多個客戶端失受。
差別在于:首先,C/S結(jié)構(gòu)的客戶端可能是由不同語言編寫的咏瑟,例如VB,Delphi, PowerBuilder等拂到, B/S結(jié)構(gòu)中瀏覽器成為了一個通用的客戶端, 程序以Web的方式呈現(xiàn)码泞,不需要安裝兄旬,服務(wù)器端的升級就意味著所有客戶端的升級,這和C/S相比是個翻天覆地的變化余寥。
其次B/S的訪問協(xié)議也標(biāo)準(zhǔn)化為HTTP(s) ?领铐,而不是原來各種各樣的私有協(xié)議。
最后B/S結(jié)構(gòu)中的服務(wù)器面向全球用戶訪問劈狐,而不像C/S那樣僅僅是局域網(wǎng)罐孝, 所以壓力更大呐馆, 挑戰(zhàn)更大肥缔。
2. Web頁面是怎么組成的?
簡單來說就是HTML + CSS + Javascript , ?我們看到的Web界面就是由這三者組成汹来。
HTML負(fù)責(zé)結(jié)構(gòu)续膳, CSS負(fù)責(zé)展現(xiàn)改艇, 而Javascript負(fù)責(zé)行為。
我們說的前端開發(fā)也主要是做這一塊坟岔, 對于前端工程師谒兄,需要能理解DOM 模型,以及如何通過javascript(例如JQuery等框架)來操作DOM模型社付。
3. 瀏覽器和服務(wù)器是怎么打交道的承疲?
當(dāng)然是HTTP ! ?HTTP說穿了就是瀏覽器和服務(wù)器聊天是的一種約定, 這個約定確保雙方互相理解鸥咖。
完整的HTTP是非常復(fù)雜的,《HTTP權(quán)威指南》一書厚達(dá)700多頁啊研。
其實(shí)我們最常用党远, 也是最重要的也就那么幾點(diǎn):
(1) GET 和 POST 富弦。 GET從服務(wù)器端獲取數(shù)據(jù), ?POST 向服務(wù)器端發(fā)送數(shù)據(jù)(由此引出圖片上傳問題)
(2)?HTTP是個沒有狀態(tài)的協(xié)議花沉,需要通過額外的機(jī)制來維持狀態(tài)(例如登錄狀態(tài))碱屁, 常用的方法就是cookie蛾找。
(3) 理解HTTP 狀態(tài)碼
(4) 理解?同步 vs 異步(由此引出AJAX打毛,以及JQuery等框架)
4. URL 和?代碼的映射
理解url 和 代碼之間的關(guān)聯(lián), 例如?www.xxx.com?action=login ?這樣的url 是怎么和后端的業(yè)務(wù)代碼關(guān)聯(lián)起來的碰声?
這樣的規(guī)則是在哪里定義的胰挑? 用代碼、注解還是配置文件瞻颂?
后端的業(yè)務(wù)代碼該如何組織? 相信現(xiàn)在不會有人把業(yè)務(wù)邏輯都寫到Servlet當(dāng)中了茬末, ?所以需要很多MVC 框架像Struts , SpringMVC 來組織代碼盖矫,讓系統(tǒng)清晰易懂。
5. 數(shù)據(jù)的驗(yàn)證吐根、轉(zhuǎn)換和綁定
如何保證瀏覽器發(fā)過來的數(shù)據(jù)是符合要求的辐马?
例如不能為空、不超過8個字符冗疮、兩個密碼必須相等.... ?檩帐, 出錯了得給出錯誤提示湃密。
瀏覽器發(fā)過來的數(shù)據(jù)都是形如username=liuxin&password=123456這樣簡單的文本泛源, 但是后臺程序卻有著豐富的數(shù)據(jù)類型,什么String, Date ,Integer等等没龙。所以需要把文本變成指定語言的類型硬纤。
類型轉(zhuǎn)換以后赃磨, 后端的業(yè)務(wù)代碼怎么才能有效的使用呢?
最簡單的就是弄一個key : value 這個樣的Map 出來邻辉, 業(yè)務(wù)代碼直接用map.get(key) 即可。
高級一點(diǎn)的可以把頁面發(fā)來的數(shù)據(jù)直接綁定到對象的屬性上, 并且支持?jǐn)?shù)組,嵌套等復(fù)雜的結(jié)構(gòu)搅裙。
例如user.name=liuxin&user.password=123456 ?可以綁定到一個叫User的對象部逮, 其中有兩個屬性userName和password娜汁。
6. Web安全
如何防止黑客利用SQL 注入兄朋,跨站腳本攻擊掐禁, 跨站請求偽造等手段來攻擊系統(tǒng)?
7. 數(shù)據(jù)庫訪問
這一塊是比較麻煩的傅事, 畢竟面向?qū)ο?OO)世界和關(guān)系(Relational)數(shù)據(jù)庫之間存在著天然的鴻溝。
對于簡單的應(yīng)用峡扩, 直接寫點(diǎn)JDBC就夠用了,只需要掌握Connection, Statement , Resultset這三個基礎(chǔ)教届。
復(fù)雜點(diǎn)的需要用O/R Mapping 框架來搞定响鹃,例如 Hibernate, MyBatis ?,還有RoR的ActiveRecord案训。
這其中比較棘手的就是表之間的關(guān)聯(lián)买置, 就是所謂的一對多强霎, 一對一, 多對多這樣的關(guān)系倦卖, 如何在面向?qū)ο蟮氖澜缋锩枋觥?/p>
擴(kuò)展開去椿争,還需要處理連接池秦踪, 事務(wù)褐捻,鎖 等各種煩人問題昧狮。
8. 用什么技術(shù)來生成Web頁面?
這里說的Web頁面就是第2點(diǎn)中的頁面板壮,包括HTML, CSS, Javascript逗鸣。
能不能直接用Servlet的PrintWriter 直接輸出HTML ? 當(dāng)然可以,只是以后就沒有人看懂了绰精。
現(xiàn)在用來創(chuàng)建Web頁面的技術(shù)多如牛毛:例如 JSP, Velocity, Freemaker, Groovy 等等撒璧, 他們都有一個共同點(diǎn):模板技術(shù)。
說白了就是有一個HTML的模板笨使, 里邊可以嵌入代碼卿樱, 這個模板在運(yùn)行時(例如在Tomcat當(dāng)中)就可以根據(jù)輸入的不同而生成不同內(nèi)容的Web界面了。
無論哪種模板硫椰,都需要面對一個重要問題:如何展示從業(yè)務(wù)邏輯層發(fā)送來的數(shù)據(jù)繁调? ?這一步驟其實(shí)和第5步中的數(shù)據(jù)綁定有密切關(guān)系。因?yàn)檫@一步需要確定諸如user.name ?, user.password這樣的字段名稱靶草。
9. 如何把對象變成XML或者JSON字符串涉馁?
由于AJAX以及手機(jī)端的存在,對于一個URL的請求爱致, 他們要求的返回值通常不是HTML頁面烤送, 而是XML或者JSON數(shù)據(jù), 此時需要有框架把對象轉(zhuǎn)化成相應(yīng)的字符串糠悯。
搞定了Web這些基礎(chǔ)的東西帮坚,在公司里做一個Web程序員應(yīng)該不在話下了, 接下來需要學(xué)習(xí)的就是像高并發(fā)互艾,緩存试和,搜索,分布式等高級的內(nèi)容了纫普。