全端Web開發 使用JavaScript與Java 閱讀筆記

全端Web開發 使用JavaScript與Java 閱讀筆記
計算機科學領域只有兩大難題:緩存失效和命名。
REST(Representational State Transfer)技術,他建議一種Web服務消息傳遞的風格。

第一章:因變而變
企業家總在尋求變化,他們適應變化,並把它當作一種機遇。
J2EE和JSP經過完善變成了JEE和JSF。
現代的客戶端-服務器架構裏,服務器更大程度上負責相應客戶端的請求,提供資源的訪問方式(通常使用XML 和JSON交換信息)。在過去的服務器驅動模型中,頁面(和與之相關的數據)都在服務器端生成完畢,一起返回客戶端在瀏覽器裏面渲染。而在客戶端-服務器架構中,服務器先返回一個包含少量數據的初始頁面。用戶和頁面驚醒交互時,頁面向服務器發起異步請求,服務器則返回消息,以便頁面刷新來響應這些事件。
!Java Server Faces(JSF)是一種基於XML的模板系統和組件框架,導航實行集中化配置;
!Google Web Tookit 是另一種組件化框架,他發揮了Java程序猿的長處,集中精力編寫Java,而不用關心HTML/CSS/和JS
瀏覽器的創新也促成了責任從服務器想向客戶端轉移。微軟開發了Ajax(asynchronous Javascript and XML)對各種WEB頁面和服務器進行通信的頁面都適用。
但是WEB的本質沒有發生變化(還是基於HTTP進行消息傳遞的客戶端-服務器端架構)
C-S的WEB應用的優點
1.按照代碼邏輯解耦,增強了原有結構和後續支持系統的內聚性。將客戶端和服務器端分層,可以讓代碼變得可管理,模塊化。另外,數據和顯示標記能更清晰的分離。可以使用JSON而不是內嵌的方式發佈數據。
2.“設計的靈活性”與“使用開源API”
3.原型
4.開發者效率:工作更容易劃分,這時唯一的限制就是原來的接口保持可用。
5.應用性能:頁面的感知性能對用戶的體驗影響較大。更快的JS引擎能使客戶端可執行計算密集型操作,從而將服務器的壓力負荷轉移到客戶端。Ajax技術能夠按需請求較少的數據,這避免了對整個頁面的頻繁刷新。


第二章:JS和JS工具
核心JS語言需結合兩個不同API進行理解:瀏覽器對象模型(BOM)和文檔對象模型(DOM)
JS受到了Perl的直接影響:“不止一種方式去做一件事情”也受到了schema的極大影響。
JS可以在函數中定義其他函數,內部函數可以訪問外部函數的變量。一個函數返回一個內部函數時,就形成了閉包。返回的對象既然包含了函數本身,也包含了創建函數時的環境:
function outer(){
    var val = "I am in outer space";
    function inner(){
        return val;
    }
    return inner;
}

var alien = outer();
console.log(alien());

第三章:REST和JSON
REST是一種架構風格,它有一系列約束組成,描述了WEB應該如何工作。
什麼是REST
表述性狀態轉移(REST)架構是爲了建模描述現代WEB如何工作開發的。
資源:REST使用web地址(URI)訪問資源,使用動詞(HTTP請求)操作資源。
動詞:HTTP請求定義了一組動詞,來表示對於資源的行爲。
統一資源標識符:可進一步劃分爲:統一資源名(URN)和統一資源定位符(URL)
REST約束:
1.客戶端-服務器端
2.無狀態:REST要求無狀態的設計,會話數據保存在客戶端
3.可緩存,無狀態的性能問題可以通過緩存來彌補。REST要求給數據打標籤,標明其是否可被緩存。
4.統一接口
5.分層
6.按需交付代碼

JSON:(JavaScript object Notation)
JSON相比XML的優點:
相應體更小,JSON與WEB的互通性更強。JSON是JS的子集,這使客戶端集成變得簡單。調用Ajax變得簡單。
缺點:
JSON不完全是合法的。
JSON中無法添加註釋。
eval()方法是危險的。
HATEOAS:JSON是一種非常簡單緊湊的格式。和其他爲表示數據提供複雜類型的系統不同,JSON只提供有限幾種數據類型。JSON中沒有類型表示超鏈接,特別是REST包含一種超媒體作爲應用狀態引擎(hypermedia  as the engine of Application state,HATEOAS)

第四章:Java工具
Maven強制程序員遵循標準和規範,這樣做節省了資源,讓靈活性得以存在於大的團隊中。
Maven在猶太語中是“只是淵博的人”,它用來組織項目,並且定義軟件開發流程(軟件項目管理和理解的工具),他簡化了構建流程,提供比創建項目的統一系統(通過聲明項目依賴的方式)。他的報告和文檔功能負責生產和集中管理所有項目相關的技術產出。

