请求转发:
RequestDispatcher getRequestDispatcher(String path);//获取请求分发器
void forward(ServletRequest request,ServletResponse response);//请求转发
一般写法:request.getRequestDispatcher("/路径").forward(request,response);
特点:
请求只有一次,且可以共享请求中的数据,因为是同一个request;url仍然是之前那个,但是页面显示的是转发之后的页面;可以访问WEF-INF中的资源;不能跨域访问(这里的跨域指的是当前项目,即不能访问其他域名的资源,举个例子就是不能通过forward访问到www.baidu.com)
注意:请求转发可能会使数据重复提交
相当于<jsp:forward>
请求包含:
void include(ServletRequest request, ServletResponse response);//请求包含
一般写法:request.getRequestDispatcher("/路径").include(request,response);
特点:
属于页面嵌套,即include的页面嵌到当前页面中显示,一个页面有来自其他页面的内容
<jsp:include>和<%@include>区别:
<jsp:include>是动态包含,用于包含动态页面,在运行阶段包含在一起,各自生产文件
<%@include>是静态包含,用于包含静态页面,在翻译阶段就已经包含在一起了,只生成一个合并后的文件
两者作用相同,只是要包含的页面状态不同
url重定向:
response.sendRedirect(url);
特点:
请求有两次,不能共享请求中的数据,因为是两个不同的request,请求的页面不同;url改变,页面显示的是转发之后的页面;不可以访问WEF-INF中的资源;能跨域访问