亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JAVA進階:Servlet/JSP服務器端重定向

2024-09-05 00:19:22
字體:
來源:轉載
供稿:網友

通常,在一個設計良好的web應用中,都會綜合使用servlet和jsp技術。servlet控制業務流轉,jsp則負責業務處理結果的顯示。此時,將大量用到重定向技術。

        通常,在一個設計良好的web應用中,都會綜合使用servlet和jsp技術。servlet控制業務流轉,jsp則負責業務處理結果的顯示。此時,將大量用到重定向技術。

        重定向技術可以分為兩類,一類是客戶端重定向,一類是服務器端重定向??蛻舳酥囟ㄏ蚩梢酝ㄟ^設置特定的http頭,或者寫javascript腳本實現。本文主要探討服務器端重定向技術的實現。


服務器端的重定向相關類


服務器端的重定向技術涉及到javax.servlet.servletcontext、javax.servlet.requestdispatcher、javax.servlet.http.servletrequest、javax.servlet.http.servletresponse等幾個接口。


服務器端的重定向方式


服務器端的重定向可以有兩種方式,一是使用httpservletresponse的sendredirect()方法,一是使用requestdispatcher的forward()方法。下面對這兩種方式進行介紹。

httpservletresponse.sendredirect()方法

httpservletresponse接口定義了可用于轉向的sendredirect()方法。代碼如下:

public void sendredirect(java.lang.string location)throws java.io.ioexception


這個方法將響應定向到參數location指定的、新的url。location可以是一個絕對的url,如response.sendredirect("http://java.sun.com")也可以使用相對的url。如果location以“/”開頭,則容器認為相對于當前web應用的根,否則,容器將解析為相對于當前請求的url。這種重定向的方法,將導致客戶端瀏覽器的請求url跳轉。從瀏覽器中的地址欄中可以看到新的url地址,作用類似于上面設置http響應頭信息的實現。

requestdispatcher.forward()方法

requestdispatcher是一個web資源的包裝器,可以用來把當前request傳遞到該資源,或者把新的資源包括到當前響應中。requestdispatcher接口中定義了兩個方法,參見如下代碼:

public interface requestdispatcher {
void forward(servletrequest request, servletresponse response);
void include(servletrequest request, servletresponse response);
}



forward()方法將當前的request和response重定向到該requestdispacher指定的資源。這在實際項目中大量使用,因為完成一個業務操作往往需要跨越多個步驟,每一步驟完成相應的處理后,轉向到下一個步驟。比如,通常業務處理在servlet中處理,處理的結果轉向到一個jsp頁面進行顯示。這樣看起來類似于servlet鏈的功能,但是還有一些區別。一個requestdispatcher對象可以把請求發送到任意一個服務器資源,而不僅僅是另外一個servlet。 include()方法將把request dispatcher資源的輸出包含到當前輸出中。

注意,只有在尚未向客戶端輸出響應時才可以調用forward()方法,如果頁面緩存不為空,在重定向前將自動清除緩存。否則將拋出一個illegalstateexception異常。


如何得到requestdispatcher


有三種方法可以得到request dispatcher對象。

1.javax.servlet. servletrequest的getrequestdispatcher(string path)方法,其中path可以是相對路徑,但不能越出當前servlet上下文。如果path以“/”開頭,則解析為相對于當前上下文的根。

