JSP跳转方式

Forward和 sendRedirect

Forward是服务器内部跳转
sendRedirect是重定向

Jsp写法
<%
response.sendRedirect("_06_ServletToJsp.jsp");
后面的代码依旧会执行,和跳转页面用的是同一个request对象
会请求两次,并且地址栏会变成跳转的页面的地址
如果 对页面传值 比如 A.jsp?name=222 在 被跳转页面 request.getParameter 是获取不到数据的
同理 调用request.setAttribute(“aa”, 11); 方法设置的值,在被跳转页面 依然获取不到
因为 是两次请求,两个request对象,数据不互通
%>

<jsp:forward page="/xxx" />
后面代码不会执行,并且和跳转页面不是同一个request对象
只会请求一次,并且地址栏不变

通过地址栏传递值 A.jsp?name=222 在 被跳转页面 request.getParameter 可以获取数据
同理 调用request.setAttribute(“aa”, 11); 方法设置的值,在被跳转页面 依然能获取到数据
因为 是1次请求,1个request对象,数据互通

总结 : response.sendRedirect 和jsp:forward的区别
1 前者后面代码会执行,后者不会执行
2 前者地址栏会发生变化,显示被跳转页面的路径,后者不变,依旧是请求的页面地址
3 前者是两个request对象,数据不互通,后者是1个对象,数据互通
4 前者需要客户端往返,后者直接在服务器内部跳转

Java写法
sendRedirect :
response.sendRedirect( request.getContextPath() + “/xxx.jsp” );
这里 / 默认定位到 webapps 下,也就是服务器根目录,所需 需要加上项目名进行访问

Forward:
this.getServletConfig().getServletContext()
.getRequestDispatcher("/xxx").forward(request, response);
必须加 / ,代表项目根目录(webroot)
并且 后面的代码,会执行,jsp的不会执行,是因为生成servlet的时候,自动加了return,

猜你喜欢

转载自blog.csdn.net/a290575479/article/details/106787428