转发(Request)和重定向(Response)的区别(图片详解)
程序员文章站
2022-04-20 22:21:11
...
1.转发(Request)
1.一种在服务器内部的资源跳转一个方式
2.浏览器发送请求到服务器的A资源,A资解决一部分后转发到B资源再进行处理
2.重定向(Response)
1.浏览器发送请求到A资源,但A资源处解决不了请求的信息数据
2.A资源会响应消息给浏览器,告诉浏览器重定向到另一个资源,也就是B资源
3.A资源会响应给浏览器一个状态码:302 和响应头localtion:B资源的路径
3.转发(Request)和重定向(Response)的区别
转发用forword 重定向用redirect
1.请求次数
转发:只请求一次 重定向:请求两次
2.地址栏变化:
转发:地址栏不发生变化 重定向:地址栏发生变化
3.发生位置:
转发:发生在服务器而浏览器全然不知 重定向:发生在浏览器
4.访问资源:
转发:只能访问当前服务器的资源 重定向:可以访问其他服务器的资源
5.资源共享:
转发:可以使用request对象来共享资源 重定向:不能使用request对象共享资源
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//request对象存值
req.setAttribute("msg","123");
//重定向
resp.sendRedirect("/web_Response/demo01");
}
@WebServlet("/demo01")
public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object msg = request.getAttribute("msg");
System.out.println(msg);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//存值
req.setAttribute("msg","123");
//转发
req.getRequestDispatcher("/demo01").forward(req,resp);
}
@WebServlet("/demo01")
public class AServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object msg = request.getAttribute("msg");
System.out.println(msg);
}
路径分类
1.相对路径:通过相对路径不可以确定唯一资源
1.如:以./index.html开头
2.不以/开头,以./开头的路径
规则:找到当前资源和目标资源之间的相对位置关系
1. ./:当前目录
2. ../:后退一级目录
2.绝对路径
1.:如:http://localhost/day15/response /day15/response
2.:以/开头的路径
3:规则:判断定义的路径时给谁用的?判断请求将来从哪里出发
1.给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
建议虚拟目录动态获取:request.getContextPath();
<a> , <form> , 重定向...
2.给服务器使用:需要加虚拟目录
转发路径