1

次の操作はまったく同じですか:

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

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

3 に答える 3

2

どちらも同じですが、違いは別tag handlerのクラスが書かれていることだけです<jsp:forward>

タグハンドラのチュートリアルを参照してください。

于 2012-09-06T12:54:19.120 に答える
1

機能的な違いはありません。RequestDispatcher.forward()とRequestDispatcher.forward()はどちらも<jsp:forward>実際には同じで あり、リクエストを転送するために<jsp:forward>内部的に使用され ます。RequestDispatcher.forward()アクションタグであり、タグハンドラクラスがあります。JSPもWebコンテナによってサーブレットに変換されることを常に覚えておいてください。

于 2012-09-06T13:02:24.190 に答える
0

フォワードアクションのみを考慮すれば、機能的な違いはありません。しかし、それらは完全に同じではないようです。次のコードをテストします。

<%
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/>は実行されません。

于 2014-10-23T01:09:15.457 に答える