重定向和转发都能让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。
-
重定向是两次请求,转发是同一次请求。
-
重定向浏览器地址栏的URL改变;而转发浏览器地址栏的URL不变。
-
重定向传输的信息会丢失;而转发传输的信息不会丢失。
-
重定向不但可以在同一服务器不同应用里进行跳转,而且可以跳转到第三方服务器;而转发只能在同一服务器同一应用里跳转。
-
重定向与转发使用相对路径时候,路径没有区别。
使用绝对路径时候,重定向是服务器根路径开始,转发是应用项目根路径开始。路径例子如下:
服务器是localhost:8080,项目根路径是/testweb,访问首页localhost:8080/testweb/index
- 都使用相对路径访问home页,即response.sendRedirect(“home”) 和 request.getRequestDispatcher(“home”).forward(request, response),都访问的是localhost:8080/testweb/home。
- 重定向使用绝对路径访问home页,即response.sendRedirect(“/home”),重定向sendRedirect访问的是localhost:8080/home,
如果要访问localhost:8080/testweb/home,需要添加上下文(项目根路径),即response.sendRedirect(request.getContextPath()+“/home”); - 转发使用绝对路径访问home页,即request.getRequestDispatcher(“/home”).forward(request, response),转发forward访问的是localhost:8080/testweb/home。