标签:oar 自己 too copyright war nts 文件 配置到 index.jsp
如何让springmvc在启动的时候执行特定的业务处理
java 的 web服务器启动时,经常会做一些特定的业务逻辑处理,比如数据库初始化,
初始化系统参数,读取配置文库等。
很多web服务的中间件,可以 通过这样的思路去实现。比如消息分发服务。
实现方法:
一、Web项目,非Spring
解决方法:实现【 ServletContextListener】 接口
(1)、把实现了ServletContextListener 的类配置到【 web.xml】 文件中
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>com.chinaso.init.StartInit</listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
(2)、加入自己的实现逻辑
public class StartInit implements ServletContextListener { static final Logger logger = LoggerFactory.getLogger(StartInit.class); // 系统初始化执行方法 public void contextDestroyed(ServletContextEvent e) { logger.info("系统停止..."); } public void contextInitialized(ServletContextEvent e) { logger.info("系统初始化开始..."); // 获取项目根目录 String root_path = e.getServletContext().getRealPath("/"); logger.info("application path : {}",root_path); // 初始化 ConfigFactorty ConfigFactory.init(root_path); // 初始化数据链接信息 DBManager.init(); // 初始化定时统计任务 TaskManager.init(); // 初始化用户信息查询位置 UserInfo.init(); logger.info("系统初始化结束..."); } }
二、Spring项目
Spring-MVC的应用中,要实现类似的功能,主要是通过实现下面这些接口(任选一,至少一个即可)
1、ApplicationContextAware接口
package org.springframework.context; import org.springframework.beans.BeansException; import org.springframework.beans.factory.Aware; import org.springframework.context.ApplicationContext; public interface ApplicationContextAware extends Aware { void setApplicationContext(ApplicationContext var1) throws BeansException; }
2、ServletContextAware 接口
package org.springframework.web.context; import javax.servlet.ServletContext; import org.springframework.beans.factory.Aware; public interface ServletContextAware extends Aware { void setServletContext(ServletContext var1); }
3、InitializingBean 接口
package org.springframework.beans.factory; public interface InitializingBean { void afterPropertiesSet() throws Exception; }
4、ApplicationListener<ApplicationEvent> 接口
package org.springframework.context; import java.util.EventListener; import org.springframework.context.ApplicationEvent; public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { void onApplicationEvent(E var1); }
java代码:
package test.web.listener; import org.apache.logging.log4j.*; import org.springframework.beans.*; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.*; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; import org.springframework.web.context.ServletContextAware; import javax.servlet.ServletContext; @Component public class StartupListener implements ApplicationContextAware, ServletContextAware, InitializingBean, ApplicationListener<ContextRefreshedEvent> { protected Logger logger = LogManager.getLogger(); @Override public void setApplicationContext(ApplicationContext ctx) throws BeansException { logger.info("1 => StartupListener.setApplicationContext"); } @Override public void setServletContext(ServletContext context) { logger.info("2 => StartupListener.setServletContext"); } @Override public void afterPropertiesSet() throws Exception { logger.info("3 => StartupListener.afterPropertiesSet"); } @Override public void onApplicationEvent(ContextRefreshedEvent evt) { logger.info("4.1 => MyApplicationListener.onApplicationEvent"); if (evt.getApplicationContext().getParent() == null) { logger.info("4.2 => MyApplicationListener.onApplicationEvent"); } } }
运行时,输出的顺序如下:
1 => StartupListener.setApplicationContext
2 => StartupListener.setServletContext
3 => StartupListener.afterPropertiesSet
4.1 => MyApplicationListener.onApplicationEvent
4.2 => MyApplicationListener.onApplicationEvent
4.1 => MyApplicationListener.onApplicationEvent
注意:onApplicationEvent方法会触发多次,初始化这种事情,越早越好,建议在setApplicationContext方法中处理。
标签:oar 自己 too copyright war nts 文件 配置到 index.jsp
原文地址:http://www.cnblogs.com/wlsblog/p/7750202.html