为什么请求转发时是跳转到 ../show.jsp ,而不是 /show.jsp

为什么请求转发时是跳转到 ../show.jsp ,而不是 /show.jsp

public void show(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   request.setAttribute("NAME","张三");
   request.getRequestDispatcher("../show.jsp").forward(request,response);
}

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
芝芝兰兰 2019-06-16 15:36:01

同学你好。首先明确浏览器负责解析请求的URL,服务器端根据路径寻找资源。

路径分为三种,分为相对路径、根路径和绝对路径。

1、相对路径

1)从本身的同级目录开始构建的(如果是写在Servlet里,那就是指从WebContent文件夹,在IDEA中是web文件夹开始),以"./"开头,但"./"可省略,例如 要访问的show.jsp在当前页面的同级目录下有两种写法"./show.jsp" 或"show.jsp"。但是在这里,就会被解析成localhost:8080/test/show.jsp

2)"../" 表示上一级目录开始,像在这里,我们请求TestController的路径为“test/show.do”,就需要使用"../show.jsp",跳出test目录。返回到web项目的根路径再去寻找。此时拼出的url才是localhost:8080/show.jsp

2、根路径

特征是最前面加/,代表相对于当前 WEB 站点根目录的路径,一般要带上ContextPath上下文路径(一般为项目名,这个项目中是“/”)。同学使用的“/show.jsp”就是根路径。服务器拿到请求后会直接在当前web项目的根路径,也就是代码中的web文件夹中寻找。

3、绝对路径

就是将“http://localhost:8080/” 也带上的全路径,和浏览器访问的时候使用的路径相同。一般我们会事先拼接好web项目的根路径:

String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"

request.getScheme()获取的是协议名,也就是"http"。request.getServerName()获取的是当前主机名,也就是localhost,值可能是"127.0.0.1"。request.getServerPort()获取的是端口号,Tomcat的默认端口号为"8080"。request.getContextPath()获取的是上下文路径,一般为项目名,在这里是“/”。

如果解答了同学的疑问,望采纳~

祝学习愉快~


好帮手慕珊 2019-04-27 11:17:13

你好!之所以写成../show.jsp,看一下下图所示的代码,show()方法的访问路径是test/show.do,是一个二级目录,而show.jsp相当于和test目录平级,而show.do是test的下一级目录。因此,从show.do转发到show.jsp,就需要使用../show.jsp了。

http://img1.sycdn.imooc.com//climg/5cc3c92200014bc711950367.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 我试了写绝对路径 "/show.jsp" 也可以访问到
    2019-06-16 14:41:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师