Servlet转发与重定向的资源路径问题解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianjindong0804/article/details/85028387

一. 问题引入  

     转发和重定向可以说是Servlet中最重要的知识点也不为过,因为它决定着整个向Servlet体系中,执行流程的问题。

     转发:

        request.getRequestDispatcher("/index.jsp").forward(request, response);

      重定向:

        response.sendRedirect("index.jsp");

     相信上面两句话大家应该是再熟悉不过了,以我的习惯Servlet转发时写绝对路径,也就是转发地址用“/”开头;而重定向时通常使用的是相对路径,也就是不以“/" 开头。那Servlet中的绝对路径和相对路径具体是什么,那我们就一起来研究一下。

二. 电脑的绝对/相对路径

  如何理解绝对路径与相对路径

    在Windows中,以盘符开头的称为绝对路径,见下图:

    那相对路径是什么呢?

    在Linux系统中有一个工作目录的概念,所谓的工作目录就是当前用户所在的目录,那么在这里也暂且将所在目录称为工作目录。相对目录就是以当前所在目录开始计算路径值。

    举个栗子:

    如果用户当前这在 E:\ A目录下,那么此时 “B \ index.html”这个相对目录表示的绝对路径就是 “E:\ A \ B \ index.html”。

  相对路径中的常用用法

    在使用相对路径时如果想进入下一级目录可能大家清楚的很,直接在后面加斜杠然后写上目录或文件名即可。那如果我们必须进入上一级目录呢,首先明确我们在什么需求下需要进入上一级目录:

      1. 获取上级目录中的文件

      2. 进入当前目录的同级目录

    那在相对路径的写法中,如何进入上级目录呢?

    两个点代表上级目录。例如: 我们想进入当前目录的同级目录haha,我们可以这样表示“../haha”

    扯得有点远了,现在我们回到正题,来讲一讲Servlet中转发和重定向时相对路径与绝对路径的使用。

三. 转发和重定向时的相对路径与绝对路径

   

   1. 绝对路径

     首先需要明确Servlet中的绝对路径到底是什么,在Servlet中转发时所代表的的绝对路径实际上就是该项目的根路径。例如:http://localhost:8080/TestWeb/。

     你以为重定向时的绝对路径初始值也是当前项目根路径吗?Servlet在重定向时所代表的的绝对路径是当前Tomcat容器所在的根路径(也就是webapps)。例如:http://localhost:8080/  ,说白了就是重定向时绝对路径的初始值是没有项目名称的。

   我们现在就来看一下重定向的绝对路径的效果。

    Servlet代码:

  访问时的URL:

  回车后:

这样就会导致找不到我们项目中的index.jsp页面

   解决方案:

     1. 将路径写成相对路径

     2. 在绝对路径前面加上项目名

    绝对路径总结:在转发时绝对路径的初始值是带有项目名的,而在重定向时绝对路径的初始值是不带有项目名的。

2. 相对路径

     说完绝对路径我们再来说一说相对路径,在绝对路径中重定向与转发有一定的区别,而在使用相对路径中转发与重定向没有任何区别,它们都是相对于当前所在目录来进行访问的(这句话如果看不懂就自行略过吧:这里的目录既代表WebRoot下面的真实目录,也代表Servlet配置<url-pattern>的逻辑目录。)既然重定向和转发在使用相对路径是的目录起算点是相同的,那么我们就以重定向来进行演示。

     访问时的URL:

      回车后的URL:

总结

     在Servlet中使用绝对路径进行转发和重定向,他们的路径起算点是不相同的,转发时以项目名称作为起算点,重定向时以端口号作为起算点。而如果使用相对路径进行重定向或转发,他们都是以当前所在路径作为起算点。

猜你喜欢

转载自blog.csdn.net/tianjindong0804/article/details/85028387
今日推荐