第五章:客戶端框架
起點1:響應式WEB設計(Responsive Web Design)
-流體網格(Fluid grid)
-彈性圖片(Flexible image)
-CSS媒體查詢(CSS media query)
起點2:JS庫和框架
從Github下載

第六章:Java Web API服務器
將可重用的組件打包這一點讓擴展編程語言的能力成爲可能。對於一門特定的語言,打包會影響到部署方式。打包需要考慮標準命名規範、元數據文件、數字簽名、代碼混淆、代碼管理、包含相關的文件/資源,以及壓縮機制。
打包會影響到部署。一門語言提供的部署選項能左右一個項目的結構和開發流程,Java尤其如此。Java源文件中名字反映了其包含的公有類的名字;Java的包結構遵循文件系統的目錄結構。Java使用了多個不同類型的包格式。一般的代碼被打包到Java歸檔文件(JAR),web應用文件被打包到WEB應用歸檔文件(WAR),一組相關的WEB應用被打包到企業級應用歸檔文件(EAR)。WAR可以被部署到哦啊servlet容器中,而EAR需要完整的企業級Java的支持,必須有類似JBoss這樣的應用服務器。
基於Java的服務器:
1:Java HTTP 服務器
2:Jetty嵌入式服務器
3:Restlet
4:Roo
5:Netty 嵌入式服務器
6:Play服務器
基於JVM的服務器
Jython
如果已經安裝好Python,是使用下述命令啓動一個web服務器共享當前目錄下文件:
$ python -m SimpleHTTPServer 8000
Jython是Python在JVM上的實現
WEB應用服務器:
比如Tomcat,Tomcat 是一個Servlet容器,因此任何的WEB應用都可以部署在一個WAR包中在其中運行。包含一組WAR包的項目需要被打包成爲EAR(或者單獨的WAR包需要某些JEE服務),此時就需要一個完整的JEE應用服務器,比如JBoss。

第七章:快速開發實踐
優化開發者和團隊的工作流程
迭代是一種向着最終目標邁進、不斷循環的過程。項目的美一部分都被分解成任務,經過多次迭代開發完成。這種方式適合軟件開發的方方面面,包括需求手機、設計、開發、測試和部署。
迭代需要以一種可見成果作爲終結。迭代完成的結果需要和上一個狀態,以及最終希望的結果進行做比較。從這個意義上講,可以將迭代看作一種反饋循環,以行動爲開始,一可衡量的響應結束。
短週期的迭代能獲得更多的反饋。循環的週期越短,越能及時得到反饋,效果就越好。
Boyd迭代定律:在應對複雜分析時,快速迭代幾乎總是優於深入分析。

第八章:API設計
解決問題有兩種基本方式:由全面的理論開始逐漸深入細節,或者從一個細節開始逐步發展出一套與之相應的理論。
設計的起點:
客戶端-服務器模式設涉及的一種具體的設計方法是:通過開發RESTful風格的Web API來將數據傳輸到客戶端視圖並且避免在服務器端做視圖的渲染。這樣帶來的一個問題是:如何以一致、可支持的方式來設計最好的Web API。這種類型的設計決策常常引發許多觀點,但是總是會在一點達成明確的共識:受REST影響的Web API不應該受到有爭議或者不切實際的約束的嚴格限制。

第九章:jQuery和Jython
有些觀點認爲jQuery更像是一種內部的DSL(內部領域專用語言),這種觀點認爲jQuery聚焦於DOM操作,Ajax處理和其他通用的JS任務的小型語言。
服務器端:Jython
Python通常使用比Java更少的代碼完成相同的工作。
Jython是一個運行在JVM上的Python實現。這使得能在安裝了Java的環境上創建清晰簡潔的Python代碼。Jython同樣可以和Java對象交互,他引入了一系列嵌入Jython或與Java庫連結的能力。
Python Web服務器
作爲一種腳本語言,Python同樣也能以Java開發人員不熟悉的方式使用。例如運行一個簡單的靜態Web服務器,他不用編寫一行原始代碼,就可以在任何目錄提供文件服務。你可以簡單切換到一個文件目錄,然後調用如下命令:
python -m simpleHTTPServer
Jython web 服務器
使用上面的SimpleHTTPServer創建基於Web服務器只需要幾行代碼:
import SimpleHTTPServer
import SocketServer
import os

os.chdir('src/main/resources')
httpd = SocketServer.TCPServer("",8000),
SimpleHTTPServer.SimpleHTTPRequestHandler)
print "sering at port 8000"
Httpd.serve_forever()

Jython 可以從命令行調用也可以嵌入Java應用中。例如這個Java類中調用的腳本:
Package com.oreilly.jython;

import java.io.File;
import java.io.IOException;
import org.python.util.PythonInterpreter;
import org.apache.commons.io.FileUtils;

