转发 req.getRequestDispatcher("/要跳转的地址").forward(req, resp);
转发的过程:(以servlet和jsp为例)
浏览器首先发送一个请求到服务器端,服务器端发现匹配的 servlet,并指定它去执行,当这个 servlet 执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的jsp页面,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此 servlet 和 jsp 共享的是同一个request,在 servlet 里面存放的所有东西,在jsp页面中都能取出来。整个过程是一个请求,一个响应。
易错点:
a)地址栏不会改变
b)转发只能转发到当前web应用内的资源
c)在转发过程中,可以把数据保存到request域对象中(因为转发使用同一个request域)
d)转发是在服务器端的跳转,浏览器并不知情
重定向 resp.sendRedirect("/要跳转的地址");
重定向的过程:(以servlet和jsp为例)
浏览器发送一个请求到服务器端,服务器端匹配servlet,这都和请求转发一样,servlet 处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以当这个servlet处理完之后,看到response.senRedirect()方法,立即向浏览器返回这个响应(包含响应报头和新的URL地址),响应告诉浏览器你必须要再发送一个请求,去访问 jsp页面,紧接着浏览器收到这个请求后,立刻又重新发出一个新的请求,去请求 jsp页面。这两个请求互不干扰,相互独立,在前面request里面 setAttribute() 的任何东西,在后面的request里面都获取不了。可见,在重定向里面是两个请求,两个响应。
易错点:
a)地址栏会改变,变成重定向后的地址
b)重定向可以跳转到当前web应用或其他web应用,甚至是外部域名网站
c)不能在重定向的过程中,把数据保存到request中(因为发送第二个request请求时,第一个的request域会失效)
d) 重定向是在浏览器的跳转,浏览器知情
转发和重定向的区别:
转发是在服务器端的跳转,就是浏览器向服务器发送一个请求,服务器直接将请求相关的参数的信息原封不动的传递到该服务器的其他jsp或servlet去处理。而重定向是在浏览器的跳转,服务器会返回给浏览器一个响应报头和新的URL地址,原来的参数或者其他的一些信息,如果服务器端没有特别处理就不存在了,浏览器会访问新的URL所指向的servlet 或 jsp。
注意点:如果要使用request域对象进行数据共享,只能使用转发!!!