Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat6中的类路径资源(在Jetty中工作)_Java_Classpath_Tomcat6_Maven 3_Maven Jetty Plugin - Fatal编程技术网

Java Tomcat6中的类路径资源(在Jetty中工作)

Java Tomcat6中的类路径资源(在Jetty中工作),java,classpath,tomcat6,maven-3,maven-jetty-plugin,Java,Classpath,Tomcat6,Maven 3,Maven Jetty Plugin,我在迁移到Maven3的遗留Web应用程序方面遇到了问题 我需要从目录结构中的类路径中获取一个文件: /src/main/resources/com/thinkglish/geoip/geoip.dat 当我使用Maven构建创建.war文件时,我可以确认该.dat文件位于以下位置: WEB-INF/classes/com/thinkglish/geoip/geoip.dat 我正在尝试两种不同的方法从实现javax.servlet.Filter的一个类中获取资源: 及 如果我使用Maven的J

我在迁移到Maven3的遗留Web应用程序方面遇到了问题

我需要从目录结构中的类路径中获取一个文件:

/src/main/resources/com/thinkglish/geoip/geoip.dat

当我使用Maven构建创建.war文件时,我可以确认该.dat文件位于以下位置:

WEB-INF/classes/com/thinkglish/geoip/geoip.dat

我正在尝试两种不同的方法从实现javax.servlet.Filter的一个类中获取资源:

如果我使用Maven的Jetty插件启动应用程序,这两种方式都可以。但是,当我在Tomcat中部署应用程序并启动服务器时,无法找到资源

在第一种情况下,我得到一个java.io.FileNotFoundException:类路径资源[com/thinkglish/geoip/geoip.dat]无法解析为URL,因为它不存在,在第二种情况下,资源为null

关于这一切,一件奇怪的事情是,如果我使用一种或另一种方法试图从类路径获取另一个资源,例如com/thinkglish/struts/i18n/MessageResources.properties或com/thinkglish/filter/LanguageFilter.class,那么它可以毫无问题地工作

你对此有什么猜测吗?.dat扩展是否可能与此有关

编辑-更多数据! 我在.dat文件所在的目录中添加了一个新的.properties模拟文件:

/src/main/resources/com/thinkglish/geoip/mock.properties

我试着在Tomcat6中获得它,它成功了

我开始认为我需要做一些其他配置方面的事情,使Tomcat6接受.dat文件作为类路径资源

提前谢谢

以下方法应该有效:

String classpathLocation = "com/thinkglish/geoip/GeoIp.dat";
URL classpathResource = Thread.currentThread().getContextClassLoader().getResource(classpathLocation);
// Or:
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(classpathLocation);

我可能是找错人了。。。但是你检查过GeoIP.dat/GeoIP.dat的资本化了吗?Tomcat是否运行在区分大小写的操作系统上?

安舒,这不太可能。似乎出于某种原因,该文件没有到达类路径。真遗憾!你不会相信我的,但你是对的。Jetty没有对此抱怨,所以我没有检查这个基本问题。谢谢
URL resource = getClass().getResource("/com/thinkglish/geoip/GeoIp.dat");
ClassPathResource resource = new ClassPathResource("com/thinkglish/geoip/mock.properties");
String classpathLocation = "com/thinkglish/geoip/GeoIp.dat";
URL classpathResource = Thread.currentThread().getContextClassLoader().getResource(classpathLocation);
// Or:
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(classpathLocation);