我有在Eclipse中开发的Tomcat中运行的JSP项目。
我想要一些存储在项目中的文件。
这是我的项目结构:
.settings
build
data
ImportedClasses
src
WebContent
.classpath
.project
我想从位于data
的JSP文件中的代码中访问WebContent
文件夹。
尝试下面的一些代码:
File userDataDirFile = new File ( "data" );
String path = userDataDirFile.getAbsolutePath();
打印
C:\Program Files\eclipse\data\users
然后
this.getClass().getClassLoader().getResource("").getPath()
打印
C:/Workspaces/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/survey/WEB-INF/classes/
另一个:
System.getProperty("user.dir")
打印
C:\Program Files\eclipse
我没有尝试过的代码(我认为第二个解决方案可以工作,但它没有)可以找到我的项目的根文件夹。有人可以提供建议吗?
答案 0 :(得分:0)
编辑:不会在您的战争中部署不在WebContent中的文件。您必须将您的代码中使用的文件放在WebContent中,并尝试使用ServletContext指向您的Web应用程序的根文件夹: 如果您的文件与WEB-INF位于同一文件夹,则:
ServletContext context = getContext();
String fullPath = context.getRealPath("/data");
顺便说一下,如果您不想直接访问data
文件,建议将其放入WEB-INF,以便没有人可以直接访问它们。
答案 1 :(得分:0)
String caminhoProjeto = Thread.currentThread().getContextClassLoader().getResource("").getPath();
这类似于“ src”路径,但在部署和运行后是二进制文件上下文的“类”路径。
例如,我的班级需要使用这种方式“项目的根目录”:
PropertiesReader.java:
public class PropertiesReader {
public static String projectPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();
public static String propertiesPath = "/META-INF/";
public static Properties loadProperties(String propertiesFileName) throws IOException {
Properties p = new Properties();
p.load(new FileInputStream(projectPath + propertiesPath + propertiesFileName));
return p;
}
public static String getText(String propertiesFileName, String propertie) {
try {
return loadProperties(propertiesFileName).getProperty(propertie);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return propertie;
}
}
PersonRegistration.java:
@ManagedBean
public class PersonRegistration {
private Integer majority = Integer.parseInt(PropertiesLeitor.getText("Brasil.properties", "pessoa.maioridade"));
}
Brasil.properties(在src / META-INF中):
pessoa.maioridade = 18