閲嶅畾鍚戞妧鏈彲浠ュ垎涓轟袱綾伙紝涓綾繪槸瀹㈡埛绔噸瀹氬悜錛屼竴綾繪槸鏈嶅姟鍣ㄧ閲嶅畾鍚戙傚鎴風閲嶅畾鍚戝彲浠ラ氳繃璁劇疆鐗瑰畾鐨凥TTP澶達紝鎴栬呭啓JavaScript鑴氭湰瀹炵幇銆傛湰鏂囦富瑕佹帰璁ㄦ湇鍔″櫒绔噸瀹氬悜鎶鏈殑瀹炵幇銆?/p>
鏈嶅姟鍣ㄧ鐨勯噸瀹氬悜鐩稿叧綾?br />
鏈嶅姟鍣ㄧ鐨勯噸瀹氬悜鎶鏈秹鍙婂埌javax.servlet.ServletContext銆乯avax.servlet.RequestDispatcher銆乯avax.servlet.http.ServletRequest銆乯avax.servlet.http.ServletResponse絳夊嚑涓帴鍙c?br />
鏈嶅姟鍣ㄧ鐨勯噸瀹氬悜鏂瑰紡
鏈嶅姟鍣ㄧ鐨勯噸瀹氬悜鍙互鏈変袱縐嶆柟寮忥紝涓鏄嬌鐢℉ttpServletResponse鐨剆endRedirect()鏂規硶錛屼竴鏄嬌鐢≧equestDispatcher鐨刦orward()鏂規硶銆備笅闈㈠榪欎袱縐嶆柟寮忚繘琛屼粙緇嶃?/p>
HttpServletResponse.sendRedirect()鏂規硶
HttpServletResponse鎺ュ彛瀹氫箟浜嗗彲鐢ㄤ簬杞悜鐨剆endRedirect()鏂規硶銆備唬鐮佸涓嬶細
public void sendRedirect(java.lang.String location)throws java.io.IOException
榪欎釜鏂規硶灝嗗搷搴斿畾鍚戝埌鍙傛暟location鎸囧畾鐨勩佹柊鐨刄RL銆俵ocation鍙互鏄竴涓粷瀵圭殑URL錛屽response.sendRedirect("http://java.sun.com")涔熷彲浠ヤ嬌鐢ㄧ浉瀵圭殑URL銆傚鏋渓ocation浠?#8220;/”寮澶達紝鍒欏鍣ㄨ涓虹浉瀵逛簬褰撳墠Web搴旂敤鐨勬牴錛屽惁鍒欙紝瀹瑰櫒灝嗚В鏋愪負鐩稿浜庡綋鍓嶈姹傜殑URL銆傝繖縐嶉噸瀹氬悜鐨勬柟娉曪紝灝嗗鑷村鎴風嫻忚鍣ㄧ殑璇鋒眰URL璺寵漿銆備粠嫻忚鍣ㄤ腑鐨勫湴鍧鏍忎腑鍙互鐪嬪埌鏂扮殑URL鍦板潃錛屼綔鐢ㄧ被浼間簬涓婇潰璁劇疆HTTP鍝嶅簲澶翠俊鎭殑瀹炵幇銆?/p>
RequestDispatcher.forward()鏂規硶
RequestDispatcher鏄竴涓猈eb璧勬簮鐨勫寘瑁呭櫒錛屽彲浠ョ敤鏉ユ妸褰撳墠request浼犻掑埌璇ヨ祫婧愶紝鎴栬呮妸鏂扮殑璧勬簮鍖呮嫭鍒板綋鍓嶅搷搴斾腑銆俁equestDispatcher鎺ュ彛涓畾涔変簡涓や釜鏂規硶錛屽弬瑙佸涓嬩唬鐮侊細
public interface RequestDispatcher {
void forward(ServletRequest request, ServletResponse response);
void include(ServletRequest request, ServletResponse response);
}
forward()鏂規硶灝嗗綋鍓嶇殑request鍜宺esponse閲嶅畾鍚戝埌璇equestDispacher鎸囧畾鐨勮祫婧愩傝繖鍦ㄥ疄闄呴」鐩腑澶ч噺浣跨敤錛屽洜涓哄畬鎴愪竴涓笟鍔℃搷浣滃線寰闇瑕佽法瓚婂涓楠わ紝姣忎竴姝ラ瀹屾垚鐩稿簲鐨勫鐞嗗悗錛岃漿鍚戝埌涓嬩竴涓楠ゃ傛瘮濡傦紝閫氬父涓氬姟澶勭悊鍦⊿ervlet涓鐞嗭紝澶勭悊鐨勭粨鏋滆漿鍚戝埌涓涓狫SP欏甸潰榪涜鏄劇ず銆傝繖鏍風湅璧鋒潵綾諱技浜嶴ervlet閾劇殑鍔熻兘錛屼絾鏄繕鏈変竴浜涘尯鍒備竴涓猂equestDispatcher瀵硅薄鍙互鎶婅姹傚彂閫佸埌浠繪剰涓涓湇鍔″櫒璧勬簮錛岃屼笉浠呬粎鏄彟澶栦竴涓猄ervlet銆?include()鏂規硶灝嗘妸Request Dispatcher璧勬簮鐨勮緭鍑哄寘鍚埌褰撳墠杈撳嚭涓?/p>
娉ㄦ剰錛屽彧鏈夊湪灝氭湭鍚戝鎴風杈撳嚭鍝嶅簲鏃舵墠鍙互璋冪敤forward()鏂規硶錛屽鏋滈〉闈㈢紦瀛樹笉涓虹┖錛屽湪閲嶅畾鍚戝墠灝嗚嚜鍔ㄦ竻闄ょ紦瀛樸傚惁鍒欏皢鎶涘嚭涓涓狪llegalStateException寮傚父銆?/p>
濡備綍寰楀埌RequestDispatcher
鏈変笁縐嶆柟娉曞彲浠ュ緱鍒癛equest Dispatcher瀵硅薄銆?/p>
1.javax.servlet. ServletRequest鐨刧etRequestDispatcher(String path)鏂規硶錛屽叾涓璸ath鍙互鏄浉瀵硅礬寰勶紝浣嗕笉鑳借秺鍑哄綋鍓峉ervlet涓婁笅鏂囥傚鏋減ath浠?#8220;/”寮澶達紝鍒欒В鏋愪負鐩稿浜庡綋鍓嶄笂涓嬫枃鐨勬牴銆?/p>
2.javax.servlet. ServletContext鐨刧etRequestDispatcher(String path)鏂規硶錛屽叾涓璸ath蹇呴』浠?#8220;/”寮澶達紝璺緞鐩稿浜庡綋鍓嶇殑Servlet涓婁笅鏂囥傚彲浠ヨ皟鐢⊿ervletContext鐨刧etContext(String uripath)寰楀埌鍙︿竴涓猄ervlet涓婁笅鏂囷紝騫跺彲浠ヨ漿鍚戝埌澶栭儴涓婁笅鏂囩殑涓涓湇鍔″櫒璧勬簮閾炬帴銆?/p>
3.浣跨敤javax.servlet. ServletContext鐨刧etNamedDispatcher(String name)寰楀埌鍚嶄負name鐨勪竴涓猈eb璧勬簮錛屽寘鎷琒ervlet鍜孞SP欏甸潰銆傝繖涓祫婧愮殑鍚嶅瓧鍦╓eb搴旂敤閮ㄧ講鎻忚堪鏂囦歡web.xml涓寚瀹氥?br />
榪欎笁縐嶆柟娉曠殑浣跨敤鏈夌粏寰殑宸埆銆傛瘮濡傦紝涓嬮潰鏄竴涓簲鐢ㄧ殑閰嶇疆鏂囦歡web.xml錛?/p>
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>org. javaresearch.redirecttest.ServletOne</servlet-class>
</servlet>
<servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>org.javaresearch. redirecttest.ServletTwo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet/firstservlet/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/servlet/secondservlet/</url-pattern>
</servlet-mapping>
</web-app>
鍏朵腑瀹氫箟浜嗕袱涓猄ervlet錛屽悕瀛楀垎鍒負FirstServlet鍜孲econdServlet錛屽搴旂殑綾誨垎鍒負org.javaresearch. redirecttest.ServletOne鍜宱rg. javaresearch.redirecttest.ServletTwo銆傚彲浠ュ湪嫻忚鍣ㄤ腑閫氳繃綾諱技浜庝笅闈㈢殑閾炬帴璁塊棶錛?/p>
http://localhost:8080/servlet/firstservlet/
浣跨敤1涓柟娉曪紝渚嬪鍦╢irstservlet鍙互鍐欏叆涓嬮潰鐨勪唬鐮侊細
RequestDispatcher rd = request.getRequestDispatcher("secondservlet");
rd.forward(request, response);
姝ゆ椂鎺у埗鏉冨皢杞悜鍒扮浜屼釜Servlet浜嗐?/p>
浣跨敤2涓殑鏂規硶錛屽彲浠ヤ粠Servlet Context涓緱鍒癛equestDispatcher浠g爜濡備笅錛?/p>
RequestDispatcher rd = getServletContext().getRequest
Dispatcher("/servlet/secondservlet");
rd.forward(request, response);
浣跨敤3涓殑鏂規硶錛屼粠涓婇潰鐨剋eb. xml閰嶇疆鏂囦歡鍙互鐪嬪埌瀹氫箟浜嗕袱涓猄ervlet錛屽悕瀛楀垎鍒負FirstServlet鍜孲econdServlet錛屾墍浠ュ彲浠ュ緱鍒板懡鍚嶇殑Dispatcher錛?/p>
RequestDispatcher rd = getServletContext().getNamedDispatcher("SecondServlet");
rd.forward(request, response);
榪欐牱涔熷彲浠ラ噸瀹氬悜鍒癝econdServlet浜嗐?/p>
JSP欏甸潰涓殑閲嶅畾鍚?/p>
JSP鍦ㄨВ鏋愬悗緙栬瘧涓轟竴涓猄ervlet榪愯錛屾墍浠ュ湪JSP涓篃鍙互浣跨敤涓婇潰鐨勯噸瀹氬悜浠g爜錛屽茍涓旓紝JSP榪樻彁渚涗簡鏇翠究鍒╃殑鎿嶄綔錛屽涓嬶細
<jsp:forward page= "nextpage.jsp"/>
JSP欏甸潰鎵ц鍒拌繖鍎匡紝灝嗙粓姝㈠綋鍓嶇殑澶勭悊錛屽皢鎺у埗鏉冧氦鐢眓extpage.jsp銆?/p>
濡備綍閫夋嫨
RequestDispatcher.forward()鏂規硶鍜孒ttpServletResponse.sendRedirect()鏂規硶鐨勫尯鍒槸錛氬墠鑰呬粎鏄鍣ㄤ腑鎺у埗鏉冪殑杞悜錛屽湪瀹㈡埛绔祻瑙堝櫒鍦板潃鏍忎腑涓嶄細鏄劇ず鍑鴻漿鍚戝悗鐨勫湴鍧錛涘悗鑰呭垯鏄畬鍏ㄧ殑璺寵漿錛屾祻瑙堝櫒灝嗕細寰楀埌璺寵漿鐨勫湴鍧錛屽茍閲嶆柊鍙戦佽姹傞摼鎺ャ傝繖鏍鳳紝浠庢祻瑙堝櫒鐨勫湴鍧鏍忎腑鍙互鐪嬪埌璺寵漿鍚庣殑閾炬帴鍦板潃銆傛墍浠ワ紝鍓嶈呮洿鍔犻珮鏁堬紝鍦ㄥ墠鑰呭彲浠ユ弧瓚抽渶瑕佹椂錛屽敖閲忎嬌鐢≧equest Dispatcher.forward()鏂規硶錛屽茍涓旓紝榪欐牱涔熸湁鍔╀簬闅愯棌瀹為檯鐨勯摼鎺ャ傚湪鏈変簺鎯呭喌涓嬶紝姣斿錛岄渶瑕佽煩杞埌涓涓叾瀹冩湇鍔″櫒涓婄殑璧勬簮錛屽垯蹇呴』浣跨敤HttpServletResponse.sendRequest()鏂規硶