public class Server
{
    public static void main()
    {
        new PythonInterpreter().exec(
                FileUtils.readFileToString(
                        new File("python/http_server.py")
                        )
                );
    }
/* 項目及其依賴可以在 Github
 * (https://github.com/java-javascript/client-server-web-apps/tree/master/
 * Chapter-9-jQuery-and-Jython/jython-json-REST/rest-json)上獲得。
 * 可以使用mvn clean install構建,使用mvn exec:java運行
 */

客戶端:jQuery
其追求消除重複工作,令模糊、繁瑣的JavaScript變得清晰、簡介。
在初次邂逅jQuery時,代碼中出現的美元符號令人驚訝。這是因爲$代表了jQuery對象在庫中的命名空間。
Ajax
jQuery將XMLHttpRequest瀏覽器對象封裝得更簡單醫用,在不同瀏覽器下表現一致。jQUery.ajax是一個通用的Ajax請求器可以簡單方便地應用於HTTP  GET 和POST方法。由於在Ajax應用中JSON通訊的普及,它提供了getJSON方法,同手還提供通過JSONP來創建調用的能力。

第十章:JRuby和Angular
服務器端:JRuby和Sinatra
使用Ruby和一個名爲Sinatra的微型框架可以創建簡單、動態的網絡API。Sinatra實質上就是應基於Ruby的HTTP包裝器。
客戶端:AngularJS(簡稱:Angular)是MV*JS框架
jQuery和AngularJS:AngularJS兼容jQuery。
如果沒有用到jQuery,AngularJS會使用內置的jQuery子集。

第十一章:打包和部署
打包Java和JEE應用
Java歸檔(JAR)文件用來將Java類和資源文件打包成單個歸檔文件。JAR文件使用ZIP格式壓縮,並且包含一個路徑名爲:META-INF/MANIFEST.MF的Manifest資源配置文件。可以使用JDK提供的jar實用工具(http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/jar.html)來生成JAR文件。簡單來說,JAR文件就是一個.ZIP文件,只不過在META-INF目錄下包含了一些額外的描述信息。
JAR並不專屬與JEE,他是標準的JDK的一部分,其規範(http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#JAR Manifest)可以在JDK文檔中找到。JEE描述了JAR文件的幾種使用方式。JEE應用客戶端模塊和EJB模塊被打包成JAR文件。JEE的其他打包格式也基於JAR。根據功能和內容不同,JEE其他歸檔文件其實也是JAR文件,知識文件後綴名不同而已。可以手動構建JEE歸檔文件,但是一般使用諸如:Ant、Maven或者Gradle這樣的構建工具。

Web模塊是JEE中最小的部署單元,該模塊包含Web組件和資源文件,主要是靜態內容。Web模塊可以被打包成一個Web歸檔文件,或稱WAR。WAR文件有一個/WEB-INF目錄,該目錄下有一個web.xml文件,它定義了Web應用的結構和對歸檔文件中其他資源的應用,WAR文件極其靈活,可以被部署到只支持很小一部分JEE規範規範的Web容器中。
常用的Web容器有Tomcat和Jetty。各個容器都有自己不同的特性。

企業級歸檔文件(EAR文件),包含了WAR、JAR和一個application.xml文件,該文件引用了包含的模塊,定義了安全角色,爲企業機應用而產生,必須部署在應用服務器中。和Web容器相比,應用服務器支持更多的JEER規範。EAR文件不能再Web容器內運行,他需要EJB支持和一些其他服務。應用服務器有JBoss,WebSphere、WebLogic Server
JEE的部署:
[ {(Web應用) 應用服務器} 服務器]
JEE中的角色描述了參與開發流程的人的分工,包括部署者和系統管理員。部署者負責在運行環境中配置應用、驗證模塊是否遵循JEE規範,以及在一臺或者多臺服務器上安裝應用模塊。
非JEE應用的部署:
服務器在應用之外
當需要將應用部署至已運行應用服務器的內部系統中,或者希望將多個Web應用和JEE包打包進一個應用時。
服務器和應用並行
不事先安裝應用服務器的情況下
服務器在應用裏面,在應用代碼裏包含一個Java服務器庫。服務器在Web應用裏面運行。
發佈時僅需要創建和部署一個可執行JAR包。

第十二章:虛擬化
虛擬機的現實:VMWare、VirtualBox、Amazon EC2
虛擬機的管理:Vagrant、Packer、DevOps配置管理
容器:
LXC:LinuX Container(LXC)虛擬化可用於Linux系統,允許一臺服務器上運行多個彼此獨立的容器。
Docker:擴展了LXC,提供了更高級別的API。和其他容器技術類似,Docker試圖簡化應用的打包和部署,爲終端用戶創建彼此獨立的私有環境。
用Docker術語來說,運行的容器基於鏡像。對於給定的容器,其文件系統狀態和退出值被保存下來,但是保存的不是內存狀態。容器可以被啓動、停止和重啓。容器也可以通過Docker的commit命令導出爲一個鏡像,這個鏡像隨後可以被用作新容器的藍本。
Docker中的鏡像可以有父鏡像,但基礎鏡像沒有父鏡像。
第十三章:測試和文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章