<context-param>
<param-name>chatpropertyfile</param-name>
<!-- Name of the chat properties file. It contains the name and description of rooms.-->
<param-value>chat.properties</param-value>
</context-param>
和chat.properties您可以这样声明您的属性 例如:
Jsp = Discussion about JSP can be made here.
Java = Talk about java and related technologies like J2EE.
ASP = Discuss about Active Server Pages related technologies like VBScript and JScript etc.
Web_Designing = Any discussion related to HTML, JavaScript, DHTML etc.
StartUp = Startup chat room. Chatter is added to this after he logs in.
6条答案
按热度按时间2admgd591#
它只需要在类路径中(也就是说,确保它作为构建的一部分在.war中的/webinf/classes下结束)。
fslejnso2#
警告:如果你把配置文件放在
WEB-INF/classes
文件夹,并且您的ide(比如eclipse)执行清理/重建,它将删除conf文件,除非它们位于java源目录中。balusc的回答在选项1中暗示了这一点,但我想强调一下。我很难理解,如果你在eclipse中“复制”一个web项目,它会从任何源文件夹进行清理/重建。在我的例子中,我从pojojava库中添加了一个“linkedsourcedir”,它将编译到
WEB-INF/classes
文件夹。在该项目(不是web应用程序项目)中执行清理/重建会导致相同的问题。我想把我的conf放在pojo src文件夹中,但是这些conf都是为第三方lib(比如quartz或urlrewrite)准备的,它们在
WEB-INF/lib
文件夹,所以这没有意义。我计划在开始使用它时将它放在webprojects“src”文件夹中进行测试,但该文件夹当前是空的,并且其中包含conf文件似乎不太美观。所以我投票赞成把conf文件放进去
WEB-INF/commonConfFolder/filename.properties
,位于classes文件夹旁边,即balus选项2。l7wslrjt3#
您可以使用源文件夹创建这些文件,因此无论何时生成,这些文件都会自动复制到classes目录。
不要使用属性文件,而是使用xml文件。
如果数据太小,甚至可以使用web.xml访问属性。
请注意,这些方法中的任何一种都需要重新启动app server才能反映出更改。
2sbarzqh4#
例如:在web.xml文件中
和chat.properties您可以这样声明您的属性
例如:
oalqel3c5#
假设您的代码正在查找文件app.properties。通过在tomcat的bin dir中创建setenv.sh,将这个文件复制到任意dir并将这个dir添加到classpath。
在tomcat的setenv.sh中(如果此文件不存在,请创建一个,tomcat将加载此setenv.sh文件)。
#!/bin/sh CLASSPATH="$CLASSPATH:/home/user/config_my_prod/"
属性文件不应位于./webapps//web inf/classes/app.properties中tomcat类加载器将用来自web inf/classes的加载器重写/
一本好书:https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html
iswrvxsc6#
这是你的选择。java web应用程序存档(war)基本上有三种方式:
1. 把它放在类路径中
这样你就可以通过
ClassLoader#getResourceAsStream()
类路径相对路径:在这里
foo.properties
应该放在webapp的默认类路径覆盖的根中,例如webapp的/WEB-INF/lib
以及/WEB-INF/classes
,服务器的/lib
,或jdk/jre的/lib
. 如果propertiesfile是特定于webapp的,最好是将其放置在/WEB-INF/classes
. 如果您正在ide中开发一个标准的war项目,请把它放进去src
文件夹(项目的源文件夹)。如果您使用的是maven项目,请将其放入/main/resources
文件夹。也可以将其放置在默认类路径之外的某个位置,并将其路径添加到appserver的类路径中。例如,在tomcat中,您可以将其配置为
shared.loader
财产Tomcat/conf/catalina.properties
.如果您已放置
foo.properties
它是一个java包结构,比如com.example
,则需要按以下方式加载请注意,上下文类装入器的此路径不应以
/
. 只有在使用“相对”类装入器时,如SomeClass.class.getClassLoader()
,那么您确实需要从/
.但是,属性文件的可见性取决于所讨论的类装入器。它只对加载类的类加载程序可见。因此,如果类是由服务器公共类加载器而不是webapp类加载器加载的,并且属性文件在webapp内部,那么它是不可见的。上下文类加载器是您最安全的选择,因此您可以将属性文件“随处可见”放置在类路径中,和/或您希望能够覆盖上webapp提供的服务器。
2. 把它放到网络内容里
这样你就可以通过
ServletContext#getResourceAsStream()
具有webcontent相对路径:注意,我已经演示了如何将文件放入
/WEB-INF
文件夹,否则任何webbrowser都可以访问它。还要注意的是ServletContext
在任何地方HttpServlet
类只能由继承的GenericServlet#getServletContext()
而且在Filter
由FilterConfig#getServletContext()
. 如果您不在servlet类中,它通常只是通过@Inject
.3. 把它放在本地磁盘文件系统中
这样你就可以正常加载了
java.io
绝对本地磁盘文件系统路径:请注意使用绝对路径的重要性。相对的本地磁盘文件系统路径在javaeeweb应用程序中是绝对不允许的。另请参阅下面的第一个“请参阅”链接。
选择哪一个?
在你自己的可维护性观点中权衡一下优点/缺点。
如果属性文件是“静态”的,并且在运行时不需要更改,那么您可以将它们保留在war中。
如果您希望能够从web应用程序外部编辑属性文件,而无需每次都重新生成和重新部署war,则将其放在项目外部的类路径中(如有必要,将目录添加到类路径中)。
如果您希望能够使用从web应用程序内部以编程方式编辑属性文件
Properties#store()
方法,将其放在web应用程序之外。作为Properties#store()
需要Writer
,不能使用磁盘文件系统路径。该路径又可以作为vm参数或系统属性传递给web应用程序。作为预防措施,切勿使用getRealPath()
. 重新部署时,deploy文件夹中的所有更改都将丢失,原因很简单,这些更改不会反映回原始war文件中。另请参见:
getresourceasstream()与fileinputstream
向tomcat类路径添加目录
以编程方式访问jsf应用程序中的属性文件