锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Servlet鍜孞SP鐨勬蹇?/strong>
Servlet鏄疭un鎺ㄥ嚭鐨勭敤浜庡疄鐜癈GI(閫氱敤緗戝叧鎺ュ彛)鐨刯ava璇█鐗堟湰,瀹冧笉浣嗗叿鏈夎法騫沖彴鐨勭壒鎬?鑰屼笖榪樹互澶氱嚎紼嬬殑鏂瑰紡涓虹敤鎴鋒彁渚涙湇鍔¤屼笉蹇呬負姣忎釜璇鋒眰閮藉惎鍔ㄤ竴涓嚎紼?鍥犳鍏舵晥鐜囪姣斾紶緇熺殑CGI紼嬪簭瑕侀珮寰堝.
JSP鍜孧S鐨凙SP綾諱技,瀹冩妸JSP鏍囩宓屽叆鍒癏TML鏍煎紡鐨勭綉欏典腑,榪欐牱瀵圭▼搴忓憳鍜岀綉欏電紪杈戜漢鍛橀兘寰堟柟渚?JSP澶╃敓灝辨槸涓鴻〃鐜板眰璁捐鐨?
瀹為檯涓?Servlet鍙槸緇ф壙浜咹ttpRequest鐨凧ava綾?鑰孞SP鏈緇堜篃浼氳Servlet寮曟搸緲昏瘧鎴怱ervlet騫剁紪璇戞墽琛?JSP鐨勫瓨鍦ㄤ富瑕佹槸涓轟簡鏂逛究琛ㄧ幇灞?
Servlet涓嶫SP涔嬮棿鐨勫尯鍒?鍐沖畾浜哠ervlet涓嶫SP鍦∕VC鏋勬灦妯″紡涓殑涓嶅悓瑙掕壊.Servlet涓鑸綔涓篗VC涓殑鎺у埗鍣?JSP涓鑸綔涓篗VC涓殑瑙嗗浘.
Servlet鐨勭敓鍛藉懆鏈?/strong>
Servlet鏈変笁涓敓鍛藉懆鏈?鍒濆鍖?鎵ц鍜岀粨鏉?瀹冧滑鍒嗗埆瀵瑰簲Servlet鎺ュ彛涓殑init,service鍜宒estroy涓変釜鍑芥暟.
鍒濆鍖栨椂鏈?褰搒ervlet琚玸ervlet瀹瑰櫒(濡倀omcat)杞藉叆鍚?servlet鐨刬nit鍑芥暟灝變細琚皟鐢?鍦ㄨ繖涓嚱鏁板彲浠ュ仛涓浜涘垵濮嬪寲宸ヤ綔.init鍑芥暟鍙細鍦╯ervlet瀹瑰櫒杞藉叆servlet鎵ц涓嬈?浠ュ悗鏃犺鏈夊灝戝鎴風璁塊棶榪欎釜Servlet,init鍑芥暟閮戒笉浼氳鎵ц.
鎵ц鏈?servlet閲囩敤澶氱嚎紼嬫柟寮忓悜瀹㈡埛鎻愪緵鏈嶅姟,褰撴湁瀹㈡埛璇鋒眰鏉ュ埌鏃? service浼氳鐢ㄦ潵澶勭悊瀹?姣忎釜瀹㈡埛閮芥湁鑷繁鐨剆ervice鏂規硶,榪欎簺鏂規硶鎺ュ彈瀹㈡埛绔姹?騫朵笖鍙戞尌鐩稿簲鐨勫搷搴?紼嬪簭鍛樺湪瀹炵幇鍏蜂綋鐨凷ervlet鏃?涓鑸笉閲嶈澆service鏂規硶,鏈嶅姟鍣ㄥ鍣ㄤ細璋冪敤service鏂規硶浠ュ喅瀹歞oGet,doPost,doPut,doDelete涓殑涓縐嶆垨鍑犵,鍥犳搴旇閲嶈澆榪欎簺鏂規硶鏉ュ鐞嗗鎴風璇鋒眰.]
緇撴潫鏈?璇ユ椂鏈熸湇鍔″櫒浼氬嵏杞絪ervlet,瀹冨皢璋冪敤destroy鍑芥暟閲婃斁鍗犵敤鐨勮祫婧?娉ㄦ剰Web鏈嶅姟鍣ㄦ槸鏈夊彲鑳藉穿婧冪殑,destroy鏂規硶涓嶄竴瀹氫細琚墽琛?
濡備綍寮鍙戝拰閮ㄧ講涓涓猄ervlet
1)浠巎ava.servlet.http.HttpServlet緇ф壙鑷繁鐨剆ervlet綾?
2)閲嶈澆doGet鎴杁oPost鏂規硶鏉ュ鐞嗗鎴瘋姹?涓鑸槸doPost,鍏跺畨鍏ㄦц緝濂?,濡傛灉瑕佸湪鍔犺澆Servlet鏃惰鍔犺澆鏃惰繘琛屽垵濮嬪寲鎿嶄綔,鍙互閲嶈澆init鏂規硶.
3)鍦╳eb.xml涓厤緗繖涓猻ervlet.鍏朵腑servlet-class鐢ㄦ潵鍒跺畾榪欎釜servlet鐨勭被鍏ㄥ悕,servlet-name鐢ㄦ潵鏍囪瘑榪欎釜servlet,瀹冨彲浠ユ槸浠繪剰鐨勫瓧絎︿覆,涓嶄竴瀹氳鍜岀被鏂囦歡鍚嶄竴鑷?url-pattern鐢ㄦ潵琛ㄧずservlet琚槧灝勫埌鐨剈rl妯″紡.
<!– Servlet鍦╓eb.xml涓殑閰嶇疆紺轟緥 -->
<servlet>
<servlet-name>ShowPageServlet</servlet-name>
<servlet-class>
com.sitinspring.action.ShowPageServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowPageServlet</servlet-name>
<url-pattern>/ShowPage</url-pattern>
</servlet-mapping>
寮鍙戜竴涓惎鍔ㄦ椂灝辮鎵ц鐨凷ervlet
涓鑸殑Servlet閮芥槸鍦ㄦ湁鏉ヨ嚜瀹㈡埛绔姹傛椂鎵嶄細鎵ц,瑕佽瀹冨湪鍚姩鏃跺氨鎵ц闇瑕佸湪閰嶇疆涓繘琛屼竴浜涚壒孌婅緗?濡傚彸.
鍙寵竟鐨勪唬鐮佷腑, load-on-startup璇存槑浜嗘湇鍔″櫒涓鍚姩灝卞姞杞藉茍鍒濆鍖栧畠,0浠h〃浜嗗姞杞藉畠鐨勪紭鍏堢駭,娉ㄦ剰瀹冨繀欏繪槸涓涓鏁?鑰屼笖鍊煎皬鐨勮姣斿煎ぇ鐨勫厛鍔犺澆.debug鍒跺畾杈撳嚭璋冭瘯淇℃伅鐨勭駭鍒?0涓烘渶浣?
榪欐牱鐨剆ervlet鍦ㄧ敤浜庤鍙朩ebApp鐨勪竴浜涘垵濮嬪寲鍙傛暟寰堟湁鐢ㄥ,濡傚彇寰楅厤緗枃浠剁殑鍦板潃,璁劇疆log4j鍜屽緱鍒癢ebApp鐨勭墿鐞嗚礬寰勭瓑.鍙寵竟閰嶇疆鐨剆ervlet灝辨槸鐢ㄦ潵鍒濆鍖杔og4j鐨?
<!-- InitServlet -->
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>
com.sitinspring.action.Log4jInit
</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Serlet涓嚭鐜扮殑綰跨▼涓嶅畨鍏ㄧ殑闂
Servlet鏄繍琛屽湪澶氱嚎紼嬬殑鏈嶅姟鍣ㄤ笂鐨?瀹冨姣忎釜鐢ㄦ埛鐨勮姹傚垱寤虹殑鏄嚎紼嬭屼笉鏄繘紼?鍥犳鍦ㄩ珮鏁堢殑鍚屾椂涔熷甫鏉ヤ簡鏁版嵁鍚屾鍜屼竴鑷存х殑闂.
鏈嶅姟鍣ㄥ煎疄渚嬪寲涓涓猄ervlet/JSP瀹炰緥,鐒跺悗鍦ㄥ涓鐞嗙嚎紼嬩腑璋冪敤璇ュ疄渚嬬殑鐩稿叧鏂規硶鏉ュ鐞嗚姹?鍥犳servlet鐨勬垚鍛樺彉閲忓彲鑳戒細琚涓嚎紼嬭皟鐢ㄨ瀹炰緥鐨勭浉鍏蟲柟娉曟敼鍙?灝嗘湁鍙兘甯︽潵闂.榪欎篃鏄ぇ瀹跺湪浼楀鐨凷ervlet涓緢灝戠湅鍒版垚鍛樺彉閲忕殑鍘熷洜.
public class ThreadUnsafeServlet extends HttpServlet {
private String unsafeString="";
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
request.setCharacterEncoding("UTF-8");
unsafeString=request.getParameter("str");
try{
Thread.sleep(5000);
}
catch(Exception ex){
ex.printStackTrace();
}
PrintWriter out=response.getWriter();
out.println(unsafeString);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
doPost(request, response);
}
}
鍏充簬閲嶅畾鍚戠殑涓ょ鏂規硶
鍦╯ervlet涓?閲嶅畾鍚戜竴鑸槸閫氳繃HttpResponse鐨剆endRedirect()鏂規硶鎴朢equestDispatcher鐨刦orward鏂規硶鏉ュ疄鐜扮殑.
sendRedirect鐨勫弬鏁板彲浠ユ槸鐩稿鎴栫粷瀵瑰湴鍧,濡傛灉浠?寮澶村鍣ㄥ皢璁や負鐩稿浜庡綋鍓峎eb寮曠敤鐨勬牴.榪欑璇鋒眰灝嗗鑷村鎴風嫻忚鍣ㄨ姹俇RL璺寵漿,鑰屼笖浠嶣rowser鐨勫湴鍧鏍忎腑鍙互鐪嬪埌鏂扮殑Url鍦板潃.鍙﹀浣跨敤榪欎釜鏂規硶鏃?鍓嶄竴涓〉闈㈢殑鐘舵佷笉浼氳甯﹀埌涓嬩竴涓〉闈?閫氳繃request.getAttribute(“XXXX”)鏂規硶灝嗗緱鍒扮┖鍊?
RequestDispatcher鏄竴涓猈eb璧勬簮鐨勫寘瑁呭櫒,鍙互鐢ㄦ潵鎶婂綋鍓嶈姹備紶閫掑埌璇ヨ祫婧?鑰屼笖瀹㈡埛绔祻瑙堝櫒鐨勫湴鍧鏍忎篃涓嶄細鏄劇ず涓鴻漿鍚戝悗鐨勫湴鍧.鍙﹀姝ゆ柟娉曡繕鍙互灝嗚姹傚彂閫佸埌浠繪剰涓涓湇鍔″櫒璧勬簮.
濡傛灉涓ょ鏂規硶閮借兘杈懼埌瑕佹眰,鏈濂戒嬌鐢╢orward鏂規硶,瀹冩瘮sendRedirect瀹夊叏鑰岄珮鏁?
鑾峰彇褰撳墠緇濆璺緞
Servlet/JSP鏈夋椂闇瑕佸鎷ユ湁鐨勮祫婧愯繘琛屾搷浣?榪欏氨瑕佹眰寰楀埌瀹冧滑鎵鍦ㄧ殑緇濆璺緞.姝ゆ椂鍙互浣跨敤ServletContext鎺ュ彛鎻愪緵鐨勬柟娉曟潵寰楀埌褰撳墠搴旂敤鎵鍦ㄧ殑緇濆璺緞,浠g爜濡備笅:
ServletContext sct = getServletContext();
String realPath=sct.getRealPath("/");
娉? ServletContext 鐢ㄤ簬Servlet鍜孲ervlet瀹瑰櫒浜ゆ崲淇℃伅.