项目中的路径问题?^ - ^

URL

​ 要知道,我们上网,就是为了访问别人的资源。在WWW上,每一个信息资源都有一个唯一的与之对应的地址,这个地址就叫做URL(Uniform Resource Locator,统一资源定位符),是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,它包含的信息指出文件的位置以及浏览器应该怎么处理它

URL组成:协议类型、主机地址、路径和文件名

协议类型

表示采用什么协议访问哪类资源,以便浏览器决定用什么方法获得资源,下面是其中两个例子

  • http://表示采用超文本传输协议HTTP访问WWW服务器
  • ftp://表示通过文件传输协议FTP访问FTP服务器

主机地址

表示要访问的主机的IP地址或者域名地址

大多数网页浏览器不要求用户输入网页中“http://”的部分,因为绝大多数网页内容是超文本传输协议文件。同样,80是超文本传输协议文件的常用端口号,因此一般也不必写明。一般来说用户只要键入统一资源定位符的一部分就可以

路径和文件名

表示资源在主机中的路径和文件名,如果缺省文件路径,则表示定位于Web服务器的主页,其文件名通常是index.html

URL的分类

绝对URL

​ 绝对URL(absolute URL)显示文件的完整路径,这意味着绝对URL本身所在的位置与被引用的实际文件的位置无关

​ 一般以/开头的路径都是绝对路径,不以当前文件的位置作为起点,而是以一个固定位置作为起点到达目标文件所经过的路径

相对URL

​ 相对URL(relative URL)以URL本身的文件夹的位置为参考点,描述目标文件夹的位置。如果目标文件与当前页面在同一个目录,那么这个文件的相对URL仅仅是文件名和扩展名,如果目标文件在当前目录的子目录中,那么它的相对URL是子目录名,后面是斜杠,然后是目标文件的文件名和扩展名
​ 如果要引用文件层次结构中更高层目录中的文件,那么使用两个句点和一条斜杠。可以组合和重复使用两个句点和一条斜杠,从而引用当前文件所在的硬盘上的任何文件

URL与URI以及URN的区别

​ URI是一个大的集合,里面包含了URL与URN,也就是说,URL与URN是URI的子集

​ URL(Uniform Resource Identifier,统一资源标识符),标识,标识,它没有说具体怎么一个标识方式,那就可以根据不同的标识方式,来划分出不同的子集,对吧,就好比我们通过定位的方式给资源进行标识,那这样的方式也就是统一资源定位符,即URL,如果我们通过命名的方式来进行标识,那这样的方式叫Uniform Resource Name,统一资源命名符,也就是URN

​ 比如我们的互联网,里面有超级多台计算机连在一起,我们计算机相连的目的是什么啊?就是为了获取人家计算机上的资源对不对?就是为了获取人家计算机上的某某某目录下面的某某某文件对不对?比如有一台叫aaa的主机上的imges文件夹下面有一个dog.jpg,我想获取这个图片,怎么办呢?我们如果通过URL(位置)的方式来获取,就是 http://www.aaa.com/images/dog.jpg ,但是如果我们把dog.jpg放在别的文件夹下,比如说picture文件夹,那获取方式就变成了 http://www.aaa.com/picture/dog.jpg,而原来的方式就失效了,可以看出URL与位置关系非常紧密位置一变,URL就容易失效

​ 那怎么解决呢?URN就是为了解决这个问题,与URL不同,它用一个字符串,而且是独一无二的字符串来表示一个资源。比如用d5oj6k5h2x3k来表示刚才的dog.jpg,然后我这个字符串只能代表dog.jpg,这个dog.jpg也只能对应这个字符串,这时候这个dog.jpg随便转移,位置随便换,都能通过这个唯一的字符串给它找到,那URN这么好为什么不用URN,而更多的用的是URL呢?因为URN有一个前提,就是它必须得有一个解析器,这个解析器能够根据URN这个字符串来解析出资源最新的位置信息,即用户只管知道这个资源的这么一长串URN就好了,然后背后人家会把这个字符串转化成一个最新的地址,然后去得到。但是这个解析器像构建起来非常的麻烦,互联网上千千万万的资源都要给它一个名字,然后还需要在每个资源位置变动的时候把最新的地址与这个名字匹配在一起,工作量是很巨大的,URN在理论上很完美,但是实施起来很困难,所以目前来说URL是URI的最主要的体现方式

