调用方式不一样
转发是
ServletContext.getRequestDispatcher(url).forward(req,rops);
,url只能使用绝对路径,因为ServletRequest具有相对路径的概念;而ServletContext对象无此概念。当使用绝对路径时,/
代表的是Web项目,代表http://localhost:8080/项目名/
。request.getRequestDispatcher(url).forward(req,rops);
,url可以使用相对路径。<jsp:forward page="welcome.jsp"></jsp:forward>
。
重定向是
response.sendRedirect(url);
浏览器地址栏是否发生变化
转发不发生变化,重定向会发生变化。
参数的传递方式不一样
重定向response.sendRedirect(url)
跳转到指定的URL地址,产生一个新的Request,所以要传递参数只有在URL后加参数,如:url?id=1
。
转发request.getRequestDispatcher(url).forward(request, response)
是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,也就是说采用请求转发,Request对象始终存在,不会重新创建。
行为对象不一样
转发是服务器的行为,重定向是客户端浏览器的行为。