Java's absolute and relative path

在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

原文地址:https://www.cnblogs.com/EasgGoingHulk/p/12353274.html

时间: 2024-08-07 17:28:51

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

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.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D 解决方法: 编辑 hive-site.xml 文件,添加下边的属性 <property> <name>system:java.io.tmpdir<

hive启动报错 java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7B

启动hive报错: [[email protected] conf]# hive Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j.properties SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hadoop2/share/hadoop/

hive启动时报错: Relative path in absolute URI: ${system:java.io.t

Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D这是因为在hive-site.xml配置文件中需要配置system:java.io.tmpdir属性. 在配置文件中加入: <proper

Absolute and relative references in Excel

Keywords: Excel, fill multiple cells, formula, no series Absolute and relative references in Excel When you create a formula in Excel that refers to other cells in the worksheet, Excel will store the information about those cells as relative referenc

How to put a relative path for a DLL statically loaded?

How to put a relative path for a DLL statically loaded? I have a DLL made in Delphi 7/Windows XP that I want to statically load in a host application on Windows (made in Delphi, too). I am using this line of code: procedure Prepare_HTML_Email(var Mai

CSS position的absolute和relative的解析[转]

定位一直是WEB标准应用中的难点,如果理不清楚定位那么可能应实现的效果实现不了,实现了的效果可能会走样.如果理清了定位的原理,那定位会让网页实现的更加完美. 定位的定义:在CSS中关于定位的内容是:      position:relative | absolute | static | fixed static(静态) 没有特别的设定,遵循基本的定位规定,不能通过z-index进行层次分级. relative(相对定位) 对象不可层叠.不脱离文档流,参考自身静态位置通过 top,bottom,

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,下载下来之后,就跃跃欲试了.将下载下来的包解压,直接运行sqldeveloper.exe这个文件,选择了本地安装的JDK路径,之后却不幸的报错了,提示"unable to create an instance of the java virtual machine located at path",具体界面

【webQD】☆★之详解position: absolute、relative属性

[webQD]☆★之详解position: absolute.relative 首先我们来看一下W3C对position的解释: 我们再看,W3C对position属性值的解释: ok,我们需要了解的是: 其中absolute和relative是最常用的,fixed用得也比较多(其中IE6并不支持fixed). 1.absolute(绝对定位) absolute是生成觉对定位的元素,脱离了文本流(即在文档中已经不占据位置),参照浏览器的左上角通过top,right,bottom,left(简称T

CSS+DIV布局中absolute和relative的区别

来源 :http://developer.51cto.com/art/201009/225201_1.htm   解释的很好.摘下来后面自己能看看. 区别:定位为relative的元素脱离正常的文本流中,但其在文本流中的位置依然存在,而定位为absolute的层脱离正常文本流,但与relative的区别是其在正常流中的位置不在存在. position各个属性值的定义: 1.static:默认值.没有定位,元素出现在正常的流中(忽略top,bottom,left,right或者z-index声明)