问题描述
我在Eclipse中有一个具有以下文件夹结构的Web项目
MyProject \\ Web内容\\ WEB-INF \\ src \\ com \\ some \\ path
以及路径文件夹中的过滤器servlet MyFilter以及src中的xml文件。 我正在尝试使用url.getfile获取文件。 这是代码的一部分
public MyFilter() {
try {
URL url = this.getClass().getClassLoader().getResource("antisamy-slashdot-1.4.4.xml");
LOG.info("After getResource");
File Wadafak = new File(url.getFile());//Fails Here
LOG.info("After getFile "+Wadafak.getName());
Policy policy = Policy.getInstance(url.getFile());
antiSamy = new AntiSamy(policy);
} catch (PolicyException e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
我得到After getResource日志,但似乎在File Wadafak = new File(url.getFile());处失败。 。
我应该将xml文件放在哪里,以便servlet检测到它?
1楼
您正在获取NullPointerException
因为this.getClass().getClassLoader().getResource("./format_xml/TransactionsFormat.xml")
返回null
。
但是,如果xml在src文件夹中,即在您的类路径中,则只需执行以下操作:
public MyFilter() {
try {
//URL url = this.getClass().getClassLoader().getResource("antisamy-slashdot-1.4.4.xml");
LOG.info("After getResource");
//access you xml file here directly.
File Wadafak = new File("antisamy-slashdot-1.4.4.xml");
LOG.info("After getFile "+Wadafak.getName());
Policy policy = Policy.getInstance(url.getFile());
antiSamy = new AntiSamy(policy);
} catch (PolicyException e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
根据评论中的要求,您也可以执行以下操作:
public MyFilter() {
try {
URL url = this.getClass().getClassLoader().getResource("/antisamy-slashdot-1.4.4.xml");
LOG.info("After getResource");
//access you xml file here directly.
File Wadafak = new File(url.getFile());
LOG.info("After getFile "+Wadafak.getName());
Policy policy = Policy.getInstance(url.getFile());
antiSamy = new AntiSamy(policy);
} catch (PolicyException e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
2楼
Web项目最正确的结构是:
+src
...java sources...
...properties and config files...
+WebContent
...HTMLs & JSPs...
+WEB-INF
+classes (auto-generated by Eclipse or packager)
... class files...
... properties and config files ....
web.xml
根据此方案,如果将XML文件保存在src / my / package中,则Eclipse将自动将其部署到WebContent / WEB-INF / classes / my / package中。 您可以通过以下过滤器进行访问:
URL url = getClass().getClassLoader().getResource("/my/package/antisamy-slashdot-1.4.4.xml");
请注意,路径必须以斜杠开头。