以下操作是否完全相同:
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>
.
请参阅标签处理程序的教程。
没有功能上的区别。两者<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/>
将无法运行。