转发与重定向的URL问题

转发

Web组件(Servlet/JSP等)将未完成的处理通过容器转交给另外一个Web组件继续完成

  • 转发之后,地址栏地址不会发生变化,原因是转发的过程是发生在服务器内部的,浏览器不参与
  • 转发的目的地必须是同一个项目内部的某个地址,即转发只能在当前项目内转发
  • 转发所涉及的各个Web组件会共享同一个request对象和response对象

比如我们通过表单请求本机aaa项目的指定的URL资源 action=“/aaa/xxx/ooo/some”(例如someServlet来处理这个请求)

则表单生成的请求地址为:http://localhost:8080/aaa/xxx/ooo/some

同时项目下有一个处理当前项目的other请求的控制器servlet,请求URL为http://localhost:8080/aaa/xxx/ooo/other

我们希望在some中对请求做了一些处理之后,将请求转发到处理other请求的servlet

相对路径:request.getRequestDispatcher(”other“).forward(request,response);

绝对路径:request.getRequestDispatcher(”/aaa/xxx/ooo/other“).forward(request,response);

在这里相对路径以资源本身的位置作为参考点,描述目标资源的位置,资源本身的参考点是http://localhost:8080/aaa/xxx/ooo/而目标资源所谓位置为http://localhost:8080/aaa/xxx/ooo/other,所以我们的URL只写一个other即可,绝对路径的URL不以当前资源的位置作为起始,而是以一个固定位置作为起始到达目标资源所经过的路径,这里固定的位置即为当前项目,因为请求转发只能在当前项目内请求转发,所以http://localhost:8080/aaa为我们的固定位置,我们发送的URL为 /aaa/xxx/ooo/other 其中第一个/就代表我们当前项目

重定向

重定向是多次请求(由服务器重定向到客户端,由客户端请求下一个资源),是由客户端发出请求

  • 重定向的新地址可以是任意地址
  • 重定向中有两次请求对象,不共享数据
  • 重定向后地址栏地址改变
  • 重定向是浏览器发生请求并收到响应以后再次向一个新的地址发请求

比如我们通过表单请求本机aaa项目的指定的URL资源 action=“/aaa/xxx/ooo/some”(例如someServlet来处理这个请求)

则表单生成的请求地址为:http://localhost:8080/aaa/xxx/ooo/some

同时项目下有一个页面,它是在pages下面的list.jsp,请求URL为http://localhost:8080/pages/list.jsp

我们希望在some中对请求处理之后,响应重定向到处理当前项目下的list.jsp

相对路径:response.sendRedirect(“…/…/pages/list.jsp”);

绝对路径:response.sendRedirect(“/aaa/pages/list.jsp”);

在这里相对路径以资源本身的位置作为参考点,描述目标资源的位置,资源本身的参考点是http://localhost:8080/aaa/xxx/ooo/而目标资源所谓位置为http://localhost:8080/pages/list.jsp所以我们的URL要通过…/返回上一级目录,绝对路径的URL不以当前资源的位置作为起始,而是以一个固定位置作为起始到达目标资源所经过的路径,这里固定的位置即为当前主机,因为重定向可以重定向到任意路径,http://localhost:8080为我们的固定位置,我们发送的URL为/aaa/pages/list.jspr 其中/aaa是访问我们项目所要带的前缀

也可以重定向到互联网上的任何web应用地址

response.sendRedirect(“http://baidu.com”);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大恐龙的小弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值