forWard和Redirect区别:
forWard直接请求转发,是服务器端行为,web容器接受请求后,之后的跳转处理都是在服务端内部,客户端并不知道,
redirect间接请求转发,重定向,是客户端行为,客户端每次发出请求,服务端都会给返回给客户端一个状态码和新的location地址,客户端拿到状态码之后在重新跳转新的location.
redirect每次跳转都是2次以上的跳转,所以它的效率是没有forward高的,而且因为不共享request所以传值,所以是没办法使用request传值的。
forward:
适用于各个模块的跳转、
req.getRequestDispatcher("").forward(req, rsp);
1) server内部的跳转
2) 共用同一个request对象
3) 地址栏不变
4) 只能转向同一web应用中的资源
redirect:
适用于登录,注销等
rsp.sendRedirect(req.getContextPath()+"");
1) client的跳转
2) 不共用同一个request对象
3) 地址栏改变
4) 可以转向站外的资源
include:
适用于公共页面
req.getRequestDispatcher("").include(req, rsp);