在java中文件目录中带“/”的是绝对路径,不带“/”的是相对路径。

请求页面的写法,在web中,页面路径主要写的有以下几种

  1、重定向

  2、转发

  3、超链接

  4、form表单提交的action

  5、servlet web.xml中的配置参数的路径

  6、properties类型的文件

本文以项目部署在tomcat服务器为例,其他相信也是一样的。

先说明,一定要考虑的问题:

  1、路径是谁发起的(浏览器,服务器)

  2、路径开头直接 “/” 表示绝对路径

例如

项目的根目录是指FirstWEB下,即http://localhost:8080/FirstWEB,此时由浏览器发起的请求,代码中的“/”表示的当前路径就应该表示的是这个根目录

服务器的根目录是指wptwebapps下,即 localhost:8080,

(1)重定向是是由浏览器发起的,所以“/”代表的是服务器根目录

(2)转发是由服务器发起的,所以“/”代表的是项目根目录

(3、4) 前台页面不论时<a><form><img>等标签,所有的绝对路径,“/”都代表服务器根目录

(5)我们在编写项目的web.xml中编写servlet映射时,所有的servlet前都要加“/”,这个“/”指的是服务器根目录

(6)properties文件不能直接放置在项目根目录下,因为项目编译时,只会编译src下的文件和webcontent下的文件,properties文件就会被忽略

因此,放置properties文件时 ,要么放在src文件目录下,要么放置在webcontent目录下,由于编译后java文件放置在web-inf的下的classes下,所以建议把properties文件就放置在src下,跟着程序的编译一起编译,这样保证查找文件时,不会路径出错。

此时,通过classes来找资源 就是通过类加载器来加载文件:

//获取jdbc.properties 需要在类路径下找
//类加载器获取资源会在类路径下找(WEB-INF/classes)
ClassLoader loader = JDBCUtils.class.getClassLoader();
InputStream stream = loader.getResourceAsStream("jdbc.properties");

为了进行静态文件与源码分离,可以创建一个名为conf的资源文件夹,这个文件夹下的内容会进行分类,但不编译:

总结:

  1、由浏览器发起的路径,“/”表示%tomcat根目录%/webapps根目录

  2、由服务器发起的路径,“/”表示项目中的WebRoot根目录

  3、以上所有情况,除了“转发”是服务器发起的,其他都是由浏览器发起的

转发后的页面变化,但地址不变,所以当前页面的相对路径的地址都会根据浏览器的地址来查找资源,就可能会报错,所以如果要使前台页面保证无误,可以都是用绝对路径。

推荐使用<base>标签,<base>标签指定页面中所有以相对路径的基础路径,所有路径都是以该标签指定的为开始路径,最后通过拼接来进行访问。

例如: <base href="http://localhost:8080/FirstWEB"/> 之后如果访问相对路径下的 index.html,在访问时,浏览器自动装载为http://localhost:8080/FirstWEB/index.html来访问。

由于转发时,要在路径中写项目名,而项目可能时动态的,所以需要动态获得项目的根目录,如下:

第一种

ServletContext context = getServletContext();
String path = context.getContextPath();

response.sendRedirect(path1 + "index.html");

第二种

String path2 = request.getContextPath();

response.sendRedirect(path2 + "index.html");

项目在编译发布时,只会有项目名称,且带着webcontent下的所有文件,编写的java代码 会编译在 WEB-INF下的classes中,

所以不论写相对路径还是绝对路径,都注意不要写WEB-INF。

Java's absolute and relative path的更多相关文章

  1. Hive报错 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D

    报错信息如下 Failed with exception java.io.IOException:java.lang.IllegalArgumentException: java.net.URISyn ...

  2. hive启动时报错 java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D at org.apache.hadoop.fs.Path.initialize

    错误提示信息如下 错误信息如下 [root@node1 bin]# ./hive Logging initialized -bin/lib/hive-common-.jar!/hive-log4j.p ...

  3. c# Relative Path convert to Absolute Path

    Reference: http://stackoverflow.com/questions/4796254/relative-path-to-absolute-path-in-c http://sta ...

  4. RPO(Relative Path Overwrite)

    Conception(Relative vs Absolute) Abosolute Path: "/etc/hosts"(in Linux), "C:\Windows\ ...

  5. Position属性四个值:static、fixed、absolute和relative的区别和用法

    Position属性四个值:static.fixed.absolute和relative的区别和用法 在用CSS+DIV进行布局的时候,一直对position的四个属性值relative,absolu ...

  6. position属性absolute与relative 详解

    最近一直在研究javascript脚本,熟悉DOM中CSS样式的各种定位属性,以前对这个属性不太了解,从网上找到两篇文章感觉讲得很透彻,收藏下来,唯恐忘记.一.解读absolute与relative ...

  7. SQL Developer 4.0 启动报错“unable to create an instance of the java virtual machine located at path”

    安装了Oracle之后,第一件事情就是想想怎么去连接,进而操作.SQL Developer是官方提供的强大工具,个人看来也是第一选择. 目前官网提供的最新版是4.0.1.14.48,下载下来之后,就跃 ...

  8. css absolute与relative的区别

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Div CSS absolute与relative的区别小结

    absolute:绝对定位,CSS 写法“ position: absolute; ”,它的定位分两种情况,如下: 1. 没有设定 Top.Right.Bottom.Left 的情况,默认依据父级的“ ...

  10. absolute和relative的几个Demo

    这些例子最好通过FireFox结合FireBug调试查看 1.absolute让元素inline-block化 <!DOCTYPE html> <html xmlns="h ...

随机推荐

  1. android本地文件处理的一些经验

    选择文件后,现在一般返回 Uri contentResolver.getType(selUrl)结果如下 .txt text/plain .jpeg image/jpeg .mp4 video/mp4 ...

  2. Eclipse创建maven-web项目时找不到archetype解决方法

    转:https://blog.csdn.net/sunjinjuan/article/details/82943488

  3. HTML学习笔记3----制作一个简易网站

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  4. 三种将list转换为map的方法

    1) 传统方法假设有某个类如下 Java代码 class Movie { private Integer rank; private String description; public Movie( ...

  5. 目标检测yolov5检测火龙果

    一.github官方网址 https://github.com/ultralytics/yolov5/tree/v6.1 二.labelme标记数据集: (1).进入虚拟环境 (2).pip inst ...

  6. Spring Boot 启动时自动执行代码的几种方式

    来源:https://mp.weixin.qq.com/s/xHAYFaNBRys3iokdJmhzHA 前言 java自身的启动时加载方式 Spring启动时加载方式 代码测试 总结 1.前言 目前 ...

  7. 存储SAN

    存储技术介绍 DAS (direct attached storage)  直接连接存储--块级 SAN(storage area network)   存储区域网络--块级 NAS(network ...

  8. Maven常用参数及其说明

    Maven常用参数及其说明 -h,--help Display help information-am,--also-make 构建指定模块,同时构建指定模块依赖的其他模块;-amd,--also-m ...

  9. JDBC——连接SQL Server环境配置

    JDBC:使用JAVA语言操作关系型数据库的API.是一套标准的接口. 步骤 1.创建工程,导入驱动jar包 2.注册驱动:Class.forName("com.mysql.jdbc.Dri ...

  10. webpack1.x 之配置的坑

    一.静态资源目录改变(默认在dist下面) 默认: webpack配置 output: { path: path.join(__dirname, './dist'), filename: 'build ...