資源描述:
《servlet頁面跳轉(zhuǎn)方法總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、Servlet頁面跳轉(zhuǎn)方法簡介JSP頁面中,實(shí)現(xiàn)頁面跳轉(zhuǎn)發(fā)生在兩種情況下。一種是發(fā)生在servlet中,這是一種比較常見的跳轉(zhuǎn)頁面的方式,它的優(yōu)點(diǎn)是可以在servlet中做大量業(yè)務(wù)邏輯處理,通過處理最終返回到相應(yīng)的顯示介面,這種方法隱藏業(yè)務(wù)邏輯,符合MVC架構(gòu)設(shè)計(jì);另一種方式是在JSP頁面中,因?yàn)镴SP也就是特殊的servlet,不過還是有點(diǎn)差異滴,這里可以請(qǐng)讀者自行查閱其相異之處。通過JSP進(jìn)行頁面的跳轉(zhuǎn)一般情況是傳遞參數(shù)比較小,不需要過多的邏輯處理,對(duì)安全性要求較低,能夠進(jìn)行簡單的數(shù)據(jù)顯示可以了;這種方式操作更加靈活;在簡單頁面跳轉(zhuǎn)過程中使用較多。下面介紹兩種方式的一些常見方法:Ser
2、vlet:在servlet中,一般在doGet(),doPost()等方法里,實(shí)現(xiàn)頁面的跳轉(zhuǎn)。sendRedirect方式:格式:response.sendRedirect(“index.jsp”);注釋:當(dāng)前頁面跳轉(zhuǎn)到index.jsp頁頁面(可以跳轉(zhuǎn)的相應(yīng)路徑);sendRedirect可以將頁面跳轉(zhuǎn)到任何頁面,不只局限于當(dāng)前的web應(yīng)用中,還可以跳轉(zhuǎn)到其他的網(wǎng)站頁面。如:response.sendRedirect("http://www.sohu.com");這種方式跳轉(zhuǎn)后瀏覽器地址欄發(fā)生變化,如果這種方式要傳值出去的話,只能在使用QueryString這種方式,在url中帶para
3、meter或者放在session中,而無法使用request.setAttribute來傳遞。forward方式:格式:request.getSession().setAttribute("user","jake");request.getRequestDispatcher("index.jsp").forward(request,response);Servlet中forward方式只能跳轉(zhuǎn)到本web應(yīng)用中的頁面上。在頁面跳轉(zhuǎn)后,瀏覽器地址欄不會(huì)發(fā)生變化。開發(fā)人員在使用這種方式跳轉(zhuǎn),進(jìn)行參數(shù)傳值可以使用三種方法:urlquerystring,Session,request.setAttr
4、ibute();JSP頁面跳轉(zhuǎn)方式:sendRedirect();response.sendRedirect();這種方式和servlet的response.sendRedirect()方式用戶一樣。但是在使用此語句前不允許有out.flush();如果有,系統(tǒng)會(huì)有異常:java.lang.IllegalStateException:Can'tsendRedirect()afterdatahascommittedtotheclient.atcom.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpR
5、esponse.java:558)這種方式頁面跳轉(zhuǎn)后瀏覽器地址欄變化;如果要跳轉(zhuǎn)到其他主機(jī)下,頁面跳轉(zhuǎn)后,session等相呼應(yīng)操作均已經(jīng)失效;別人的應(yīng)用不會(huì)知道你的應(yīng)用的Session和其他屬相。response.setHeader();格式:response.setHeader("index.jsp","user.jsp");這條語句前不允許有out.flush(),如果有,頁面不會(huì)跳轉(zhuǎn)。跳轉(zhuǎn)后瀏覽器地欄變化此語句后面的語句執(zhí)行完成后才會(huì)跳轉(zhuǎn)。格式:此語句前不允許有out.flush(),如果
6、有,會(huì)有異常:java.lang.IllegalStateException:forward()notallowedafterbufferhascommitted.atcom.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)atcom.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101)atcom.caucho.jsp.PageContextImpl.forward
7、(PageContextImpl.java:836)跳轉(zhuǎn)后瀏覽器地址欄不變,但是只能跳下此語句后面的語句執(zhí)行完成后才會(huì)跳轉(zhuǎn)。跳轉(zhuǎn)效率比較:A、:效率高,速度快1.地址欄不改變跳轉(zhuǎn)-服務(wù)器端跳轉(zhuǎn),服務(wù)器之間內(nèi)部轉(zhuǎn),相同的request,可傳參;2.執(zhí)行到跳轉(zhuǎn)語句后無條件立刻跳轉(zhuǎn),之后的代碼不再被執(zhí)行;注意:如果使用forward跳轉(zhuǎn),則一定要在跳轉(zhuǎn)之前釋放掉全部的