有以下幾種操作完全相同:dispatcher.forward()和<jsp:forward>之間有什麼區別嗎?
request.setAttribute(name,"visited");
requestDispatcher.forward(request,response)
和
<jsp:forward page="page.jsp">
<jsp:param name="status" value="visited"/>
</jsp:forward>
有以下幾種操作完全相同:dispatcher.forward()和<jsp:forward>之間有什麼區別嗎?
request.setAttribute(name,"visited");
requestDispatcher.forward(request,response)
和
<jsp:forward page="page.jsp">
<jsp:param name="status" value="visited"/>
</jsp:forward>
都是一樣的,唯一不同的是單獨tag handler
類是<jsp:forward>
寫的。
有關標籤處理程序,請參閱tutorial。
沒有功能差異。 <jsp:forward>
和RequestDispatcher.forward()實際上都是<jsp:forward>
,它們在內部使用RequestDispatcher.forward()
來轉發請求。是動作標籤,並且有標籤處理程序類。 一直記得JSP也會通過web容器轉換成一個servlet。
如果僅考慮轉發行爲,則不存在功能差異。但他們似乎並不完全一樣。 我測試下面的代碼。
<%
System.out.println("source 1");
RequestDispatcher disp = request.getRequestDispatcher("1_f1.jsp");
disp.forward(request, response);
System.out.println("source 2");
%>
和
<%
System.out.println("source 1");
%>
<jsp:forward page="1_f1.jsp"/>
<%
System.out.println("source 2");
%>
當使用disp.forward()
,控制檯將輸出 「源2」。 但使用<jsp:forward/>
時,不會輸出「source 2」。
將轉換爲以下語句。
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
if (true) {
_jspx_page_context.forward("1_f1.jsp");
return;
}
這是return;
聲明。所以,<jsp:forward/>
之後的代碼將不會運行。
有一次,當我第一次閱讀jsp:forward tag很久以前,我很困惑,因爲根據我的知識,沒有設置任何參數,我想知道爲什麼沒有而不是來傳遞屬性。 –
Sudeep