標籤:java技術 tomcat
Tomcat
引言:
開發語言如:PHP,可以用smarty架構。
另外最流行架構有mvc架構: data 資料
bussiness 業務
presentation 展示
而像這種能使用架構的語言,尤其適合開發web網站。
C語言相比PHP,首先,c語言與伺服器硬體以及OS關係非常緊密,很難使用架構,並且移植平台困難,而且代碼維護成本相當高。但正是由於硬體、系統緊密結合,所以開發出來程式運行速度相當快。如可開發驅動等等。
API:application programming interface(可以給程式調用API介面,調用系統庫檔案,有system call封裝出來)
ABI:applications binary interface(應用二進位介面)
一個程式為了開發快速,所以使用了作業系統提供的API。大家知道,一個程式要在系統上運行,需要編譯後才能運行,就是把開發的語言轉換成系統可以認識的二進位機器指令。那個在windows作業系統上編譯出來的程式使用的API肯定與Linux系統上開發出來使用的API是不一樣的。所以不同系統開發程式無法在另一個系統上運行。
作業系統運行平台windows,API ABI(.dll)、linux,API ABI(.so)
由此出現了:POSIX:portable operating system,可以跨平台編譯。
所以一個程式一般在一個系統內容編譯後是無法在另一個系統上啟動並執行,因為調用的動態庫,而且二進位格式(ABI)都不一樣。
所以為了跨平台運行,還需要抹合系統的動態庫及ABI。這時,JAVA就出現了。1995年,Java1.0由sun公司JamesGosling帶隊研究開發出。
JAVA的組件包含四個獨立卻又彼此相關的技術:
Java程式設計語言
Java API(Java為了快速開發提供的)
Java Class檔案格式(Java類檔案,bytecode位元組碼需要運行在JVM上)
JVM:Java Virtual Machine(用於解釋bytecode:位元組碼)
Java程式語言(.java)使用JavaCompiler編譯成Java類檔案(.class),然後運行在JVM上。並且JavaAPI調用到的庫檔案也需要裝載進庫檔案。
JVM的實現方式有如下三種:
1. 一次性解譯器,解釋位元組碼並執行
2. 即時編譯器(just-in-time complier),把編譯後的結果緩衝下來,所以依賴於更多記憶體緩衝解釋後的結果
3. 自適應編譯器(緩衝20%左右代碼)
所以這四種技術,Java語言是有sun公司開發並且開源了,而JAVAAPI的規範由於開源了,後來演變為由第三方組織定義的,JavaClass的格式規範還是由Sun公司的定義規範的,最後的JVM,sun公司和第三方組織都有提供。
SUN公司提供的JVM,總的叫做HotspotJVM,但具體軟體分為如下兩種:
JRE java:running環境。
JDK java:開發環境。
第三方提供的JVM是叫做OpenJDK:開源的開發加運行。
JDK可以理解為包含了java代碼+JavaAPI+JVM,這是用於實現Java開發的最小環境。JRE只有JVM和Java SE API
Java應用領域不同,Java可以分為三類:
Java SE Standard Edtion j2se
Java EE Enterprise Edition j2ee
Java ME Mobile Edition j2me
Java問世後,人們對動態網站需求越來越大,Java就引入了applet這個技術。這個東西只要HTML網頁開發人員加入applet這個小程式,使用者使用的瀏覽器裝有jre的外掛程式,就可以直接運行。使得動態網站得以實現。但這是用戶端動態網站實現方式。
隨後CGI技術就誕生了,CGI:common gateway interface 通用網關協議。
html,mime可以將其他格式全都轉換成文字格式設定。
隨後Java為了引入類似cgi的技術出現了servlet。servlet:簡單說以java語言cgi技術
Servlet技術出現,增加了Java對於http處理能力。但隨之又有一個問題產生,所有http請求,都必須轉成後端Java程式進行編譯運行,這樣一來,嚴重影響了Java的處理效能。而且Java程式員必須還要懂HTML,這樣Java返回使用者時的HTML格式才能正確。所以就必須使用架構,並且JSP就誕生了。
JSP:java server page,能夠嵌入HTML網頁的一種技術,為使用mvc架構打下了基礎。
SSH架構:Structs,Spring,Hebernate。
JSP ——> Servlet(通過Jasper)
Servlet Container Servlet容器
Web Container Web容器
總的來說就是對JVM的功能進行擴充。所以就是一個jvm instance,那麼100個請求怎麼實現平行處理?難道啟動100個JVM執行個體來實現嗎?一個JVM就是一個進程,但這個進程的建立與撤銷代價非常大,資源消耗很厲害,所以,JVM是通過啟動多個線程來實現平行處理的。這樣JVM運行時記憶體配置是非常複雜的。可以通過如下介紹進行理解。
運行時資料區域:
線程私人記憶體區:程式計數器
java虛擬機器桟
線程共用記憶體區:方法區
java堆(存放對象)(類-執行操作,對象-執行方法,對象都是同一類)
上述的東西都是存放在記憶體中的,當記憶體存滿後就會記憶體溢出,為了避免這個情況,Java會進行記憶體回收;Java定時自動記憶體回收,使用記憶體回收行程GC。
記憶體回收演算法:
1、標記清除(會產生片段)
2、複製
3、標記整理
記憶體回收行程:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old
CMS:Concurrent Mark Sweep 並行標記清除器
特點:並發收集,低停頓,但無法收集浮動垃圾
JDK安裝
oracle官網下載下來,jdk進行安裝。
安裝完成後配置環境變數:vim /etc/profile.d/java.sh;
【export JAVA_HOME=/usr/java/jdk1.6.0_21】
【export PATH=$PATH:$JAVA_HOME/bin 】
. /etc/profile.d/java.sh
JVM:啟動JVM虛擬機器,就是使用java這個程式。
java命令的配置參數:
-xx:+<option> : 開啟此參數指定的功能
-xx:-<option> : 關閉功能
-xx:<option>=<value> : 給option指定的選項賦值
java -xx:+PrintFlagsFinal 用於擷取配置參數協助!
類載入器:類運行需要到運行區進行運行,並且有可能要依賴其他的公用類或私人類,所以需要一個類載入器。
類的生命週期:[Loading-Verification-Preparation-Resolution-Initilization]-Using-Unloading
sun的jdk監控和故障處理工具
jps,JVM Process Status Tool:顯示指定系統內所有的HotSpot虛擬機器過程列表資訊
jstat,JVM Statistic Monitoring Tool:收集並顯示HotSpot虛擬機器各方面的運行資料
jinfo:顯示正在啟動並執行某HotSpot虛擬機器設定資訊
jmap:產生某HotSpot虛擬機器的記憶體轉儲快照
視覺化檢視:
jconsole: java的監控與管理主控台
jvisualvm:
Java EE APIS:EJB JMS JMX JTA JavaMail
Java SE APIS:JNDI JAXP
JAVA EE Application Servers:
Websphere Weblogic oc4j JBoss JOnAS Geronimo Glassflish
Tomcat各組件的關係
<Server>
<Service>
<Connector />
<Engine>
<Host>
<Context> </Context>
</Host>
</Engine>
</Service>
</Server>
<%@ page language="java" %>
<%@ page import="java.util." %>
<html>
<head>
<title>JSP test.page.</title>
</head>
<body>
<% out.println("Welcome to MageEdu. Site,http://www.magedu.com"); %>
</body>
</html>
Tomcat的conf/下
server.xml核心設定檔,tomcat-users.xml使用者權限管理檔案、web.xml 預設的應用程式部署描述符、context.xml上下文設定檔
本文出自 “Jeremy營運架構” 部落格,請務必保留此出處http://jeremybale.blog.51cto.com/3341343/1654788
Java技術簡介及Tomcat部署