锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎴戠殑瑙?br>
interface IntStack
{
int pop();
void push(int i);
int get();
}
class MinStack
{
//store all the element
private IntStack elemStack = new IntStack();
//store current and historical smallest element
private IntStack minStack = new IntStack();
public void push(int i)
{
elemStack.push(i);
int currentMin = minStack.get();
if(i <= currentMin) minStack.push(i);
}
public int pop()
{
int result = elemStack.pop();
if(result == minStack.get()) minStack.pop();
return result;
}
public int getMinElem()
{
return minStack.get();
}
}
]]>
eg 6
/ \
4 8
/ \ / \
3 5 7 9
3=4=5=6=7=8=9
鎴戠殑瑙?
goto
are reserved, even though they are not
currently used.
true
, false
, and null
might seem like keywords, but they are actually literals; you cannot
use them as identifiers in your programs.
abstract |
continue |
for |
new |
switch |
assert *** |
default |
goto * |
package |
synchronized |
boolean |
do |
if |
private |
this |
break |
double |
implements |
protected |
throw |
byte |
else |
import |
public |
throws |
case |
enum **** |
instanceof |
return |
transient |
catch |
extends |
int |
short |
try |
char |
final |
interface |
static |
void |
class |
finally |
long |
strictfp ** |
volatile |
const * |
float |
native |
super |
while |
鎵鏈夊拰cluster銆?/span>realm鐩稿叧閮芥斁鍦ㄦ渶鍚庢潵鐮旂┒浜嗭紝涓嶇鎬庝箞鏍峰厛鎶?/span>tomcat濡備綍澶勭悊request鐨勬暣涓繃紼嬩覆璧鋒潵瀵圭幇鍦ㄧ殑鎴戞潵璇存槸鏈閲嶈鐨勩傚彟澶栬繕鏈?/span>Tomcat涓殑寰堝閮ㄤ歡閮界敤鍒頒簡JMX API錛屽嵆SNMP鐨?/span>Java瀹炵幇鏉ヨ繘琛屾ц兘媯嫻嬪拰綆$悊錛岃繖涓篃浼氭斁鍦ㄦ渶鍚庣爺絀躲?/span>
ContainerBase灝辯湅榪欎箞澶氫簡錛屼笅闈㈡潵鐪嬬湅StandardEngine榪欎釜綾匯傞櫎鍘誨拰cluster銆?/span>realm銆?/span>JMX鐩稿叧鐨勬柟娉曞悗錛?/span>StanderdEngine鍓╀笅鐨勬柟娉曞氨寰堝緢灝戜簡銆?/span>
StandardEngine鏈変竴涓?/span>Service綾誨瀷鐨勬垚鍛樸?/span>Java doc涓寚鍑?/span>Service灝辨槸鐢卞緢澶氬叡浜悓涓涓?/span>Container鐨?/span>Connector緇勬垚銆備竴涓?/span>Service瀵瑰簲浜庝竴涓?/span>Container錛屾潵鑷繖涓?/span>Service鐨勪換浣曚竴涓?/span>Connector鐨?/span>request閮戒細鐢卞叾瀵瑰簲鐨?/span>Container榪涜澶勭悊銆傜湅鍒扮幇鍦ㄧ殑鎰熻灝辨槸Connector瀵?/span>Container鎻愪緵request瀵硅薄錛屽茍鎺ュ彈Container榪斿洖鐨?/span>response瀵硅薄銆傚湪Tomcat涓湁寰堝綾誨埆閮借鐢ㄦ潵浣撶幇鐜?/span>request鎴栬?/span>response錛屼緥濡?/span>org.apache.catalina.connector .Request灝辨槸Coyote request鐨勪竴涓?/span>wrapper綾伙紝Coyote榪欎釜framework甯姪灝佽浜嗗簳灞傜殑緗戠粶澶嶆潅鎬э紝鍚戜笂鎻愪緵涓涓粺涓鐨勬帴鍙c傛垜鎯?/span>tomcat鏃㈣兘澶熸垚涓轟竴涓?/span>standalone鐨?/span>http銆?/span>jsp/Servlet鏈嶅姟鍣紝涔熻兘澶熷悓apache http server闆嗘垚錛屽緢鍙兘灝辨槸渚濊禆浜?/span>Coyote鎻愪緵鐨勭粺涓鎺ュ彛銆?/span>
鍦ㄦ瀯閫犲嚱鏁頒腑浼氬皢StandardEngine榪欎釜Pipeline鐨勬渶鍚庝竴涓?/span>Valve錛屽嵆Basic璁劇疆涓?/span>StandardEngineValve銆傛潵鐪嬬湅StandardEnginValue鐨?/span>invoke鏂規硶鍙互鐪嬪嚭鍦ㄥ鐞嗗埌StandardEngine榪欎釜Pipeline鐨勬渶鍚庝竴涓?/span>Valve鏃訛紝浼氭牴鎹綋鍓?/span>request鎵鎸囧畾鐨?/span>Host錛屽皢褰撳墠鐨?/span>request鍜?/span>response浼犻掔粰璇?/span>Host榪欎釜Pipeline鐨勭涓涓?/span>Valve榪涜澶勭悊銆?/span>
鎴戞兂Tomcat涓殑Engine銆?/span>Host銆?/span>Context銆?/span>Wrapper澶勭悊request鐢熸垚response鐨勮繃紼嬪ぇ姒傛槸榪欐牱鐨勶細
Engine鍦ㄦ敹鍒?/span>request鍚庡湪鍏?/span>Pipeline涓殑姣忎竴涓?/span>Valve瀵?/span>request榪涜澶勭悊錛屼篃鍙兘浼氱敓鎴?/span>response鐨勬煇浜涢儴鍒嗭紝鍦ㄦ渶鍚庝竴涓?/span>Valve涓皢request鍜?/span>response浼犵粰涓嬩竴綰?/span>Container鍗?/span>Host鐨勭涓涓?/span>Valve銆?/span>Host閲嶅鍚屾牱榪囩▼錛岀戶緇紶閫掔粰Context錛?/span>Context鍐嶄紶閫掔粰Wrapper銆傜敱浜?/span>Wrapper浠h〃鐨勬槸Servlet瀵硅薄錛屽洜姝ゅ湪Wrapper澶勬墍鏈夌殑澶勭悊閮界粨鏉熶簡錛?/span>response瀵硅薄鐢熸垚瀹屾瘯銆傚綋鐒朵簡錛屽鏋滃湪鏌愪竴綰т腑鏃犳硶鎵懼埌request瑕佹眰鐨勪笅涓綰у璞★紝鍒欐暣涓鐞嗚繃紼嬩篃浼氱珛鍗崇粨鏉熴?/span>StandardPipeline闄ゅ疄鐜?/span>Pipeline鎺ュ彛澶栵紝涔熷疄鐜頒簡Lifecycle鎺ュ彛銆傝繖涓被鐨?/span>start鍜?/span>stop鏂規硶錛岄鍏堟鏌ユ槸鍚﹀凡緇忚start鎴?/span>stop錛屽鏋滄槸鍒欎細鎶涘嚭涓涓?/span>LifecycleException鐨勫紓甯革紝鍚﹀垯渚?/span>fire鍜岀敓鍛芥湡鏀瑰彉鐨勭浉鍏充簨浠訛紝騫惰皟鐢ㄥ叾鍐呴儴valve瀵硅薄錛堝鏋滆valve瀵硅薄涔熷疄鐜頒簡Lifecycle鎺ュ彛錛夌殑start鍜?/span>stop鏂規硶銆?/span>addValve鏂規硶鐢ㄦ潵鍚?/span>StandardPipeline涓姞鍏?/span>Valve瀵硅薄錛屾柊鍔犲叆鐨?/span>Value瀵硅薄琚斁鍦ㄤ竴涓彨鍋?/span>Basic鐨勭壒孌?/span>Valve錛堝氨鏄竴涓?/span>Pipeline鐨勬渶鍚庝竴涓?/span>Valve錛夌殑鍓嶉潰錛屽鏋滃湪娣誨姞Valve鐨勬椂鍊欒StandardPipeline宸茬粡澶勪簬start鐘舵侊紝鍒欎細榪涜涓浜涙敞鍐岋紙璋冪敤apache commons搴撶殑涓涓被錛屽畬鍏ㄦ病鏈夌湅鎳傝繖涓湴鏂規槸浠涔堜綔鐢?/span>>_<錛?/span>
絎竴綾繪帴鍙d富瑕佹槸瀵箇eb application鍙婂叾鍚勪釜緇勬垚閮ㄥ垎鐨勬娊璞°傝繖浜涙帴鍙d互Container涓虹埗鎺ュ彛錛屽垎鍒負Context錛孍ngine錛孒ost錛學rapper銆?
Engine浠h〃鐨勬槸鏁翠釜Catalina Servlet寮曟搸銆?
Host浠h〃鐨勬槸Catalina Servlet寮曟搸涓殑涓涓櫄鎷熶富鏈恒?
Context
Wrapper浠h〃鐨勬槸鏌愪竴涓叿浣撶殑servlet
涓嬮潰鎴戜粠Container鐨勬娊璞″疄鐜癈ontainerBase鏉ュ垏鍏ontainer錛孋ontext錛孍ngine錛孒ost錛學rapper鐨勫疄鐜般?
鐢變簬Container鎺ュ彛鏄痺eb application涓悇閮ㄥ垎鐨勬娊璞$殑鍏叡閮ㄥ垎錛屽洜姝ゅ叾瀹炵幇綾籆ontrainerBase鏄竴涓娊璞$被銆傚浜嶤ontainer鎺ュ彛鐨勫悇涓瓙鎺ュ彛鐨勫疄鐜扮被錛屽垯閫氳繃緇ф壙ContainerBase鏉ュ疄鐜版帴鍙ontainer鎺ュ彛銆備緥濡侲ngine鎺ュ彛緇ф壙Container鎺ュ彛錛孍ngine鐨勫疄鐜扮被StandardEnginer緇ф壙ContainerBase綾匯?
ContainerBase瀹炵幇寰楁帴鍙f湁Container錛孡ifecycle錛孧BeanRegistration, Pipeline錛孲erializable銆傚叾涓璍ifecycle錛孭ipeline鍜孋ontainer灞炰簬鍚屼竴涓寘銆?
Lifecycle鎺ュ彛瀹氫箟浜嗕竴涓叿鏈夌敓鍛芥湡灞炴х殑緇勪歡鎵蹇呴』鎻愪緵鐨勬柟娉曪細start錛堝惎鍔ㄤ竴涓粍浠訛級錛宻top錛堝仠姝竴涓粍浠訛級錛涢櫎姝や箣澶栬鎺ュ彛榪樺畾涔変簡涓庡叿鏈夌敓鍛芥湡灞炴х殑緇勪歡鐨凩istener鐩稿叧鐨?涓柟娉曪紝鐢ㄦ潵娣誨姞銆佸垹闄ゃ佹煡鎵懼璇ョ粍浠剁殑鐢熷懡鏈熼樁孌靛彉鍖栨劅鍏磋叮鐨凩istener銆?
Pipeline鍦═omcat涓槸涓涓垨鑰呭涓猇alue鐨勭粍鍚堬紝Value鐢ㄦ潵瀵筊equest榪涜澶勭悊錛岀敓鎴怰esponse鎴栬呭皢Request鍜孯esponse浼犵粰涓嬩竴涓猇alue榪涜澶勭悊銆俆omcat騫舵病鏈夎薄閫氬父涓鏍峰皢Pipeline鍜孷alue浣滀負鍚屼竴涓帴鍙o紝鍗充嬌鐢–omposite妯″紡錛岃屾槸Pipeline鍜孷alue鍒嗗埆浣滀負闆嗗悎鍜屽厓绱狅紝Pipeline鍙兘鍔犲叆Value鑰屼笉鑳藉姞鍏ipeline錛孷alue鍒欎笉鑳藉寘鍚換浣曞瓙Value銆?
ContainerBase瀵筶ifecycle鎺ュ彛鐨勫疄鐜板垎涓轟袱綾伙紝addLifecycleListener銆乫indLifecycleListener銆乺emoveLifecycleListener閮芥槸閫氳繃璋冪敤ContainerBase鐨勪竴涓狶ifecycleSupport鎴愬憳瀹炵幇錛泂tart鍜宻top鏂規硶鍒欎負ContainerBase鑷繁瀹炵幇銆傛垜涓寮濮嬩互涓篖ifecycleSupport涔熷疄鐜頒簡lifecycle鎺ュ彛錛屼絾瀹為檯涓婂茍涓嶆槸榪欐牱錛屽師鍥犳槸start鍜宻top鏂規硶涓庡叿浣撶殑緇勪歡瀵嗗垏鐩稿叧銆傛澶朙ifecycleSupport涓繕鍖呮嫭涓涓悕涓篺ireLifecycleEvent鐨勬柟娉曪紝璇ユ柟娉曢亶鍘嗘墍鏈夌殑LifeCycleListener錛屽茍瑙﹀彂Lifecycle浜嬩歡銆傛諱綋涓婄湅LifecycleSupport瀹炵幇浜嗘墍鏈夊疄鐜癓ifecycle鎺ュ彛鐨勭粍浠剁殑鍏叡閮ㄥ垎錛岀淮鎶や竴涓狶ifecycleListener鐨勬暟緇勶紝鎻愪緵浜嗘坊鍔犮佷慨鏀廣佽幏鍙朙ifecycleListener鍜岃Е鍙戝悇涓狶istener鐨勬柟娉曘備竴涓湁瓚g殑鎯呭喌鏄紝LifecycleSupport鏄竴涓猣inal綾伙紝鏃犳硶琚戶鎵匡紝鍒╃敤java鐨勮璦鎬ц川寮哄埗鎵ц浜嗛潰鍚戝璞′腑緇勫悎浼樹簬緇ф壙鐨勬濇兂銆?/p>