java学习笔记:JavaWeb里访问资源路径问题的学习笔记,重点:带/与不带/的实例测试对比

在平时进行网页开发时,不论是点击超链接还是进行请求的转发等需要访问资源的操作时,总会让我有个疑问:这里的路径需不需要带工程名?要不要带斜杠? 一直都是先带上,找不到了就去掉,反正试几次总能成,又不影响啥。。。但今天还是好好研究一下吧:)


首先,总结出了我认为会牵扯到这些疑问的地方,不全面的地方大家可以在评论补充或者私信一起学习交流:

1.前台页面上的超链接。
2.提交form表单 <form action="" 》 (这里不打成书名号收尾会被解析成博客页面的HTML标记,请忽略此处错误哈哈)
3.重定向 response.sendRedirect(“路径”);
4.转发 request.getRequestDispatcher(“路径”).forward(request, response);

之后,经过一番查阅,我知道了几个很重要的知识点:
1.需要访问路径的角色有两个:浏览器和服务器。大家都知道对于网页开发,最简单的工作原理图就是这样的

在这里插入图片描述

自始至终其实需要问路的就是他俩,在上面提到的四个方式里,只有第四个转发是服务器在问路,而其余的都是浏览器来问路。
2.(请带着这一点的信息观看下文的实例对比)浏览器发起的请求中的“/”表示“Tomcat/webapps”目录下,例如我在地址栏中输入“localhost:8080/ExamOnline”中的“/”就是表示Tomcat/webapps,调用资源的时候需要写/ExamOnline/login.jsp,而当服务器进行资源请求时,“/”就会代表Tomcat/webapps/工程名。不论浏览器还是服务器访问,不带斜杠时都是当前路径+我们书写的路径段。
3.斜杠"/“的带与不带只讨论相对路径而与绝对路径无关,毕竟对于绝对路径来说,从开头到末尾无论是请求头或是读文件时的盘符,一个字都不能省的,包括斜杠。而接下来的重点就要看对于浏览器与服务器来说,带了”/“与不带”/"的相对路径都变成了什么。补充: 真实路径=当前路径+咱们手写的路径。

下面对于开头的四个情况分别进行测试,多图警告!

1.超链接访问资源测试:

在这里插入图片描述

首先我将通过login页面的超链接来访问Top页面,此时的路径无斜杠,结果如下:

在这里插入图片描述

可以看到路径变为了http://localhost:8180/ExamOnline/Top.jsp,而将超链接的路径前加上斜杠会变为                      http://localhost:8180                      /Top.jsp       如下图在这里插入图片描述
对比后发现不加斜杠将会是login.jsp所处的当前路径拼接上Top.jsp变为一个正确的访问路径http****/tomcat/webapps/ExamOnline/Top.jsp ,上文提到过

浏览器发起的请求中的“/”表示“Tomcat/webapps”目录下,例如我在地址栏中输入“localhost:8080/ExamOnline”中的“/”就是表示Tomcat/webapps,调用资源的时候需要写/ExamOnline/login.jsp”

所以此时看到超链接/Top.jsp其实是变成了 http****/tomcat/webapps/Top.jsp 少了项目名ExamOnline,所以找不到。
2.提交表单访问资源测试: 由于表单中action的值与Servlet或者Controller在配置文件或者注解中的值都是写定且必须一样的,所以这个方式没有找到合适的能做对比看少什么的例子。
3.重定向访问资源测试:

现在,我将login页面的表单提交到了LoginController中,只执行一句重定向,首先是路径为/login.jsp ,根据第一个测试的小字段落,猜想应该是http*****/Login.jsp,因为/在浏览器这里代表的只是Tomcat/webapps,看结果:
在这里插入图片描述
在这里插入图片描述
确实,此处少了项目名,我试着给他加上项目名:
在这里插入图片描述
嗯~ o( ̄▽ ̄)o,果然好了,那么同样我将前面的/去掉改为直接 login.jsp,他应该是从这个个servlet的当前路径拼接上我手写的后半段,拼接成http:*****/controller/login.jsp,然后报错,看看结果:在这里插入图片描述
在这里插入图片描述
是吧?这样一来,代表浏览器的前三个方式就能看出来,对于相对路径来说:

前三张浏览器访问资源的结论

不带斜杠就是当前的路径拼接上咱们手写的那一段,带斜杠就是从web工程拼接一个我们写的那一段
也就是说,当我们程序走到servlet或者controller里时,现在去请求jsp页面时不带斜杠是肯定错的,因为jsp和你的servlet肯定不在一个目录里,你用servlet的当前路径拼成放jsp的文件夹的路径怎么都不可能是对的。 反过来,如果你的一个hhh页面在a文件夹里的b文件夹里的c文件夹中,那么你想访问他的时候直接/hhh.jsp那肯定是找不到了,你可不得把a/b/c带上。

最后再讨论一下服务器做转发时路径的变化,接着上图

在这里插入图片描述

这里只处理一句转发,先加了斜杠,根据

服务器发起的请求中“/”表示“Tomcat/webapps/ExamOnline”的目录,调用的时候写/login.jsp

我们的/Login.jsp理论上将会变为http:******/ExamOnline/Login.jsp这样的正确路径,我们将能成功找到该页面,但是我们也知道,转发时URL框不会变化,所以我们就看能不能找到吧。上图。

在这里插入图片描述

是吧,路径还是那个servlet的路径,但是确实已经访问到了Login页面,那么不加斜杠会怎么样呢?

在这里插入图片描述

看来不带斜杠确实就只是当前路径开拼,这倒是和浏览器访问一样的。
测试记录就到这里了。 上最终结论

不管是从服务器访问资源还是浏览器访问资源,不带斜杠都是当前路劲开始拼上我们写的路径。而对于带斜杠,浏览器访问时/代表Tomcat/Webapps ,服务器会补充上项目名 /代表 Tomcat/Webapps/项目名。

今天的笔记就到这了,有不对的地,方希望大家可以评论或者私信指正,大家一起交流一起进步,谢谢啦。 最后中国加油,共度难关!
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值