【问题标题】:Java's getServletContext() equivalent in regular Java class?Java 的 getServletContext() 在常规 Java 类中等效吗?
【发布时间】:2012-07-09 05:59:33
【问题描述】:

基本上,我试图指向 WEB-INF 文件夹中的属性文件,这在我实际使用 servlet 时很容易,但我有几个普通的 Java 类,我需要指向相同的“相对”路径,我似乎无法找到任何方法。

通常这是我指向文件的方式:

InputStream in = getServletContext().getResourceAsStream("/WEB-INF/prop.properties");

【问题讨论】:

  • 可能是getClass().getClassLoader().getResourceAsStream()?
  • 刚试过。似乎也不起作用。 “in”仍然包含空值。我检查了 getClass().getClassLoader() 包含的内容,如果有帮助,那就是 "WebappClassLoader context: /IncTest delegate: false repositories: /WEB-INF/classes/ ----------> Parent Classloader: org.apache.catalina.loader.StandardClassLoader@181a7dc " Dunno。
  • 等一下——所以您正在使用servlet?我现在对您的要求感到困惑。您的类加载器是 Tomcat 中的 WebAppClassLoader
  • 不,这只是一个普通的 Java 类,它是 WebApp 的一部分,被用作一些自动化的后端维护工作。
  • 在这种情况下,我发现@axtavt 的建议非常好。其他任何事情都只是黑客行为。我认为您需要在 servlet 之外从您的 WAR 中执行代码。

标签: java servlets path relative-path


【解决方案1】:

据我所知,唯一的方法是将ServletContext 传递到这些类中(可能包装到其他类中,以分隔不同的抽象级别)。

由于您有一个 Web 应用程序,所有对象图都应该源自 ServletContext 可用的根(servlet、过滤器、侦听器等),以便您可以从这些根沿图传递 ServletContext

【讨论】:

  • 抱歉回复缓慢。我用了你的想法,效果很好。谢谢!
猜你喜欢
  • 2011-01-26
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
相关资源
最近更新 更多