java类中相对路径与绝对路径讲解
File类或者一些IO流中,在其构造函数中要求传入String类型的参数,用于指示文件所在的路径。使用绝对路径不用说,很容易就能定位到文件,那么使用了相对路径jvm如何定位文件的呢?
按照jdk Doc上的说法”绝对路径名是完整的路径名,不需要任何其他信息就可以定位自身表示的文件。相反,相对路径名必须使用来自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。当前用户目录由系统属性user.dir 指定,通常是Java 虚拟机的调用目录.
相对路径顾名思义,相对于某个路径,那么究竟相对于什么路径我们必须弄明白。按照上面jdk文档上讲的这个路径是“当前用户目录”也就是“java虚拟机的调用目录”.更明白的说这个路径其实是我们在哪里调用jvm的路径(我们在哪启动jvm的路径).
举个例子:
假设有一java源文件Example.java在d盘根目录下,该文件不含package信息.
我们进入命令行窗口,然后使用”d:”命令切换到d盘根目录下,然后用”javac Example.java”来编译此文件,
编译无错后,会在d盘根目录下自动生成”Example.class”文件.
我们在调用”java Example”来运行该程序.此时我们已经启动了一个jvm,这个jvm是在d盘根目录下被启动的,
所以此jvm所加载的程序中File类的相对路径也就是相对这个路径的,即d盘根目录:D:\
同时“当前用户目录”也是D:\
在System.getProperty(“user.dir”);系统变量”user.dir”存放的也是这个值.
搞清了这些,我们可以使用相对路径来创建文件,例如:
File file = new File(“a.txt”);
file.createNewFile();
假设jvm是在”D:\”下启动的,那么a.txt就会生成在D:\a.txt;
此外,这个参数还可以使用一些常用的路径表示方法,例如”.”或”.\”代表当前目录,这个目录也就是jvm启动路径
所以如下代码能得到当前目录完整路径:
File f = new File(".");
String absolutePath = f.getAbsolutePath();
System.out.println(absolutePath);//D:\
再说说在eclipse中的情况:Eclipse中启动jvm都是在项目根路径上启动的.
比如该类所在的项目为coreJava,其完整路径为:D:\myEclipse_workspace\coreJava\.
那么这个路径就是jvm的启动路径了.所以以上代码如果在eclipse里运行
则输出结果为D:\myEclipse_workspace\coreJava\.
说说在服务器中的Java类获得当前路径
1、 在Tomcat中的情况.
如果在tomcat中运行web应用,此时,如果我们在某个类中使用如下代码:
File f = new File(".");
//或者:File f = new File(System.getProperty("user.dir"));
String absolutePath = f.getAbsolutePath();
System.out.println(absolutePath);
那么输出的将是tomcat下的bin目录,即%Tomcat_Home%/bin
我的机器就是D:\myEclipsetomcat6\bin\. ,由此可以看出tomcat服务器是在bin目录下启动jvm的.
其实是在bin目录下的” catalina.bat”文件中启动jvm的.
2、在weblogic中的情况
WebApplication的系统文件根目录是你的weblogic安装所在根目录。
例如:如果你的weblogic安装在c:/weblogic10.....
那么,你的文件根路径就是c:.
所以,有两种方式能够让你访问你的服务器端的文件:
a.使用绝对路径:
比如将你的参数文件放在c:/yourconfig/yourconf.properties,
直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相对路径:
相对路径,是相对于你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放
在yourwebapp/yourconfig/yourconf.properties,
这样使用:
new FileInputStream("../yourconfig/yourconf.properties");
这两种方式均可,自己选择。
关于在web应用中的路径
Java EE里的Web项目有个相对独立的最高目录WebRoot,我们估且认为它是根目录/。Web项目成品中的其它目录都是相对与此目录的子目录。在开发时, 我们可能会用到一些框架,比如struts,spring等。使用这些框架,我们需要配制相应的xml文件,至少也会配制web.xml文件。比如使用struts2时,在struts.xml中映射Action是最常见的配制,所有的映射,都以“/”开头,那么这里的“/”指的是那个目录呢?那就是不可见相对独立的WebRoot,应用中“/action”就相当于是系统目录中的”WebRoot/action", 知道这一点,就不会在为Action映射老是不可用发愁了。
关于JSP/Servlet中的相对路径和绝对路径
在jsp/servlet中,服务器端的地址和客户端的地址表示有区别
1、服务器端的地址
服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http: //127.0.0.1/webapp/的。
其用到的地方有:forward:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,你要forward到a.jsp应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个/ 相对于当前的web应用webapp,其绝对地址就是:http://127.0.0.1/webapp/user/a.jsp。 sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>
2、客户端的地址
所有的html页面中的相对地址都是相对于服务器根目录(http://127.0.0.1/)的,而不是(跟目录下的该Web应用的目录) http://127.0.0.1/webapp/的。 Html中的form表单的action属性的地址应该是相对于服务器根目录(http://127.0.0.1/)的
所以,如果提交到a.jsp 为:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()% >"/user/a.jsp;
提交到servlet为actiom="/webapp/handleservlet" Javascript也是在客户端解析的,所以其相对路径和form表单一样。
因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上
<%=request.getContextPath()%>,以确保所引用的文件都属于Web应用中的目录。另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。
3、JSP中获得当前应用的相对路径和绝对路径
随便在应用webroot下新建一个jsp文件,启动tomcat,测试一下便知:
System.out.println(request.getRequestURI()); //相对地址 /ebpp/test/MyJsp.jsp
System.out.println(request.getRequestURL());
//得到该文件的IE地址栏访问地址http://localhost:9999/ebpp/test/MyJsp.jsp
System.out.println(application.getRealPath("/")); //当前web应用的绝对路径
4、Servlet中获得当前应用的相对路径和绝对路径
根目录所对应的路径:request.getServletPath();
文件的绝对路径 :request.getSession().getServletContext().getRealPath(request.getRequestURI())
当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");
分享到:
相关推荐
在Java Web开发中,`javax.servlet.jsp.jspl.core.ConditionalTagSupport`是JSTL(JavaServer Pages Standard Tag Library)库中的一个核心类,用于支持条件标签的实现。当你遇到`java.lang.NoClassDefFoundError: ...
在Java Web开发中,理解和掌握相对路径与绝对路径的运用是至关重要的,因为这直接影响到资源定位、页面跳转以及文件读写等操作的正确性。以下是对Java Web中相对路径与绝对路径问题的深入总结: ### 一、路径概念与...
3. JSP/Servlet 中获得当前应用的相对路径和绝对路径 3.1 JSP 中获得当前应用的相对路径和绝对路径 可以使用 request.getRequestURI() 获取当前应用的相对路径,使用 application.getRealPath(request....
3. 在 JSP/Servlet 中获得当前应用的相对路径和绝对路径 在 JSP 中,可以使用 request.getRequestURI() 获取当前文件的绝对路径,然后使用 application.getRealPath(request.getRequestURI()) 获取当前文件的绝对...
### Java(Web)中相对路径与绝对路径问题总结 #### 基本概念理解 在Java Web开发中,路径的概念非常重要,因为它们直接影响到资源的加载和处理。路径分为两种类型:绝对路径和相对路径。 **绝对路径**是指文件或...
#### 三、JSP/Servlet中获得当前应用的相对路径和绝对路径 ##### 3.1 JSP中获得当前应用的相对路径和绝对路径 - **根目录所对应的绝对路径**: 可以通过`request.getRequestURI()`获取。 - **文件的绝对路径**: ...
"Java 中相对路径与绝对路径的问题" Java 中的路径问题一直是困扰许多编程人员的问题之一。在 Java 中,我们需要了解相对路径和绝对路径的概念,以及如何获取它们。下面我们将详细地讨论 Java 中的相对路径和绝对...
**JSP(JavaServer Pages)和Servlet是Java Web开发中的两个核心技术,它们在构建Web应用程序,尤其是动态网站方面发挥着重要作用。在这个名为“jsp/servlet blog”的项目中,我们看到一个基于这两项技术的简单博客...
【标题】"jsp/servlet分页带查询示例"是一个典型的Web开发教程,它涵盖了如何在Java Web应用程序中实现分页查询的功能。这个示例包括了必要的组件和步骤,帮助开发者理解如何在JSP(JavaServer Pages)和Servlet中...
在Web开发中,尤其是在使用Java Servlet和JSP技术时,正确理解和使用相对路径和绝对路径至关重要。 ##### 2.1 服务器端的地址 服务器端的相对地址是指相对于你的Web应用的地址,这个地址是在服务器端进行解析的,...
### Web应用系统设计(JSP+Servlet+JavaBean) #### Web服务器与Tomcat6.0配置 本章节重点介绍如何安装并配置Web服务器——Tomcat 6.0,以及与其配套使用的Java Development Kit (JDK)。对于一个基于Java技术栈的...
《JAVA高手真经 网络开发卷:Web基础+数据库+JSP/Servlet》是一部深入探讨Java在Web开发领域的专业书籍,旨在帮助读者掌握Java在网络编程中的核心技术和实践应用。书中涵盖了从基础到高级的Java Web开发知识,包括...
总的来说,这个项目涵盖了Web开发中的许多核心概念和技术,对于想要深入了解JSP/Servlet和Web应用开发的开发者来说,是一个非常有价值的资源。通过实践和学习,你可以提高自己的编程能力,为未来更大的项目打下坚实...
### Java中的绝对路径与相对路径 在Java编程中,路径管理是进行文件操作的重要组成部分,尤其是在Web应用开发中。本文将详细介绍如何在Java中获取不同类型的路径,包括Web服务器下的文件路径、本地路径以及相对路径...
本文主要涵盖了Java中相对路径和绝对路径的基本概念,以及它们在JSP和Servlet中的应用。以下是对这些概念的详细解释: 1. **绝对路径**: 绝对路径是文件或目录在文件系统中的完整路径,它明确指出了从根目录开始...
JSP相对路径深入研究是指在JSP文件中使用图片、CSS、JavaScript等资源时,如何正确地计算相对路径,以便正确地加载资源。下面我们将深入研究JSP相对路径的计算规则。 第一种情况:直接访问JSP文件 当我们直接访问...
### JAVA类、JSP与Servlet获取工程路径方法详解 #### 概述 在Java Web开发过程中,经常需要获取项目的根目录或某个特定资源文件的绝对路径。这些路径信息对于加载资源文件、处理文件上传下载等功能至关重要。本文将...
在Java Web开发中,JSP(JavaServer Pages)和Servlet是两种核心的技术,它们主要用于构建动态web应用程序。本文将深入解析JSP和Servlet的一些内置方法,帮助开发者更好地理解和运用这些方法。 **一、JSP/Servlet ...
【Ajax实现的猜数游戏】是一个基于Web技术的互动应用,它利用了JavaServer Pages (JSP)、Servlet以及Ajax(Asynchronous JavaScript and XML)技术。在这个游戏中,服务器随机生成一个数字,用户在客户端进行猜测,...