区别:
连环请求条件下:
RquestDispatcher().forward():
1.采用forward()方法,request会在同一服务器上的不同的servlet之间传递,但整个过程结束前并不会返回给客户端.
2.forward()方法的整个过程中,requset和response在不同的servlet之间传递,其途径的servlet都可以取到其中存贮的参数.
3.forward()方法在跳转时并不会对浏览器地址栏中的内容做任何改变,用户看不到整个请求的过程.
4.forward()方法的速度会快一些,它完成整个流程才会返回给客户端一次数据.
SendRedirect():
1.对于SendRedirect()方法,request可能会被转移到新的主机或者服务器上.
2.SendRedirect()方法产生的请求可以会在浏览器地址栏中显示.若发送的是一个URL,则会将URL返回给客户端,然后将URL作为新的请求再次请求服务器
3.SendRedirect()方法在每次请求都会产生一个新的request和一个新的response,旧的将被回收.
4.SendRedirect()方法的速度要慢一些,因为每次请求都要返回一次数据给客户端,且每次都要产生新的request和新的response.
5.若需要在请求中存储数据,只能考虑存在session中或者拼接在地址栏后面已请求的方式传递.
优劣:
forward()可进行不同业务逻辑间的数据传递,速度较快,可对一个页面进行分次加载,但是不能中途更换协议.
SendRedirect()在重定向请求时,用户进行刷新操作时不会重复提交请求.
小技巧:
可将jsp文件放置在WEB-INF文件夹中,URL无法访问该文件,但是servlet可以访问,request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request,response);