重定向
重定向功能是让浏览器重新发生请求,但是将请求的是另外一个Servlet。
方式一:设定响应头Location
response.setHeader(“Location”, URL);
方式二:直接调用重定向方法
response.sendRedirect(URL);
转发
转发同样能够实现跳转,但它与重定向有所不同,转发实现跳转是由服务器内部实现的,即一个Servlet收到请求后,将请求对象、响应对象给与另一个Servlet,由它来向客户端完成响应。
• request.getRequestDispatcher(转发至URL).forward(req,resp);
注意:虽然转发中注入了当前的请求和响应对象,但转发目标servlet使用的请求响应对象和传入的req、resp并不是同一个!
System.out.println(request);
request.getRequestDispatcher("index2.jsp").forward(request, response);
分别打印
org.apache.catalina.connector.RequestFacade@54a9387
org.apache.catalina.core.ApplicationHttpRequest@a6a435f
转发与重定向的区别
1)重定向两次请求两次响应,转发对于客户端一次请求响应一次
2)重定向地址栏的地址变化,转发地址不变
3)重新定向可以访问外部网站 转发只能访问内部资源
4)转发的性能要优于重定向
重定向和转发的地址问题
客户端地址:
是客户端去访问服务器的地址,服务器外部的地址,特点:写上web应用名称。
客户端对于资源的请求实际上都是客户端地址,如Html里面的src/href都是:/WebAppName/资源
重定向是客户端两次的请求,因此redirect(客户端地址)
服务器端地址:
服务器内部资源的跳转的地址,特点:不需要写web应用的名称。
转发采用的是服务器内部资源的跳转,默认即是在这一个应用内部的,
因此 request.getRequestDispatcher("/xxxServlet").forward(req,res) 即可