java foward_java 中sendredirect()和forward()方法的区别
HttpServletResponse.sendRedirect與RequestDispatcher.forward方法都可以實(shí)現(xiàn)獲取相應(yīng)URL資源。
sendRedirect實(shí)現(xiàn)請(qǐng)求重定向,forward實(shí)現(xiàn)的是請(qǐng)求轉(zhuǎn)發(fā)。
在web服務(wù)器內(nèi)部的處理機(jī)制也是不一樣的。
1. 跳轉(zhuǎn)方式
運(yùn)用forward方法只能重定向到同一個(gè)Web應(yīng)用程序中的一個(gè)資源。而sendRedirect方法可以讓你重定向到任何URL。
表單form的action= "/uu ";sendRedirect( "/uu ");表示相對(duì)于服務(wù)器根路徑。
2.forward重定向后,瀏覽器url地址不變,sendRedirect轉(zhuǎn)發(fā)后,瀏覽器url地址變?yōu)槟康膗rl地址。
forward()無法重定向至有frame的jsp文件,可以重定向至有frame的html文件, 同時(shí)forward()無法在后面帶參數(shù)傳遞,
比如servlet?name=frank,這樣不行,可以程序內(nèi)通過response.setAttribute( "name ",name)來傳至下一個(gè)頁面.
3. 使用forward重定向的過程,是瀏覽器先向目的Servlet發(fā)送一次Request請(qǐng)求,然后再服務(wù)器端由Servlet再將請(qǐng)求發(fā)送到目的url,再由服務(wù)器端Servlet返回Response到瀏覽器端。瀏覽器和服務(wù)器一次請(qǐng)求響應(yīng)。
使用sendRedirect轉(zhuǎn)發(fā)的過程,瀏覽器先向目的Servlet發(fā)送一次請(qǐng)求,Servlet看到sendRedirect將目的url返回到瀏覽器,瀏覽器再去請(qǐng)求目的url,目的url再返回response到瀏覽器。瀏覽器和服務(wù)器兩次請(qǐng)求響應(yīng)。
4. forward方法的調(diào)用者與被調(diào)用者之間共享Request和Response
sendRedirect方法由于兩次瀏覽器服務(wù)器請(qǐng)求,所以有兩個(gè)Request和Response。
如果使用request.setAttribute傳遞一些屬性就需要用forward,如果想要跳轉(zhuǎn)到別的應(yīng)用的資源,就需要用sendRedirect。
5.無論是forward方法還是sendRedirect方法調(diào)用前面都不能有PrintWriter輸出到客戶端。
forward方法報(bào)錯(cuò): Java.lang.IllegalStateException: Cannot forward after response has been committed
sendRedirect報(bào)錯(cuò):java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
總結(jié)
以上所述是小編給大家介紹的java 中sendredirect()和forward()方法的區(qū)別,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
總結(jié)
以上是生活随笔為你收集整理的java foward_java 中sendredirect()和forward()方法的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c6x Linux 内核中断分析
- 下一篇: 完全自主可控的安全关键领域仿真测试软件S