1.关于request.getRealPath
问题:
String filename=request.getRealPath(filename)
-------------------
信息:
warning: [deprecation] getRealPath(java.lang.String) in javax.servlet.ServletRequest has been deprecated
解决:
这个getRealPath方法已经不建议使用了
参看request.getRealPath的java doc:
Deprecated. As of Version 2.1 of the Java Servlet API, use ServletContext.getRealPath(java.lang.String) instead.
而在servlet中使用getServletContext.getRealPath()这个方法受到war 和non-war的影响,以及不同app server实现的影响,运气好的话,你常常会得到null,嘿嘿,比如你在weblogic上部署war文件,又调用这个方法..
推荐ServletContext.getResourceAsStream
2.关于serveletContext.getRealPath返回NULL和不同的app server返回不同的结果
问题:
有几个配置文本配置文件(是一些报表的模板),放在WEB-INF下面的config目录下,程序中是这样得到这个config的实际路径的:
先用 serveletContext.getRealPath得到根路径,tomcat中比如是
c:\tomcat\webapp\test
然后我加上 "/WEB-INF/config/aa.config",这样得到文件的path然后进行读入,应用在tomcat上跑是ok的,后来将war放到weblogic上,出错,原因是:
在weblogic上用getRealPath得到的是像
myserver\stage\_appsdir_test_war\test.war!\WEB-INF\config....
这样的路径,于是一直报FileNotFoundException
解决:
serveletContext.getRealPath
这个方法在不同的服务器上所获得的实现是不一样的, 建议是通过classloader来获得你配置的资源文件
context.getRealPath("/")可能返回了null,你可以输入来看看,
对一个打包的应用来说,是没有RealPath的概念的,调用getRealPath只会简单地返回null。其实,也很
好理解,一个文件被打包入了.war文件,就不存在目录结构了(虽然包中仍然存在目录结构,但这不等同于文件系统中的目录结构)。所以,对war包中的资源是无法得到RealPath的。这样也就无从通过文件IO进行读取了。
那么,如何读取war包中的资源呢?答案是使用:
ServletContext.getResourceAsStream("/WEB-INF/config/aa.config")方法。
原则:基本上就是尽量使用j2ee规范中的各层次classloader来获取资源,而不是试图去找文件的绝对路
径
方法:调用this.getClass().getClassLoader().getResource("/").getPath(); 获取到classes目录的全路径
使用:在得到classes目录的全路径后再根据字符串的截取与拼装达到你的要求即可。
绝对不要使用ServletContext的getRealPath方法获取Web应用的路径!应该使用ServletContext的getResource()方法,直接使用相对于Web应用根目录的相对路径来获取资源。
ServletContext接口中定位资源的方法
getResource
java.net.URL getResource(java.lang.String path)
throws java.net.MalformedURLException
Returns a URL to the resource that is mapped to a specified path. The path must begin with a "/" and is interpreted as relative to the current context root.
This method allows the servlet container to make a resource available to servlets from any source. Resources can be located on a local or remote file system, in a database, or in a .war file.
The servlet container must implement the URL handlers and URLConnection objects that are necessary to access the resource.
This method returns null if no resource is mapped to the pathname.
Some containers may allow writing to the URL returned by this method using the methods of the URL class.
The resource content is returned directly, so be aware that requesting a .jsp page returns the JSP source code. Use a RequestDispatcher instead to include results of an execution.
This method has a different purpose than java.lang.Class.getResource, which looks up resources based on a class loader. This method does not use class loaders.
Parameters:
path - a String specifying the path to the resource
Returns:
the resource located at the named path, or null if there is no resource at that path
Throws:
java.net.MalformedURLException - if the pathname is not given in the correct form
getResourceAsStream
java.io.InputStream getResourceAsStream(java.lang.String path)
Returns the resource located at the named path as an InputStream object.
The data in the InputStream can be of any type or length. The path must be specified according to the rules given in getResource. This method returns null if no resource exists at the specified path.
Meta-information such as content length and content type that is available via getResource method is lost when using this method.
The servlet container must implement the URL handlers and URLConnection objects necessary to access the resource.
This method is different from java.lang.Class.getResourceAsStream, which uses a class loader. This method allows servlet containers to make a resource available to a servlet from any location, without using a class loader.
Parameters:
path - a String specifying the path to the resource
Returns:
the InputStream returned to the servlet, or null if no resource exists at the specified path
getRealPath
java.lang.String getRealPath(java.lang.String path)
Returns a String containing the real path for a given virtual path. For example, the path "/index.html" returns the absolute file path on the server's filesystem would be served by a request for "http://host/contextPath/index.html", where contextPath is the context path of this ServletContext..
The real path returned will be in a form appropriate to the computer and operating system on which the servlet container is running, including the proper path separators. This method returns null if the servlet container cannot translate the virtual path to a real path for any reason (such as when the content is being made available from a .war archive).
Parameters:
path - a String specifying a virtual path
Returns:
a String specifying the real path, or null if the translation cannot be performed
说明
可以看到,ServletContext接口中的getResource()等方法,可以找到任何从应用程序的根目录开始的资源。包括在.war包这样的压缩文件中。参数必须以/开头。
而我们常用的getRealPath(“/”)方法,在.war包发布时,就会失效。会返回null。
因此,我们应该避免使用getRealPath(“/”)这样的方法来获取应用程序的绝对路径。
相关推荐
windows linux 下,获取java项目绝对路径的方法,struts2设置了struts.multipart.saveDir后会在根目录建立文件夹,这样会涉及linux下的权限问题
在 Java 项目中,获取绝对路径可以使用 `HttpServletRequest` 对象的 `getRealPath()` 方法。在 Web 项目中,可以使用 `request.getRealPath("")` 获取绝对路径。 ClassPath 路径 ClassPath 路径是 Java 项目中的...
android获取文件绝对路径类,是本人项目中直接取出的类。在protected void onActivityResult()中使用
### JAVA获取项目路径 在Java开发中,获取项目的路径是一个非常常见的需求,尤其是在处理文件读写、资源定位等场景时尤为重要。本文将详细介绍如何通过不同的方法来获取项目的各种路径,并结合示例代码进行说明。 ...
本文将围绕“获取项目的相对路径和绝对路径”这一主题进行深入探讨,帮助读者理解不同场景下如何正确地获取路径。 ### 一、引言 在Java Web应用中,路径主要分为两种:相对路径与绝对路径。相对路径是指相对于当前...
在Java编程中,获取类的绝对路径是一项常见的需求,特别是在集成开发环境中如Eclipse。这主要涉及到类加载器和文件系统交互的相关知识。下面将详细解释如何在Java中获取类的绝对路径,以及相关的概念和技术。 首先...
在讨论获取项目的相对路径之前,我们需要了解绝对路径和相对路径的概念。绝对路径是指文件或目录在硬盘上的真正路径,例如 C:\xyz\test.txt 代表了 test.txt 文件的绝对路径。相对路径是指相对于某个基准目录的路径...
我们可以使用 `System.IO.Path.GetFullPath()` 方法来获取相对于当前运行的可执行程序所在目录的给定的相对路径对应的绝对路径。 实践示例 例如,要显示在程序目录下的 Images/test/1.jpg 图片包含在项目中,可以...
其中,获取文件夹的绝对路径是一项基本但非常重要的功能。绝对路径是指从根目录开始到达目标文件或文件夹的具体路径,它能够确保程序在不同的操作系统或环境中都能准确地定位到指定位置。 ### 相关知识点详解 ####...
在编程中,获取程序本身的绝对路径是一个常见的需求,特别是在开发多模块应用或者需要自我定位的程序时。在MFC(Microsoft Foundation Classes)框架下,这是一个简单但重要的任务。MFC是微软提供的一种C++库,它...
在实际开发中,获取资源的绝对路径有多种方法,这些方法可以帮助我们根据不同的需求来定位资源: 1. `FileTest.class.getResource("")`:返回当前类`FileTest.class`所在目录的URI,但不包括`FileTest.class`自身。...
- 如果你需要获取某个文件所在目录的上级目录,可以先通过`application.getRealPath(request.getRequestURI())`得到该文件的绝对路径,再使用`new File(...).getParent()`获取其上级目录。 2. **Servlet中获取路径...
在实际应用中,为了增强代码的可移植性和适应性,建议使用相对路径或者配置文件来存储需要访问的文件路径,而不是硬编码绝对路径。 此外,如果你需要获取项目的根目录,特别是对于桌面应用,可以考虑使用`System....
理解并掌握绝对路径和相对路径的转换对于任何编程项目都是至关重要的,特别是在处理文件系统操作、构建可移植的应用程序或者在多模块项目中协调资源路径时。通过学习和使用这些编程语言的内置工具,我们可以更加高效...
### 相对路径和绝对路径的区别与使用 ...无论是绝对路径还是相对路径,都需要根据项目的具体需求来确定最佳实践。总之,理解并掌握这两种路径的概念及其使用方法对于任何涉及到文件管理的任务都是极其有用的。
### Python3中获取文件当前绝对路径的两种方法 在Python编程中,经常需要获取文件的绝对路径以便于后续处理或定位文件位置。本文将详细介绍在Python3中获取文件当前绝对路径的两种常用方法,并深入探讨每种方法的...
开发web工程时经常要获取工程的根目录,自己用Java实现的获取Tomcat下war包部署的Web工程根目录路径的方法,主要利用web工程默认的目录结构,此外也可以指定工程名称获取工程目录的绝对路径
### Java中File的相对路径与绝对路径总结...无论是相对路径还是绝对路径,都需要结合具体的项目结构和文件存储位置进行合理的设置。此外,还需要注意不同方法对路径格式的要求,确保能够正确无误地访问所需的文件资源。
总结来说,Ant自动获取文件路径涉及了Ant的属性设置、文件集定义、路径操作以及文件操作任务等多个方面,这些功能使得Ant能够灵活地管理项目中的文件和目录,实现自动化构建流程。通过理解和熟练运用这些知识点,...
绝对路径是从根目录开始到目标文件或目录的完整路径,而相对路径则相对于当前工作目录或者指定的基路径。在某些场景下,如软件部署、资源引用或者文件操作,使用相对路径可以更加灵活且节省存储空间。本篇将详细介绍...