[英]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.