锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
銆
銆銆init()鏂規硶琚獹enericServlet.init(ServletConfig config)鏂規硶璋冪敤銆?br />銆銆
銆銆init()鏂規硶鏂逛究浜嗗紑鍙戜漢鍛樺畾鍒禨ervlet鐨勫垵濮嬪寲錛岃屾棤欏誨幓緇存姢ServletConfig瀵硅薄鐨勫瓨鍌ㄥ伐浣溿?br />銆銆
銆銆閲嶅啓GenericServlet.init(ServletConfig config)蹇呴』瑕佹樉紺虹殑璋冪敤super.init(config)鏂規硶銆?br />銆銆
銆銆ServletContext.getContect(java.lang.String uripath)鐨勪綔鐢ㄦ槸浠涔堬紵
銆銆
銆銆榪斿洖鍚屼竴Server涓寚瀹氱殑path瀵瑰簲鐨凷ervletContext瀵硅薄,閫氳繃璇ュ璞″彲浠ュ疄鐜頒笌Server涓殑鍏朵粬Context鎵撲氦閬撱?br />銆銆
銆銆uripath蹇呴』鏄互"/"寮濮嬶紙璇ヨ礬寰勭殑鍚箟鏄浉瀵逛簬鏁翠釜Servlet鏂囨。鐨勬牴璺緞錛岃屼笉鏄綋鍓峉ervletContext鐨勬牴璺緞錛夈?br />銆銆
銆銆Servlet鐢熷懡鍛ㄦ湡鏄粈涔堬紵
銆銆
銆銆涓鑸殑Servlet(GenericServlet,鍗充笌鍗忚鏃犲叧鐨凷ervlet)鐨勭敓鍛藉懆鏈燂細init() --> GenericServlet.service(ServletRequest req, ServletResponse res) --> destroy.
銆銆
銆銆HttpServlet鐨勭敓鍛藉懆鏈? init() --> GenericServlet.service(ServletRequest req, ServletResponse res)---> service(HttpServletRequest req, HttpServletResponse resp) --> doXXXX()-->destroy.
銆銆
銆銆鏈夋病鏈夊繀瑕侀噸鍐橤enericServlet.service()鏂規硶錛?/b>
銆銆
銆銆瀵逛簬HttpServlet鏉ヨ娌℃湁蹇呰銆傚彧闇瑕侀噸鍐欏畠鐨刣oXXXX()鏂規硶灝卞彲浠ヤ簡銆侶ttpServlet涓璼ervice()鏂規硶浼氳嚜鍔ㄧ殑鏍規嵁鐢ㄦ埛璇鋒眰綾誨瀷鎶婅姹傝漿鍙戠粰鐩稿簲鐨刣oXXXX()鏂規硶錛堜緥濡俤oGet()鏂規硶錛夈?br />銆銆
銆銆ServletRequest.getReader()鍜孲ervletRequest.getInputStream()濡備綍浣跨敤錛?/b>
銆銆
銆銆娉ㄦ剰涓や釜鏂規硶涓嶈兘鍚屾椂浣跨敤銆?br />銆銆
銆銆ServletRequest.getRealPath(String path)鏂規硶宸茬粡涓嶆帹鑽愪嬌鐢ㄣ?br />銆銆
銆銆璇蜂嬌鐢⊿ervletContext.getRealPath(String path)鏂規硶銆?br />銆銆
銆銆ServletResponse緙虹渷鐨勫瓧絎﹂泦(charset)鏄粈涔?
銆銆ServletResponse緙虹渷鐨勫瓧絎﹂泦(charset)鏄疘SO-8859-1,鍙互閫氳繃setContentType(java.lang.String)鏂規硶鏀瑰彉鏂扮殑瀛楃闆嗐?br />銆銆
銆銆渚嬪錛歴etContentType("text/html; charset=Shift_JIS").
銆銆
銆銆鍏充簬瀛楃闆嗕俊鎭紝鍙互嫻忚RFC 2045
銆銆
銆銆HttpServletRequest.getRequestURI()鍜孒ttpServletRequest.getRequestURL()鍖哄埆鏄粈涔?銆
銆
銆銆request.getRequestURI() 榪斿洖鍊肩被浼鹼細/xuejava/requestdemo.jsp
銆銆
銆銆request.getRequestURL() 榪斿洖鍊肩被浼鹼細http://localhost:8080/xuejava/requestdemo.jsp
銆銆
銆銆HttpServletRequest.encodeURL()鍜孒ttpServletRequest.encodeRedirectURL(()鍖哄埆鏄粈涔?涓轟粈涔堣鏈変袱涓笉鍚岀殑鏂規硶鍛紵
銆銆
銆銆褰撶敤URL-rewriting鏂瑰紡鏉ョ鐞哠ession鐨勬椂鍊欙紝闇瑕佺敤鍒頒互涓婄殑涓や釜鏂規硶銆?br />銆銆
銆銆涓や釜鏂規硶鐨勪笉鍚岀偣鏄細涓や釜鏂規硶紜畾鏄惁闇瑕佸寘鍚玸ession ID鐨勯昏緫涓嶅悓銆?br />銆銆
銆銆鍦ㄨ皟鐢℉ttpServletResponse.sendRedirect鍓嶏紝搴旇鍏堣皟鐢╡ncodeRedirectURL()鏂規硶錛屽惁鍒欏彲鑳戒細涓㈠けSesssion淇℃伅銆?...
銆銆
銆銆濡備綍浣夸綘鐨凷ervlet鎴栬匤SP瀹炵幇Single Thread Model?銆銆
銆銆瀵逛簬Servlet瀹炵幇javax.single.SingleThreadModel鎺ュ彛銆?br />銆銆
銆銆瀵逛簬JSP,鍦≒age Directive涓啓濡備笅鐨勮鍙?lt;%@ page isThreadSafe="false" %>
銆銆
銆銆JSP Tag 鍜?JSP XML-based Tag
銆銆
銆銆...
銆銆
銆銆濡備綍鎶婃煇涓涓狫SP Page瀹氫箟鎴愪負Error Page?涓轟粈涔堣榪欐牱鍋氾紵
銆銆
銆銆瀹炵幇鏂規硶錛?<%@ page isErrorPage="true" %>
銆銆
銆銆涓轟粈涔堬紵 鍥犱負闇瑕佽幏鍙朎xception 瀵硅薄錛堢己鐪佹儏鍐典笅錛屽湪JSP Page涓槸涓嶈兘鐩存帴浣跨敤鈥滈殣鍚璞♀?exception鐨勶級銆?br />銆銆
銆銆JSP Page鐨勬墽琛岄『搴忔槸濡備綍鐨勶紵
銆銆
銆銆JSP Page鐨勬墽琛岄『搴忓涓嬶細
銆銆
銆銆JSP Page Translation. JSP Page --> Servlet source code.
銆銆JSP Page Compilation. Servlet source code --> Servlet class.
銆銆Load Class(First time or the server restarted)
銆銆
銆銆Create instance(鍙兘浼氬緢澶氭錛屽鏋淛SP Page涓0鏄庝簡<%@ page isThreadSafe="false" %>)
銆銆
銆銆Call jspInit method錛堜竴鑸殑JSP Page閮芥病鏈夐噸鍐欒繖涓柟娉曪紝閲嶅啓闇瑕佸湪澹版槑璇彞孌典腑錛夈?br />銆銆
銆銆Call _jspService method錛堢被浼間笌涓鑸琀ttpServlet鐨刣oGet鍜宒oPost鏂規硶錛屼絾鏄彲浠ュ悓鏃剁敤鏉ュ鐞哖ost鍜孏etq璇鋒眰錛夈?br />銆銆
銆銆Call jspDestroy method錛圫erver鍦ㄥ嵏杞絊ervet鐨勬椂鍊欙紝渚嬪褰揝ervlet寰堜箙娌℃湁浣跨敤鐨勬儏鍐碉級銆?br />銆銆
銆銆JSP Page涓湁鍝簺闅愬惈瀵硅薄(Implicity Object)?鍚勮嚜鐨勭被鍨嬪拰浣滅敤鏄粈涔堬紵
銆銆
銆銆request --
銆銆reponse --
銆銆session --
銆銆application --
銆銆out --
銆銆page --
銆銆pagecontext --
銆銆exception -- 鍙湁鍦ㄥ綋鍓岼SP Page涓篍rror Page鐨勬椂鍊欐墠鏈夋晥銆?br />銆銆config --
銆銆
銆銆<jsp:include page="/foo/foo.jsp" %> 鍜?<@ include file="/foo/foo.jsp" %>鐨勫尯鍒槸浠涔堬紵
銆銆
銆銆<jsp:include ... -- request time.
銆銆<@ include ... -- Page translation time.
銆銆
銆銆Servlets/JSP Container(Engine)鏈夊嚑縐嶈繍琛屾柟寮忥紵
銆銆
銆銆Standalone
銆銆Tomcat standalone mode
銆銆In-process
銆銆Tomcat running inside Apache Web Server.
銆銆Out-of-process
銆銆Apache + mod_jk + Tomcat
銆銆
銆銆Servlet,Servlet寮鍙戜漢鍛橈紝Servlet API, Servlet Container鐨勫叧緋繪槸浠涔堬紵
銆銆
銆銆Servlet,Servlet寮鍙戜漢鍛?--->Servlet API --> Servlet Container
銆銆The parts of an HTTP message
銆銆
銆銆Message part Description
銆銆The initial line錛?Specifies the purpose of the request or response message
銆銆渚嬪瓙錛欸ET /reports/sales/index.html HTTP/1.0
銆銆The header section:Specifies the meta-information, such as size, type, and encoding,
銆銆about the content of the message
銆銆A blank line:
銆銆An optional message body: The main content of the request or response message
銆銆
銆銆涓嬮潰鏄竴涓猂esponse鐨勪緥瀛愶細
銆銆
銆銆HTTP/1.0 200 OK
銆銆Date: Tue, 01 Dec 2001 23:59:59 GMT
銆銆Content-Type: text/html
銆銆Content-Length: 52
銆銆
銆銆<html>
銆銆<body>
銆銆<h1>Hello, John!</h1>
銆銆</body>
銆銆</html>
銆銆
銆銆HTTP瑙勮寖涓畾涔変簡鍝簺鏂規硶錛熷悇鑷湁浠涔堢敤閫旓紵
銆銆
銆銆GET
銆銆HEAD
銆銆POST
銆銆浠?Http 1.1瑙勮寖寮濮嬶紝澧炲姞浜嗕互涓嬬殑鏂規硶:
銆銆
銆銆PUT
銆銆OPTIONS
銆銆TRACE
銆銆DELETE
銆銆CONNECT
銆銆
銆銆ServetRequest涓負浠涔堣瀹氫箟:getContentType(),getContentLength()鏂規硶銆?br />銆銆
銆銆鏍規嵁HTTP鍗忚瑙勮寖錛孯equest 鍜?Response涓鏍蜂篃鏈夎繖浜涘繀涓嶅彲灝戠殑鍐呭錛?br />銆銆
銆銆鎵浠ラ渶瑕侀鍏堜簡瑙?HTTP Message鐨勬蹇靛拰鍏跺唴瀹圭殑鏍煎紡錛岃繖浜涗笢瑗垮浜嶳equest鍜孯eponse鏄竴鏍風殑銆?br />銆銆
銆銆瀵逛簬GET鏂瑰紡鍙戦佺殑璇鋒眰錛屽叾鍐呭綾誨瀷涓猴細null
銆銆
銆銆瀵逛簬POST鏂瑰紡鍙戦佺殑璇鋒眰錛屽叾鍐呭綾誨瀷涓猴細application/x-www-form-urlencoded
銆銆
銆銆POST鏂瑰紡鍙戦佽姹傜殑鍐呭綾諱技浜庯細username=xuejava.
銆銆
銆銆RequestDispatcher.forward()鍜孒ttpServletResponse.sendRedirect()鐨勫尯鍒槸浠涔堬紵
銆銆
銆銆RequestDispatcher.forward()鏄湪鏈嶅姟鍣ㄧ榪愯錛汬ttpServletResponse.sendRedirect()鏄氳繃鍚戝鎴鋒祻瑙堝櫒鍙戦佸懡浠ゆ潵瀹屾垚銆?br />銆銆
銆銆鎵浠equestDispatcher.forward()瀵逛簬嫻忚鍣ㄦ潵璇存槸鈥滈忔槑鐨勨濓紱鑰孒ttpServletResponse.sendRedirect()鍒欎笉鏄?br />銆銆
銆銆鍙﹀錛岃繕瑕佹敞鎰廟equestDispatcher.forward()鍦ㄨ皟鐢ㄧ殑鏃跺橰esponse涓嶈兘宸茬粡Commit浜嗭紙Response.isCommitted()錛夈?br />銆銆
銆銆ServletContext.getRequestDispatcher(String url)鍜孲ervletRequest.getRequestDispatcher(String url)鐨勫尯鍒槸浠涔堬紵涓轟粈涔堬紵
銆銆
銆銆ServletContext.getRequestDispatcher(String url)涓殑url鍙兘浣跨敤緇濆璺緞錛涜孲ervletRequest.getRequestDispatcher(String url)涓殑url鍙互浣跨敤鐩稿璺緞銆?br />銆銆
銆銆鍥犱負ServletRequest鍏鋒湁鐩稿璺緞鐨勬蹇碉紱鑰孲ervletContext瀵硅薄鏃犳姒傚康銆?br />銆銆
銆銆濡備綍鎶婅姹傝漿縐誨埌鍙﹀涓涓猈eb App涓殑鏌愪釜鍦板潃錛?/b>
銆銆
銆銆ServletContext.getRequestDispatcher(String url)鍜孲ervletRequest.getRequestDispatcher(String url)鍙兘鎶婅姹傝漿縐誨埌鍚屼竴涓猈eb App涓殑鍦板潃銆?br />銆銆
銆銆濡傛灉闇瑕佹妸璇鋒眰杞Щ鍒板彟澶栦竴涓猈eb App涓殑鏌愪釜鍦板潃錛屽彲浠ユ寜涓嬮潰鐨勫仛娉曪細
銆銆
銆銆1. 鑾峰緱鍙﹀涓涓猈eb App鐨凷ervletConext瀵硅薄(currentServletContext.getContext(uripath)).
銆銆
銆銆2. 璋冪敤ServletContext.getRequestDispatcher(String url)鏂規硶銆?br />