2.javax.servlet. servletcontext的getrequestdispatcher(string path)方法,其中path必須以“/”開頭,路徑相對于當前的servlet上下文??梢哉{用servletcontext的getcontext(string uripath)得到另一個servlet上下文,并可以轉向到外部上下文的一個服務器資源鏈接。

3.使用javax.servlet. servletcontext的getnameddispatcher(string name)得到名為name的一個web資源,包括servlet和jsp頁面。這個資源的名字在web應用部署描述文件web.xml中指定。

這三種方法的使用有細微的差別。比如,下面是一個應用的配置文件web.xml:


"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">


firstservlet
org. javaresearch.redirecttest.servletone


secondservlet
org.javaresearch. redirecttest.servlettwo


firstservlet
/servlet/firstservlet/


secondservlet
/servlet/secondservlet/





其中定義了兩個servlet,名字分別為firstservlet和secondservlet,對應的類分別為org.javaresearch. redirecttest.servletone和org. javaresearch.redirecttest.servlettwo??梢栽跒g覽器中通過類似于下面的鏈接訪問:

http://localhost:8080/servlet/firstservlet/

使用1中方法,例如在firstservlet可以寫入下面的代碼:

requestdispatcher rd = request.getrequestdispatcher("secondservlet");
rd.forward(request, response);



此時控制權將轉向到第二個servlet了。

使用2中的方法,可以從servlet context中得到requestdispatcher代碼如下:

requestdispatcher rd = getservletcontext().getrequest
dispatcher("/servlet/secondservlet");
rd.forward(request, response);



使用3中的方法,從上面的web. xml配置文件可以看到定義了兩個servlet,名字分別為firstservlet和secondservlet,所以可以得到命名的dispatcher:

requestdispatcher rd = getservletcontext().getnameddispatcher("secondservlet");
rd.forward(request, response);



這樣也可以重定向到secondservlet了。


jsp頁面中的重定向


jsp在解析后編譯為一個servlet運行,所以在jsp中也可以使用上面的重定向代碼,并且,jsp還提供了更便利的操作,如下:





jsp頁面執行到這兒,將終止當前的處理,將控制權交由nextpage.jsp。


如何選擇


requestdispatcher.forward()方法和httpservletresponse.sendredirect()方法的區別是:前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址;后者則是完全的跳轉,瀏覽器將會得到跳轉的地址,并重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用request dispatcher.forward()方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用httpservletresponse.sendrequest()方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美孕妇毛茸茸xxxx| 91性高湖久久久久久久久_久久99| 精品调教chinesegay| 亚洲黄色av女优在线观看| 欧洲美女7788成人免费视频| 日本高清不卡在线| 国产一区二区三区在线| 亚洲最新av网址| 亚洲网站在线播放| 51精品在线观看| 久久久亚洲精选| 国产亚洲精品久久| 国产精品久久久久久av| 国产欧洲精品视频| 97视频免费在线观看| 色偷偷噜噜噜亚洲男人的天堂| 69久久夜色精品国产7777| 欧美亚洲视频在线看网址| 69久久夜色精品国产69| 亚洲天堂久久av| 国产精品视频成人| 在线亚洲国产精品网| 红桃av永久久久| 91精品国产综合久久香蕉的用户体验| 日韩不卡中文字幕| 亚洲成人av资源网| 亚洲第一色在线| 久久伊人精品一区二区三区| 国产精品久久久久久久久久小说| 亚洲一区www| 日韩69视频在线观看| 亚洲激情 国产| 欧美日韩成人在线视频| 日韩中文字幕亚洲| 91av在线免费观看视频| 黑人巨大精品欧美一区二区一视频| 亚洲第一二三四五区| 亚洲人成电影网| 欧美寡妇偷汉性猛交| 精品国产一区二区三区四区在线观看| 亚洲三级黄色在线观看| 91成人在线视频| 国产亚洲精品美女| 国产欧美精品一区二区三区-老狼| 久久久久久中文| 亚洲成人中文字幕| 日韩精品高清在线观看| 日韩av网站大全| 欧美激情亚洲一区| 亚洲电影成人av99爱色| 国产精品69精品一区二区三区| 亚洲美女又黄又爽在线观看| 亚洲永久免费观看| 欧美做爰性生交视频| 一区二区成人av| 成人av.网址在线网站| 欧美激情一区二区三区久久久| 日韩精品在线免费观看视频| 欧美视频一二三| 亚洲一区二区三区sesese| 国产成+人+综合+亚洲欧美丁香花| 青草成人免费视频| 黑人狂躁日本妞一区二区三区| 久久激情视频免费观看| 日本成人精品在线| 在线观看日韩www视频免费| 国产日韩欧美成人| 91欧美精品成人综合在线观看| 色哟哟网站入口亚洲精品| 久热精品视频在线观看| 日韩免费视频在线观看| 国产精品wwwwww| 久久久精品在线| 亚洲精品一二区| 亚洲第一福利视频| 亚洲色图17p| 久久精品小视频| …久久精品99久久香蕉国产| 日韩av在线免费播放| 亚洲激情在线观看视频免费| 成人有码视频在线播放| 国产亚洲视频在线| 欧美色另类天堂2015| 日韩美女写真福利在线观看| 亚洲第一页中文字幕| 亚洲精品在线视频| 亚洲国产精品系列| 亚洲视频网站在线观看| 欧美黄色成人网| 成人妇女免费播放久久久| 国产一区二区三区直播精品电影| 久久精品小视频| 91在线网站视频| 在线亚洲欧美视频| 亚洲色图欧美制服丝袜另类第一页| 日韩欧美中文免费| 欧美黄色www| 欧美一级成年大片在线观看| 国产精品人成电影| 欧美成人免费小视频| 国产午夜精品视频免费不卡69堂| 国产精品扒开腿做爽爽爽男男| 欧美黑人xxxx| 欧美福利视频网站| 97在线看免费观看视频在线观看| 国产成人av网址| 久久免费成人精品视频| www.日韩.com| 日韩美女福利视频| 欧美性xxxxx| 91免费国产网站| 欧美激情xxxxx| 午夜精品久久久久久久白皮肤| 成人欧美一区二区三区黑人| 国产日韩欧美视频在线| 国产精品成人一区二区三区吃奶| 欧美香蕉大胸在线视频观看| 亚洲第一精品自拍| 成人免费在线视频网址| 91久久在线观看| 亚洲第一二三四五区| 亚洲欧洲一区二区三区久久| 久久中文久久字幕| 91精品在线看| 国产91色在线播放| 欧美日在线观看| 久久午夜a级毛片| 人妖精品videosex性欧美| 欧美亚洲激情在线| 精品动漫一区二区| 狠狠操狠狠色综合网| 亚洲精品美女免费| 日韩高清免费在线| 在线观看欧美日韩国产| 亚洲2020天天堂在线观看| 欧美人成在线视频| 欧美另类高清videos| 97精品一区二区视频在线观看| 国产精品18久久久久久首页狼| 欧美亚洲一级片| 日本成人免费在线| 亚洲人成在线一二| 成人写真福利网| 成人免费网站在线| 欧美色另类天堂2015| 久久久久北条麻妃免费看| 国产精品网红直播| 国产美女91呻吟求| 欧美精品成人91久久久久久久| 中文欧美日本在线资源| 国产www精品| 国产一区二区色| 国产精品高清在线观看| 亚洲精品一区久久久久久| 国产日韩精品一区二区| 亚洲精品国产成人| 国产精品稀缺呦系列在线| 亚洲网站视频福利| 国产精品视频一区二区三区四| 欧美精品在线网站| 久久精品小视频| 成人福利网站在线观看11| 热久久99这里有精品| 欧洲s码亚洲m码精品一区|