我正在为我的网络应用添加电子邮件发送功能。将从java.util.Properties
文件中读取SMTP服务器设置。我不想硬编码这个文件的路径。
我应该在哪里保留此档案?
我应该如何访问此文件?
答案 0 :(得分:3)
要遵循的一个好方法是将静态资源(如属性文件)保留在WEB-INF/classes/
目录下。
这样他们就可以从classpath
读取而不能被浏览器访问:
例如,将您的设置文件放在WEB-INF/classes/mail-settings.properties
下,并使用以下内容进行阅读:
InputStream is = MyClass.class.getResourceAsStream("mail-settings.properties");
Properties p = new Properties();
p.load(is);
is.close();
答案 1 :(得分:1)
将属性文件保存在类路径位置,如文件夹中:WEB-INF / classes / mail.properties 这里的属性文件是 - mail.properties。要阅读此文件,您可以使用以下代码
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class EmailPropertyReader {
private static ResourceBundle myResources;
public static String FILENAME = "mail";
static{
initialize(FILENAME);
}
public static void initialize(String propertyFile) throws MissingResourceException
{
try{
myResources = ResourceBundle.getBundle(FILENAME, Locale.getDefault());
}catch(Exception ex){
//Logger
}
}
private static String getParameter(String parmName)
{
String param = null;
try
{
param = myResources.getString(parmName) ;
}catch(Exception e){
param = null;
//Logger
}
if (param != null)
return param.trim();
else
return param;
}
}
您只需创建对象并在此输入代码使用方法getParameter() ->
例如:
mail.properties :
EMAILID=a@a.com
然后
String strEmailid=EmailPropertyReader.getParameter("EMAILID");
答案 2 :(得分:0)
如果您想将其与代码保持一致,您也可以通过编程方式创建Properties实例。
Properties mailProperties = new Properties();
mailProperties.setProperty("mail.transport.protocol", "smtp");
mailProperties.setProperty("mail.smtp.host", "localhost");
mailProperties.setProperty("mail.smtp.port", "587");
mailProperties.setProperty("mail.smtp.auth", "false");
javax.mail.Session.getInstance(mailProperties);
如果您想将它放在属性文件中,您可以将其作为类路径资源加载。看看java.lang.Class中的getResourceAsStream。更新:请参阅epochs答案,了解如何执行此操作!
答案 3 :(得分:0)
这是一个解决方案:
我已将EmailSettings.properties
个文件放入WebContent\WEB-INF\classes
。此代码现在有效:
InputStream inputFile = this.getClass().getClassLoader().getResourceAsStream("EmailSettings.properties");
Properties emailConfig = new Properties();
emailConfig.load( inputFile );
.
.
.
答案 4 :(得分:-1)
如果设置与阶段有关,则可以通过vm Enviorment varibable设置文件的路径。
-DmyPropertyFilePath = ....
上加载属性文件(即使是有点日期)也有一个很好的技巧