我们在写网站的,免不了要使用到路径的问题,但是很容易一不小心就出现404的错误。所以我就想具体的介绍各种路径问题应该怎么解决。
首先路径问题,我在这里分为两种
- 路径又分为绝对路径与相对路径
绝对路径就是是我们的路径是从我们的盘符开始的,比如我window里面的C盘这样的。
相对路径就是说相对于谁来说的,它的路径什么,不同的文件的相对位置也是不同的。
文件路径
所谓文件路径就是指我们在进行文件上传,或者输入输出流读取数据的时候写的路径。
相对路径:
- 在我们的Servlet里面写文件上传或者下载时候,使用的有输入输出流的时候,我们使用的环境是tomcat,这个时候我们相对路径是相对于运行环境来说的,这个时候就是相对于tomcat的bin目录的,所以就不能访问到正确的地址了,故在Servlet里面不能使用相对路径的。
- 当我们是写一个普通的java文件的时候,我们使用文件的时候,在传输地址的时候,是我们的本地在运行,不是我们的tomcat运行的,这个时候我们的相对路径是相对于我们的src来说的。
绝对路径:
在Servlet中,我们必须要使用绝对路径,上面也说了为什么在这里面不能使用相对路径呢?,就是因为我们的运行环境不一样,Servlet的环境是tomcat,相对的位置是tomcat的bin目录。在我们使用绝对路径的时候,我们需要获取的是我们的项目所放的位置,这个时候就需要用到一个方法:
this.getServletContext().getRealPath();//我们可以通过这个方法取获取我们的项目所在的路径 不管我们的项目部署在什么位置,都可以获取到,因为它是我们的Servlet提供的 知道我们的tomcat部署的位置
在我们的不同的java工程中 ,如果使用输入输出流的上传文件,下载文件的时候,我们的路径写可以写我们编译后的文件位置,也可以写源文件的位置。这里我们要注意区别,web工程是要发布的,我们用的就是编译后的文件,而我们的普通java项目是不用发布的,所以写本地的源代码的路径也是可以的。
补充知识点:
我们创建的web工程之后,一般发布之后的文件都是在我们项目的out文件夹中,而我们的项目一般都分为静态资源和动态资源,我们的静态资源是我们的html/css/js/img等,我们的动态资源则是指的我们的jsp和Servlet的这些java文件,我们在访问资源的时候,是直接将我们的静态资源拷贝到我们的out文件夹下面的指定的项目文件夹下,我们的动态资源则是编译后放在WEB-INF文件夹的classes下面的,并且我们的WEB-INF下面的东西是不允许直接在浏览器的地址栏中访问的。我们需要设置访问资源的路径。
跳转路径
首先需要明确的一点就是跳转路径只与浏览器的地址有关,跟我们文件放的位置没有一点关系,我们的地址栏中前面的http://ip地址/虚拟路径/资源地址。这就是我们的跳转路径,默认情况下,我们的http://ip地址是固定的写法
虚拟路径:我们的项目起的名字。也可以没有
资源路径:我们要访问的文件的地址
绝对路径
特点就是都是以/开头的。分为两类
客户端路径:
它分为完整路径和简化路径。所谓完整路径就是说:就是我们地址栏写的那种,带有http的那种。即:http://ip地址:端口/虚拟路径/资源的路径
简化路径就是:/虚拟路径/资源的路径
服务器端路径:只有请求转发是服务器端路径,
写法:/资源的路径;前面的虚拟路径,tomcat已经为我们自动加上了。
相对路径:
相对路径有一个口诀:
- 找到本资源在哪里
- 找到目标资源在哪里
举个例子吧!!!
从本资源的上一级开始,如果不在同一个文件夹中,你就 …/ 直到我们相同的文件夹,然后按照目标资源的路径往下写就行了
如果我们是在前端访问Servlet的话,记住
跟我们的html一样的,不要管它的源文件的层级结构,只用记住:http://ip地址:端口/虚拟路径/资源的路径
总结
虽然相对路径与绝对路径我们写那个都行,但是我们一般都有有个规定:
- 在后台的Servlet我们用绝对路径,使用getRealPath获取真实路径
- 在jsp页面中,我们也使用绝对路径
- 在html页面中,我们使用相对路径
这里的后台是以Servlet为例子,我们用框架也是同样的道理,不要局限我写的。