簡體   English   中英

dispatcher.forward()和。之間有什么區別嗎? <jsp:forward> ?

[英]Is there any difference between dispatcher.forward() and <jsp:forward>?

以下操作完全相同:

request.setAttribute(name,"visited");
requestDispatcher.forward(request,response)

<jsp:forward page="page.jsp">
  <jsp:param name="status" value="visited"/>
</jsp:forward>

兩者都是相同的,唯一的區別是為<jsp:forward>編寫單獨的tag handler類。

請參閱標記處理程序教程

沒有功能差異。 <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() ,控制台將輸出“source 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/>之后的代碼將無法運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM