JAVA获取WEB项目下的WEB-INF目录

本文介绍并对比了三种方法来获取Web应用中关键路径:通过类加载器和资源获取当前目录路径,利用Java反射API获取工程目录及WEB-INF路径,以及在Servlet环境中直接获取这些路径的方法。每种方法都提供了不同的应用场景和路径解析逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:

<span style="font-size:14px;">package com.waxberry.common.util;

import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;

public class MyLocalDemo {
	  public static void main(String[] args) {  
		  MyLocalDemo myLocalDemo = new MyLocalDemo();  
	        System.out.println("path=="+myLocalDemo.getWebInfPath());  
	    }  
	      
	    private String getWebInfPath(){  
	        URL url = getClass().getProtectionDomain().getCodeSource().getLocation();  
	        String path = url.toString();  
	        int index = path.indexOf("WEB-INF");  
	          
	        if(index == -1){  
	            index = path.indexOf("classes");  
	        }  
	          
	        if(index == -1){  
	            index = path.indexOf("bin");  
	        }  
	          
	        path = path.substring(0, index);  
	          
	        if(path.startsWith("zip")){//当class文件在war中时,此时返回zip:D:/...这样的路径  
	            path = path.substring(4);  
	        }else if(path.startsWith("file")){//当class文件在class文件中时,此时返回file:/D:/...这样的路径  
	            path = path.substring(6);  
	        }else if(path.startsWith("jar")){//当class文件在jar文件里面时,此时返回jar:file:/D:/...这样的路径  
	            path = path.substring(10);   
	        }  
	        try {  
	            path =  URLDecoder.decode(path, "UTF-8");  
	        } catch (UnsupportedEncodingException e) {  
	            e.printStackTrace();  
	        }  
	          
	        return path;  
	    }  
}
</span>
输出:

<span style="font-size:14px;">path==E:/tl/java_workspaces/waxberry/target/</span>

方法二“:

<span style="font-size:14px;">package com.waxberry.common.util;

import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLDecoder;

public class MyLocalDemo {
	  public static void main(String[] args) {  
		  MyLocalDemo myLocalDemo = new MyLocalDemo();  
	        System.out.println("path=="+myLocalDemo.getXmlPath());  
	    }  
	      
	  /** 
	     * 获取WEB-INF目录下面server.xml文件的路径 
	     * @return 
	     */  
	    public String getXmlPath()  
	    {  
	        //file:/D:/JavaWeb/.metadata/.me_tcat/webapps/TestBeanUtils/WEB-INF/classes/   
	        String path=Thread.currentThread().getContextClassLoader().getResource("").toString();  
	        path=path.replace('/', '\\'); // 将/换成\  
	        path=path.replace("file:", ""); //去掉file:  
	        path=path.replace("classes\\", ""); //去掉class\  
	        path=path.substring(1); //去掉第一个\,如 \D:\JavaWeb...  
	        path+="web.xml";  
	        //System.out.println(path);  
	        return path;  
	    }  
}
</span>

输出:

<span style="font-size:14px;">path==E:\tl\java_workspaces\waxberry\target\web.xml</span>

备注:

<span style="font-size:14px;">我们通过以下语句获取class目录所在的目录:

Thread.currentThread().getContextClassLoader().getResource("").toString();

一般获取到的结果形式为:

file:/D:/JavaWeb/.metadata/.me_tcat/webapps/TestBeanUtils/WEB-INF/classes/ 

根据以上这个字符串,即可提取出WEB-INF目录的绝对路径吧!</span>


方法三:

servelt环境

<span style="font-size:14px;"> String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");</span>
<span style="font-size:14px;">String tempFile = req.getSession().getServletContext().getRealPath("/tempUpload")+"/";</span>

补充:

另:在Jsp,Servlet,Java中详细获得路径的方法!

1.jsp中取得路径:

以工程名为TEST为例:

(1)得到包含工程名的当前页面全路径:request.getRequestURI()
结果:/TEST/test.jsp
(2)得到工程名:request.getContextPath()
结果:/TEST
(3)得到当前页面所在目录下全名称:request.getServletPath()
结果:如果页面在jsp目录下 /TEST/jsp/test.jsp
(4)得到页面所在服务器的全路径:application.getRealPath("页面.jsp")
结果:D:\resin\webapps\TEST\test.jsp
(5)得到页面所在服务器的绝对路径:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
结果:D:\resin\webapps\TEST

2.在类中取得路径:

(1)类的绝对路径:Class.class.getClass().getResource("/").getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路径:System.getProperty("user.dir")
结果:D:\TEST

3.在Servlet中取得路径:

(1)得到工程目录:request.getSession().getServletContext().getRealPath("") 参数可具体到包名。
结果:E:\Tomcat\webapps\TEST
(2)得到IE地址栏地址:request.getRequestURL()
结果:http://localhost:8080/TEST/test
(3)得到相对地址:request.getRequestURI()
结果:/TEST/tes

方法四:

<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
<img src="<%=basePath%>+"signimg/"+文件名>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值