/** * jetbrick-template * http://subchen.github.io/jetbrick-template/ * * Copyright 2010-2014 Guoqiang Chen. All rights reserved. * Email: subchen@gmail.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrick.template.web; import javax.servlet.*; import jetbrick.template.JetConfig; import jetbrick.template.JetEngine; /** * 自动初始化加载 JetEngine。 * <pre><xmp> * <context-param> * <param-name>jetbrick-template-config-location</param-name> * <param-value>/WEB-INF/jetbrick-template.properties</param-value> * </context-param> * * <listener> * <listener-class>jetbrick.template.web.JetWebEngineLoader</listener-class> * </listener> * </xmp></pre> */ public class JetWebEngineLoader implements ServletContextListener { private static final String CONFIG_LOCATION = "jetbrick-template-config-location"; private static JetEngine engine; public static boolean unavailable() { return engine == null; } public static JetEngine getJetEngine() { if (engine == null) { throw new IllegalStateException("Please add JetWebEngineLoader as listener into web.xml"); } return engine; } public static String getTemplateSuffix() { if (engine == null) { throw new IllegalStateException("Please add JetWebEngineLoader as listener into web.xml"); } return engine.getConfig().getTemplateSuffix(); } // 允许非 ServletContextListener 方式初始化 public static void setServletContext(ServletContext servletContext) { if (engine == null) { initJetWebEngine(servletContext); } } private static void initJetWebEngine(ServletContext sc) { // 设置环境变量,以便 JetConfig 能够读取该变量 String webappdir = sc.getRealPath("/"); if (webappdir != null) { // 在 weblogic 中以 war 方式部署的时候,无法使用 getRealPath 方法. System.setProperty("webapp.dir", webappdir); } JetConfig config = new JetConfig(); config.load(JetConfig.TEMPLATE_LOADER, WebResourceLoader.class.getName()); config.load(JetConfig.TEMPLATE_PATH, "/"); // 默认 Webapp 根目录 String location = sc.getInitParameter(CONFIG_LOCATION); if (location != null && location.length() > 0) { config.loadSerlvetResource(sc, location); } else { config.loadClasspath(JetConfig.DEFAULT_CONFIG_FILE); } engine = new JetWebEngine(config, sc); } @Override public void contextInitialized(ServletContextEvent sce) { initJetWebEngine(sce.getServletContext()); } @Override public void contextDestroyed(ServletContextEvent sce) { engine = null; } }