次の操作はまったく同じですか:
request.setAttribute(name,"visited");
requestDispatcher.forward(request,response)
と
<jsp:forward page="page.jsp">
<jsp:param name="status" value="visited"/>
</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>
。
タグハンドラのチュートリアルを参照してください。
機能的な違いはありません。RequestDispatcher.forward()とRequestDispatcher.forward()はどちらも<jsp:forward>
実際には同じで あり、リクエストを転送するために<jsp:forward>
内部的に使用され ます。RequestDispatcher.forward()
アクションタグであり、タグハンドラクラスがあります。JSPもWebコンテナによってサーブレットに変換されることを常に覚えておいてください。
フォワードアクションのみを考慮すれば、機能的な違いはありません。しかし、それらは完全に同じではないようです。次のコードをテストします。
<%
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/>
は「ソース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/>
は実行されません。