1、有时候,客户端发起请求;但是,服务端Servlet可能无法完成全部工作。这时, 我们需要使用请求重定向来完成后续的工作。就是客户端发送了个请求给Servlet,但是Servlet里的Servlet1不满足,又找了个Servlet2,Servlet2能满足。总的来说,与请求转发的区别就是Servlt1啥都没干。
eg:if(username.equals("lucy")&&password.equals("123456")) {
//request.getContextPath()为:/Redirect01
System.out.println(request.getContextPath()); //登录成功则重定向到welcome页面
response.sendRedirect(request.getContextPath()+"/welcome.html");
}else { //登录失败则重定向到login页面
response.sendRedirect(request.getContextPath()+"/login.html");
2、 重定向的使用场景:
1、属于重定向,也是客户端跳转,相当于客户端向服务端发送请求之后,服务器返回一个响应,客户端接收到响应之后又向服务端发送一次请求,一共是2次请求,前后页不共用一个request,不能读取转向前通过request.setAttribute()设置的属性值。
2、在前后两次执行后,地址栏发生改变,是目标文件的地址。
3、可以转向到本web应用之外的页面和网站,所以转向的速度相对要慢。
4、URL种所包含的"/"表示根目录的路径。
特殊的应用:对数据进行修改、删除、添加操作的时候,应该用response.sendRedirect()。如果是采用了 request.getRequestDispatcher().forward(request,response),那么操作前后的地址栏都不会发生 改变,仍然是修改的控制器,如果此时再对当前页面刷新的话,就会重新发送一次请求对数据进行修改,这也就是有的人在刷新一次页面就增加一条数据的原因
标签:重定向,getContextPath,request,请求,页面,客户端 From: https://www.cnblogs.com/CHOSEN1Chen/p/17743967.html