我在Eclipse中有一个带有以下文件夹结构的Web项目
MyProject \ Web Content \ 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);
}
}
我收到 在getResource 日志之后,但似乎在 文件Wadafak = new File(url.getFile());
我应该在哪里放置xml文件以便servlet检测到它?
答案 0 :(得分: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);
}
}
答案 1 :(得分:1)
网络项目最重要的结构是:
+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");
请注意,路径必须以斜杠开头。