普通java类文件如何访问WEB-INF目录下的文件,不是Servlet、JSP类文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了普通java类文件如何访问WEB-INF目录下的文件,不是Servlet、JSP类文件相关的知识,希望对你有一定的参考价值。

同上,
希望有高手能帮忙解答下。
情况是这样:
比如 普通的一个class文件
public class Info
public Info()
FileInputStream is=new FileInputStream("×××.properties")
Properties props=new Properties();
props.load(is);




"×××"这个属性文件是在/WEB-INF目录下的 ***.properties。
但是我不知道如何才能给让它访问到。
在线等
想要访问jdbc.properties属性文件的这个类既不是Servlet也不是JSP。是普通的java类文件~~

你就用System.out.print();在控制台输出一下内容咯!例如一下就是访问配置文件并输出相应变量的方法
public void capturePropertys(String driver,String url,String user,String password)
Properties prop = new Properties();
InputStream is = a_connection_Propertys.class.getResourceAsStream("db.properties");
//getClass().getResourceAsStream("mysql.properties");
try
prop.load(is);
catch(IOException e)

System.out.println("[Dbconnection]打开 文件 出错");


this.jdbc = prop.getProperty(driver);
this.url = prop.getProperty(url);
this.user = prop.getProperty(user);
this.password = prop.getProperty(password);

System.out.println("jdbc="+this.jdbc);
System.out.println("url="+this.url);
System.out.println("user="+this.user);
System.out.println("password="+this.password);

参考技术A 普通java类访问WEB-INF目录下的文件的方法:
1、申明文件对象

File myConfigFile = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getFile());
System.out.println("Finding calss path first then remove classes from the path " + myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFIle/report01/reports.xml")
2、替换classes然后加入文件路径。
File f = new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml")
3、解析web-inf下的xml文件:
document = docBuilder.parse(new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml"));
参考技术B 标签
<%@ taglib uri="/WEB-INF/testTag.tld" prefix="tt" %>

Spring @PropertySource,如何读取不在类路径上,而是在WEB-INF下的文件

【中文标题】Spring @PropertySource,如何读取不在类路径上,而是在WEB-INF下的文件【英文标题】:Spring @PropertySource, how to read a file not on the classpath, but under WEB-INF 【发布时间】:2016-04-12 13:19:29 【问题描述】:

Spring 版本 4.2.2:Java Config 会替代以下内容:

<bean id="placeholderConfig"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="/WEB-INF/conf/mars.properties" />
</bean>

我在其中一个配置中有以下内容。文件:

@Configuration
@EnableTransactionManagement
@ComponentScan
@PropertySource("file:WEB-INF/conf/mars.properties")
public class JpaConfig 

private static final String DB_DRIVER = "a";
private static final String DB_URL = "b";    
private static final String DB_USERNAME = "c";
private static final String DB_PASSWORD = "d";
private static final String DB_PLATFORM = "e";

@Resource
private Environment env;

@Bean(destroyMethod="close")
public DataSource dataSource() 
org.apache.tomcat.jdbc.pool.DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource();
PoolProperties p = new PoolProperties();

p.setUrl(env.getProperty(DB_URL));
p.setDriverClassName(env.getProperty(DB_DRIVER));
p.setUsername(env.getProperty(DB_USERNAME));
p.setPassword(env.getProperty(DB_PASSWORD));
....

这会导致以下运行时错误:

Caused by: java.io.FileNotFoundException: \WEB-INF\conf\mars.properties (The system cannot find the path specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)

我尝试了以下变体但无济于事:

@PropertySource("file://WEB-INF/conf/mars.properties")

这是一个基于 XML 配置的应用程序,我将其转换为 Java Config。

【问题讨论】:

【参考方案1】:

你只需要

@PropertySource("/WEB-INF/conf/mars.properties")

Spring 将使用DefaultResourceLoader#getResource(String)。对于以/ 开头的路径,这将委托给getResourceByPath,它被AbstractRefreshableWebApplicationContext(处理@ConfigurationAnnotationConfigWebApplicationContext 的超类)覆盖。

这将创建一个ServletContextResource,它可以成功地定位相对于 servlet 上下文的资源。

【讨论】:

它应该与 spring 3.2 一起工作吗?对我来说,它在启动时一直告诉“无法打开类路径资源 [WEB-INF/properties/config.properties],因为它不存在”。 (注意:错误消息中删除了前导斜杠) @baraber 通常 WEB-INF 不会添加到类路径中。将您的属性文件移动到类路径中的某个位置或将 WEB-INF 添加到类路径中。

以上是关于普通java类文件如何访问WEB-INF目录下的文件,不是Servlet、JSP类文件的主要内容,如果未能解决你的问题,请参考以下文章

在java中怎么访问web-inf 目录下的jsp页面。

把src目录下的java类文件打成jar包放到web-inf下的lib里,classes文件删除

关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件

普通Java Web项目为什么lib包要放在WEB-INF下

普通Java Web项目为什么lib包要放在WEB-INF下

怎么样让servlet访问web-inf下的网页或jsp文件