在javaWeb中页面跳转一般有三种形式,sendRedirect,forward和include,三者有什么区别呢?
我先进行说明,再以一个小例子说明
一、sendRedirect
使用方式
response.sendRedirect();
服务器根据逻辑,发送一个状态码,告诉浏览器去请求指定的地址,把需要的参数放在转发的地址里面。由于是一次新的申请,原先的request就不能读取了,可以使用session代替,或者使用include,和forward代替
二、forward
使用方式
request.getRequestDispatcher("/first.jsp").forward(request, response);
页面会是first.jsp的内容,地址栏不变
可以使用设置属性
三、include
使用方式
request.getRequestDispatcher("/first.jsp").include(request, response);
页面会同时包含当前页面和first.jsp的内容
可以使用设置属性
下面是一个例子
index.jsp
%>
Insert title hereindex.jsp 页面
third.jsp带id123456
可以获取id为:
first.jsp
%>
Insert title herefirst.jsp 页面
提交的ID:
response.sendRedirect(request.getContextPath()+"/index.jsp");
System.out.println("first.jsp有访问过了");
%>
second.jsp
%>
Insert title heresecond.jsp 页面
request.getRequestDispatcher("/index.jsp").forward(request, response);
%>
提交的ID:
third.jsp
%>
Insert title herethird.jsp 页面
提交的ID:
request.getRequestDispatcher("/fourth.jsp").include(request, response);
request.getRequestDispatcher("/index.jsp").include(request, response);
%>
fourth.jsp
%>
Insert title herefourth.jsp 页面
接下来运行服务器(使用的是TomCat8.0)
访问项目
点击第一个链接
页面没有变化,但是控制台有输出,表示访问过了
我们试着传一个参数过去id=123456
不能获取id,说明是浏览器重新发出的一个请求,request已经被销毁,这个是一个新的request
下面放上流程图
点击第三个连接
页面没有变化,但是地址栏发生变化
我们传一个参数进去
有了,可以显示id,说明是同一个request
下面放上流程图
因为forward是服务器内部跳转,会带着request一起到下一个页面,所以id可以获得
接着点击第五条链接
页面发生变化,同时包含了,third.jsp和fourth.jsp的内容
我们传一个参数
可以获得request
下面是流程图
本人知识有限,如有错误,望指出
此文系原创,转载请声明出处。