Java Tomcat6中的类路径资源(在Jetty中工作)
我在迁移到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文件作为类路径资源 提前谢谢 以下方法应该有效: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
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);