struts中读取外部配置文件信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts中读取外部配置文件信息相关的知识,希望对你有一定的参考价值。

1、在tomcat中webapps目录下放置一个config.properties配置文件;

2、在监听的时候读取写入src目录下;

3、通过Properties类再次读取,可以在service层获取到,具体代码如下:


1、监听类,实现ServletContextListener接口

public class InitJDBCListener implements ServletContextListener {


private static final Logger log = Logger.getLogger(InitJDBCListener.class);


public void contextInitialized(ServletContextEvent event) {


ServletContext context = event.getServletContext();

// autoSetupJDBC(context);

loadJDBCProperties(context);

// 加载项目配置文件

loadConfigProperties(context);


// 此时, web.xml 中的context-param 元素已经被加载到ServletContext 对象中。

setWPSFlag(context);


setJDBCKeys(context);

}


    

private void loadConfigProperties(ServletContext sc){

log.info("加载项目配置文件");

File newMsgProperties = getNewMsgPropertiesFile(sc);

File oldMsgProperties = getOldMsgPropertiesFile(sc);

try {

setMsgProperties(oldMsgProperties, newMsgProperties);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private void setMsgProperties(File oldMsgProperties,File newMsgProperties) throws IOException{

if(newMsgProperties != null && oldMsgProperties != null){

FileInputStream fis = new FileInputStream(newMsgProperties);

FileOutputStream fos = new FileOutputStream(oldMsgProperties);

byte[] bs = new byte[fis.available()];

fis.read(bs);

fos.write(bs);

fos.flush();

fis.close();

fos.close();

}

}


private File getOldMsgPropertiesFile(ServletContext sc) {

String appDir = sc.getRealPath(File.separatorChar + "");

String msgPropertiesPath = appDir + "WEB-INF" + File.separatorChar

+ "classes" + File.separatorChar + "config.properties";

File msgFile = new File(msgPropertiesPath);

if (msgFile.exists())

return msgFile;

return null;

}


private File getNewMsgPropertiesFile(ServletContext sc) {

String appDir = sc.getRealPath(File.separatorChar + "");

File appDirFile = new File(appDir);

String appContainerPath = appDirFile.getParent();

String msgPropertiesPath = appContainerPath + File.separatorChar + "config_gagb" + File.separatorChar

+ "config.properties";

File msgFile = new File(msgPropertiesPath);

if (msgFile.exists())

return msgFile;

return null;

}

}


2、在web.xml中配置监听,代码如下:


    <!-- 必须放在ContextLoaderListener之前-->

    <listener>

<listener-class>

org.gagb.webapp.listener.InitJDBCListener

</listener-class>

</listener>

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>


3、通过Properties 读取配置文件:

/**

* 读取配置文件

     * config.properties放在src目录下

* @return

*/

public static Properties getConfigProperties() {

Properties prop = new Properties();

try {

java.net.URL url = CommonUtil.class.getResource("/config.properties");

String savePath = url.getPath();

// 以下方法读取属性文件会缓存问题

// InputStream in = PropertiesUtils.class

// .getResourceAsStream("/config.properties");


InputStream in = new BufferedInputStream(new FileInputStream(savePath));

prop.load(in);

} catch (Exception e) {

e.printStackTrace();

return null;

}

return prop;

}

4、在serve中添加Properties静态变量:

  private static Properties pro = CommonUtil.getConfigProperties();


5、在方法中根据key获取value:

  String adcode = pro.getProperty(Constants.AD_CODE);


6、如果在struts.xml中配置了<constant name="struts.custom.i18n.resources" value="ApplicationResources,errors,jdbc,gis,axis,msg,config" /> 则可以直接通过getText("key")获取;

本文出自 “画江湖之不良人” 博客,谢绝转载!

以上是关于struts中读取外部配置文件信息的主要内容,如果未能解决你的问题,请参考以下文章

jar读取外部和内部配置文件的问题

ActionServlet在我们工程中哪里?我们写了xml。struts的配置文件,有action,怎么就是没看见actionServlet

spring boot框架学习之重要注解3注解方式读取外部资源配置文件

springboot 入门二- 读取配置信息一

Struts流程分析+源码分析

spring(读取外部数据库配置信息基于注解管理beanDI)