1. 程式人生 > >JSP頁面跳轉的幾種方法以及注意點

JSP頁面跳轉的幾種方法以及注意點

       最近自己在做專案時遇到一個問題,明明加了response.sendRedirect() ,系統也執行了,但是它就是不跳轉;最後在網上找到原因如下:

       首先我們要知道的是用response.sendRedirect做轉向的原理,它其實是向瀏覽器傳送一個特殊的Header,然後由瀏覽器來做轉向,轉到指定的頁面,所以sendRedirect時,瀏覽器的位址列上可以看到地址的變化。 而用<jsp:forward page=""/>則不同,它是直接在server做的,瀏覽器並不知道,也不和瀏覽器打交道,這從瀏覽器的地址並不變化可以看出。

        所以使用response.sendRedirect時就需要注意以下兩點:


       1、在使用response.sendRedirect時,前面不能有HTML輸出。
       這並不是絕對的,不能有HTML輸出其實是指不能有HTML被送到了瀏覽器。事實上現在的server都有cache機制,一般在8K(我是說JSP SERVER),這就意味著,除非你關閉了cache,或者你使用了out.flush()強制重新整理,那麼在使用sendRedirect之前,有少量的HTML輸出也是允許的。
        如下圖所示,<jsp:include flush="true" page="html/userlogin.html"></jsp:include>必須在jsp語句之後才能引入,否則就會出現錯誤!

       

        2、在response.sendRedirect之後,應該緊跟一句return;
        我們已經知道response.sendRedirect是通過瀏覽器來做轉向的,所以只有在頁面處理完成後,才會有實際的動作。既然你已經要做轉向了,那麼後的輸出還有什麼意義呢?而且有可能會因為後面的輸出導致轉向失敗。

        JSP中還有的跳轉語句包括:request.getRequestDispatcher(“”);

         request.getRequestDispatcher().forward(request.response)這個語句意思是將客戶端的請求轉向(forward)到getRequestDispatcher()方法中引數定義的頁面或者連結。
         說通俗點就是,當一個客戶端的請求到這個頁面後,不做處理或者不處理完,將請求轉給另一個頁面處理,然後再響應給客戶端。

         而這兩種跳轉方法的區別就在於:

         getRequestDispatcher是伺服器內部跳轉,位址列資訊不變,只能跳轉到web應用內的網頁。
         sendRedirect是頁面重定向,位址列資訊改變,可以跳轉到任意網頁。

相關推薦

JSP頁面方法以及注意

       最近自己在做專案時遇到一個問題,明明加了response.sendRedirect() ,系統也執行了,但是它就是不跳轉;最後在網上找到原因如下:        首先我們要知道的是用r

web頁面方式詳解

在做web開發中,頁面跳轉的方式有很多種,然而有些時候這些跳轉如何用到恰到好處卻很容易被忽視。 客戶端觸發跳轉有如下幾種 使用meta元資訊 ? 1 2 <!--如下表示

jsp自動重新整理的方法以及 meta屬性簡略講解

轉載https://blog.csdn.net/hellogmm/article/details/8544815下面是我摘抄的一些在標題新增程式碼response.setHeader("Refresh", "5;XXX.jsp");定時5秒後跳轉到指定頁面response.s

mybatis中LIKE模糊查詢的寫法以及注意

mybatis中對於使用like來進行模糊查詢的幾種方式: (1)使用${...} 注意:由於$是引數直接注入的,導致這種寫法,大括號裡面不能註明jdbcType,不然會報錯 org.mybatis.spring.MyBatisSystemException: nested

JS頁面方法以及註解

來介紹一下我所用的JS跳轉頁面的方法 第一種:這是最常用的了 window.location.href <script language="javascript" type="text/javascript"> window.location.href="l

Jsp頁面和js控制頁面方法

Jsp 頁面跳轉的幾種方法 1. RequestDispatcher.forward() 在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet或者是JSP到另外的一個Servlet、JSP 或普通HTML檔

JS頁面常用的方法

class define bst top color defined rip dex text 第一種:(常用) <script language="javascript" type="text/javascript"> window.location.

JSP頁面方法詳解

  1. RequestDispatcher.forward() 是在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet or JSP到另外一個Servlet,JSP 或普通HTML檔案,也即你的form提交至a.

常用的頁面URL的方法

<html> <head> <meta http-equiv="Content-Language" content="zh-cn"> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"

jsp頁面方法集合

java程式碼: package Test.Action.UserAction; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; @Sup

Jsp-頁面的五方式

1. RequestDispatcher.forward() 是在伺服器端起作用,當使用forward()時,Servlet engine傳遞HTTP請求從當前的Servlet or JSP到另外一個Servlet,JSP 或普通HTML檔案,也即你的form提交至a.

JSP頁面方法總結

java.lang.IllegalStateException: Error: Attempt to clear a buffer that's already been flushedorg.apache.jasper.runtime.PageContextImpl.doForward(PageContex

JSP-頁面相關(轉發、重定,會話以及cookie、application)

一.頁面跳轉的資料傳輸 示例程式碼 <form action="welcome.jsp" method="post"> 使用者名稱:<input type="text" name="username"><

js數組遍歷的常用的方法以及差異和性能優化

object length 回調 value 鏈式操作 item IT rip 需要 <script type="text/javascript"> /*對比: 1、map速度比foreach快

MVC後臺頁面的常用方法

1、利用View()直接返回檢視(不執行Action方法) public class ScoreController : Controller { public ActionResult Index(string name, int age) { #regio

從預設的index.jsp頁面或轉發到其他頁面

使用forward還是redirect都可以完成跳轉       forward:瀏覽器地址不變,所以存在重複提交的問題    <%  pageContext.forward("student/list");   %

從默認的index.jsp頁面或轉發到其他頁面

redirect 不變 word pan student response 使用 重復 jsp頁面跳轉 使用forward還是redirect都可以完成跳轉 forward:瀏覽器地址不變,所以存在重復提交的問題 <% pageContext.fo

Android 隱士方式

1、只有 配置 action 進行跳轉 <intent-filter> <action android:name="testarouter"></action> <category android:name="android.i

基礎面試題之 —— CSS實現簡單頁面佈局的方法

頁面佈局是前端面試中CSS部分經常考到的問題,本文列舉幾種簡單頁面佈局的方法: 絕對定位 + margin float inline-block flex 附加:響應式佈局 其中幾種方法在CSS程式碼上有相似之處,也有侷限或是需要特殊注意的地方,下文具體指出。

html頁面傳值方法

本方法比較原始,不喜勿噴 //源頁面 Window.location.href="record.html?recId="+recId; 目標頁面 function getUrlParam (name) { var reg = new RegExp("(^|&)" +