普通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类文件~~
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
(处理@Configuration
的AnnotationConfigWebApplicationContext
的超类)覆盖。
这将创建一个ServletContextResource
,它可以成功地定位相对于 servlet 上下文的资源。
【讨论】:
它应该与 spring 3.2 一起工作吗?对我来说,它在启动时一直告诉“无法打开类路径资源 [WEB-INF/properties/config.properties],因为它不存在”。 (注意:错误消息中删除了前导斜杠) @baraber 通常 WEB-INF 不会添加到类路径中。将您的属性文件移动到类路径中的某个位置或将 WEB-INF 添加到类路径中。以上是关于普通java类文件如何访问WEB-INF目录下的文件,不是Servlet、JSP类文件的主要内容,如果未能解决你的问题,请参考以下文章
把src目录下的java类文件打成jar包放到web-inf下的lib里,classes文件删除
关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
普通Java Web项目为什么lib包要放在WEB-INF下