重定向:一种资源跳转方式(浏览器向资源A发出请求,A处理不了(状态码302),将能处理的B的位置(响应头)响应给浏览器,从而浏览器自动向B发出请求的过程)
resp.setStatus(302); resp.setHeader("location","资源B路径");简化完成重定向:response.sendRedirect("资源B路径");
重定向的特点:浏览器地址栏发生改变;可以重定向到任意位置的资源(服务器内部、外部皆可);两次请求,不能在多个资源使用request共享数据
路径问题:浏览器使用需要加虚拟目录(项目访问目录)(重定向要把路径发给浏览器所以需要);服务端使用不需要加(转发是服务器内部跳转方式,所以不加)
动态获取虚拟目录:String contextPath = request.getContextPath();(降低耦合)
简化方式完成:response.sendRedirect(contextPath+"/resp2");
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import javax.xml.stream.Location;
import java.io.IOException;
@WebServlet("/resp1")
public class ServletResponse1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//重定向
// //设置响应状态码
// response.setStatus(302);
// //设置响应头
// response.setHeader("Location","/resp2");
//动态获取虚拟目录
String contextPath = request.getContextPath();
//简化方式完成
response.sendRedirect(contextPath+"/resp2");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
网友评论