Java 如何在jax-rs中使用属性文件?

Java 如何在jax-rs中使用属性文件?,java,tomcat,properties,jax-rs,Java,Tomcat,Properties,Jax Rs,我刚刚开始使用在Tomcat上运行的jax rs设置web服务。有没有一种方法可以将属性文件与我的java项目(在eclipse中)捆绑在一起,以便在运行时从中读取属性?还有,如果可能的话,最好放在哪里(这样就不能通过url看到)、WebContent、WEB-INF等等 谢谢。有几种选择: 选项1:您可以将它放在您的类路径下(在Eclipse中将它放在和源文件夹下),这样您就可以通过类加载器访问它:MyClass.class.getResourceAsStream(“myproperties.

我刚刚开始使用在Tomcat上运行的jax rs设置web服务。有没有一种方法可以将属性文件与我的java项目(在eclipse中)捆绑在一起,以便在运行时从中读取属性?还有,如果可能的话,最好放在哪里(这样就不能通过url看到)、WebContent、WEB-INF等等

谢谢。

有几种选择:

选项1:您可以将它放在您的类路径下(在Eclipse中将它放在和源文件夹下),这样您就可以通过类加载器访问它:
MyClass.class.getResourceAsStream(“myproperties.properites”)

请注意,MyClass也必须在同一个源文件夹中(实际上它有点复杂,它必须在同一个classloader层次结构中,但来自同一文件夹的任何类都可以完成此任务)

选项2:将其放入WEB-INF文件夹。这是首选选项,因为您不需要处理类路径。您需要一个ServletContext来访问它:
javax.servlet.ServletContext.getResourceAsStream(“WEB-INF/myproperties.Properties”)

在jax rs中,您可以在任何注册的资源或提供程序中使用@Context注释来获取ServletContext。

对于3.1用户,我能够让Tarlog的两个选项都工作,但我必须使用文件的绝对路径。对于选项1,我将文件放在NetBeans的Source Packages文件夹中,然后可以通过以下方式访问该文件夹:

InputStream is = TestResource.class.getResourceAsStream("/test_model.js");
对于选项2,我将文件放在WEB-INF下并使用:

@Context ServletContext servletContext;
InputStream is = servletContext.getResourceAsStream("/WEB-INF/test_model.js");

没有前导斜杠,结果为空。HTH

只要把它放在类路径中(WEB-INF/classes;在maven项目中,src/resources是合适的位置)并用类加载器加载它。我没有maven项目,WEB-INF/lib就足够了吗?如果我的类不是正在返回的资源类,而是正在创建的POJO(扩展验证器),那么文件属性(“WEB-INF/lib/jaxrs.Properties”)在运行时的路径会是什么样子,我是否需要将servlet上下文从资源物理地传递到它的构造函数中,或者通过setter传递,或者是否有一种方法将其注入其中?好的,如果一个类不是通过JAX-RS创建的,那么JAX\U RS在这里对您没有帮助。您需要手动执行此操作。我必须执行类似于Someclass.class.getResourceAsStream(“../../file.properties”)的操作,但如果某个类位于另一个包中,则需要更改此操作。有没有办法指定文件的绝对路径,比如/src/file.properties之类的?只需将属性文件放在根包下,这样您就可以始终编写:Someclass.class.getResourceAsStream(“file.properties”)我需要写入文件的情况如何?是否有方法将属性文件或某些自定义设置文件用于war,这些文件将在启动时加载,但不在项目中?例如/etc/myapp/file.conf