java技術體系基礎
1、系統級:C, C++, go, erlang
2、應用級:C#, Java, Python, Perl, Ruby, php
編程語言的類別:
指令+數據
1、面向過程:以指令為中心,圍繞指令組織數據;
2、面向對象:以數據為中心,圍繞數據組織指令;
虛擬機類型:
1、java虛擬機:jvm
2、Python虛擬機: pvm
開發動態網站的應用框架:
1、asp .net, jsp
思考與引申:
1、如果需要在不同的平臺上都能使用開發好的java程序,需要在不同的平臺上都安裝java虛擬機,用以提供java運行的環境。虛擬機虛擬了主機運行時需要的各種庫,java需要自己的類庫,在這個類庫的環境中運行自己的程序。這個虛擬機系統在不同平臺有不同的版本。
2、如果在其中一種平臺上的庫所提供的API遵循POSIX規範的話,那麽在這個平臺上開發的源代碼,拿到不同的平臺上也是可以編譯運行的。如果在A平臺編譯成二進制程序後,拿到B平臺上是不能運行的,因為它們的ABI不一樣。
動態網站:
客戶端動態:服務器的源代碼在客戶端運行
服務器動態:服務器的源代碼在服務器端運行,通過CGI(通用網關接口)技術實現。
釋義:CGI
運行在前段的web服務器收到來自客戶端的請求後,把請求的uri發送給後端的應用程序服務器,調用應用程序服務器在服務器端 運行以後,把生成的結果返還給客戶端,這種技術稱之為CGI技術。
webapp server:
jsp: tomcat, jboss, jetty
註:tomcat服務可以和前端的html服務器進行交互,交互成可以使用http協議或專用的CGI協議。
php: php-fpm
Java編程語言的歷史發展:
SUN, James Gosling, Green Project, Oak, Java, SunWorld
1995: Java 1.0, Write Once, Run Anywhere 註:一次編寫,到處運行
1996: JDK (Java Development Kit),包含一個JVM(Sun Classic VM)
JDK 1.0: JVM, Applet, AWT
1997:JDK 1.1 註:JDK java開發工具箱
JAR文檔格式、JDBC、JavaBeans
1998:JDK 1.2
Sun把Java技術分拆為三個方向:Java 2
J2SE: Standard Edition
J2EE:Enterprise Edition
J2ME:Mobile Edition
代表性技術:EJB, Java Plug-in, Swing,
JIT編譯器: Just In Time,即時編譯器
2000:JDK 1.3
1999:HotSpot虛擬機 註:java虛擬機技術,起初由sun公司收購所得
2002:JDK 1.4
2006年,Sun開源了Java技術;遵循GPL規範;並建立了OpenJDK組織管理此些代碼;
虛擬機:JRockit, HostSpot;
Java體系結構:
Java編程語言; 註:編寫java程序的源代碼
Java Class文件格式; 註:編譯的中間代碼為字解碼,只能在java虛擬機上運行
Java API; 註:在運行時調用java API中的代碼所實現的功能
Java VM; 註: java API + java VM 被成為java平臺
JVM的核心組成部分:
Class Loader 註:類加載器,加載已經編譯好的類文件和其它所依賴的類文件
執行引擎 註:執行引擎是使用C語言研發的,最終java還是要用到標準c庫和系統調用。
思考與引申:其實java虛擬機只是一個中間層,它最終還是需要通過執行引擎在本地平臺上執行,所以java的API只是一個翻譯官。
Java編程語言的特性:
面向對象、多線程、結構化錯誤處理
垃圾收集、動態鏈接、動態擴展
三個技術流派:
J2SE ==> Java 2 SE
J2EE ==> Java 2 EE
J2ME ==> Java 2 ME
JAVA虛擬機執行java程序的過程
JVM運行時區域:運行為多個線程
方法區:線程共享;用於存儲被虛擬加載的類信息、常量、靜態變量等;永久代;
堆:Java堆是jvm所管理的內存中最大的一部分;也是GC管理的主要區域,主流的算法都基於分代收集方式進行:新生代和老年代;線程共享
Java棧:線程私有,存放線程自己的局部變量等信息;每個線程都有自己的棧,存取局部變量等信息
PC寄存器(Program Counter Register),線程獨占的內存空間;註:也稱為程序計數器,執行字解碼的行號的解釋器
本地方法棧:
JAVA 2 EE 虛擬機技術包含的子技術:
JAVA 2 SE
Servlet, JSP, EJB, JMS, JMX, JavaMail 註:這些都是專用的類
Servlet Contaier:註:擁有了jsp和servlet這兩個組件,我們稱之為servlet container
html標簽要硬編碼在應用程序中;
JSP:註:可以理解為是Servlet的前段程序,jsp能把以下內容轉化為Servlet格式
<html>
<body>
<h1>...</h1>
<%
%> 註:java代碼放在兩個%之間
,
</body>
</html>
小結:JSP是java中的一個特殊類庫,默認並沒有被JDK包含,JDK只提供了JAVA 2 SE的標準實現,如果我們想以網頁方式進行運行,我們必須保證JAVA代碼能夠輸出html標簽,為了便於這些開發,sun公司專門提供了一個規範,叫Servlet規範,基於這種規範,應用程序可以以http或CGI格式的方式來接受用戶的請求,以通用的cgi或者http協議能理解用戶的http請求,能分析請求,並且能夠把用戶的請求在本地調用JDK處理以後,構建cgi或http的響應報文,響應給客戶端,這種技術就是Servlet技術。html需要內嵌java代碼,這就是jsp技術。
jsp工作在servlet的前段,接受用戶請求,它可以把請求翻譯成Servlet格式,
Web Container:同時提供JDK, Servlet, JSP
Web Container的實現:
商業實現:
WebSphere(IBM)
WebLogic (BEA --> Oracle)
Oc4j
Glassfish
Geronimo
JOnAS
JBoss
開源實現:
Tomcat
jetty
resin
java技術體系基礎