dispatcher.forward()和<jsp:forward>之间有什么区别吗?</jsp:forward>

时间:2012-09-06 12:45:26

标签: java jsp java-ee

以下操作完全相同:

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

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

3 个答案:

答案 0 :(得分:2)

两者都相同,只有差异是为tag handler编写的单独的<jsp:forward>类。

请参阅tutorial了解代码处理程序。

答案 1 :(得分:1)

没有功能差异。 <jsp:forward>和RequestDispatcher.forward()实际上相同<jsp:forward>内部使用RequestDispatcher.forward()来转发请求。是动作标签,还有标签处理程序类。 永远记住JSP也会通过Web容器转换为servlet。

答案 2 :(得分: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()时,控制台将输出“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/>之后的代码将无法运行。