为了账号安全,请及时绑定邮箱和手机立即绑定

请求重定向和服务器内部跳转中path的问题?

有一些地方还是没有弄明白。为什么请求重定向中必须获取上下文地址,如response.sendRedirect(request.getContextPath()+"/test.jsp"); 而服务器内部跳转则不需要获得上下文地址,直接写: request.getRequestDispatcher("/test.jsp").forward(request, response); 猜测是否是因为这两种请求方式分别在服务器内外,在服务器外不知道当前项目根目录,就必须通过request.getContextPath()来获得地址,而服务器内已经知晓了当前项目根目录,所以直接可以用/代替。 请问是这样吗?

正在回答

3 回答

你是不是弄混了 这并不是重定向和转发的区别,而是为了讲解绝对路径和相对路径的区别才这么写的。

2 回复 有任何疑惑可以回复我~
#1

qq_这是只仓鼠_0

抱歉弄错了些,重定向中的request.getContextPath()+"/test.jsp"这个是绝对路径,在转发里/test.jsp也是绝对路径,我误解了,而重定向中这样写就会跳到服务器根目录/test.jsp所以重定向中的/代表的是服务器根目录,而转发的/代表的项目根目录,不过假如使用../test.jsp这种相对路径感觉上更好些。
2017-03-06 回复 有任何疑惑可以回复我~
#2

qq_这是只仓鼠_0

查阅了一些资料后,发现重定向是通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,让浏览器对在location中指定的URL提出请求,可以访问外部页面,不局限于本WEBAPP,所以路径上它的根目录是以服务器为根目录,而转发是通过服务器内部交接,也局限于本WEBAPP内部,所以它的根目录是项目根目录
2017-03-06 回复 有任何疑惑可以回复我~
#3

盯叮町玎仃 回复 qq_这是只仓鼠_0

你好,我想请问一下,为什么我用response.sendRedirect("../test.jsp");,重定向后页面的地址是localhost:8080/test.jsp?
2017-07-03 回复 有任何疑惑可以回复我~

请求转发与请求重定向的区别:

重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次请求对象不会保存,地址栏的URL地址会改变; 

请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变;


1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请求重定向和服务器内部跳转中path的问题?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信