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

没有功能上的区别。两者<jsp:forward>和 RequestDispatcher.forward() 都是相同的,实际上在 <jsp:forward>内部使用 RequestDispatcher.forward()来转发请求。是动作标签,并且有标签处理程序类。永远记住 JSP 也会被 web 容器转换为 servlet。

于 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(),控制台会输出“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/>将无法运行。

于 2014-10-23T01:09:15.457 回答