一:通过插件的形式加载系统中定义的常量:
思路:首先定义一个常量类存放系统常量,或者定义一个xml或properties文件中然后进行读取,
然后把相应的常量放入map中
最后编写插件类,加载map类
最后把插件类放入struts-config.xml中启动的时候进行加载
这样在其他页面中就可以随意访问了。
1:首先定义在常量类中定义一些常量:
package com.topwqp.common.constants; public class Globals { public static final String AUTHOR = "topwqp"; public static final String PLUGINTEST = "puginTest"; }
2:把常量放在map中,
package com.topwqp.common.constants; import java.util.HashMap; import java.util.Map; public class Constants { private Map globals; public Constants(){ globals = new HashMap(); globals.put("AUTHOR", Globals.AUTHOR); globals.put("PLUGINTEST", Globals.PLUGINTEST); } public Map getGlobals() { return globals; } public void setGlobals(Map globals) { this.globals = globals; } }
3:编写对应的插件类:
插件类需要实现PlugIn接口关于这个接口的介绍在下面
package com.topwqp.plugin; import javax.servlet.ServletException; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ModuleConfig; import com.topwqp.common.constants.Constants; public class ConstantsPlugin implements PlugIn{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { System.out.println("load constans success. then you can access constans......."); // TODO Auto-generated method stub Constants constants = new Constants(); servlet.getServletContext().setAttribute("Constants", constants); } }
关于PlugIn接口的源码如下:意思就是需要实现init() 其中init方法用于系统启动的一些设置在这个方法中进行编写,
deploy方法是系统关闭时候的一些操作在这个方法中进行设置。
源码如下:
/* * $Id: PlugIn.java 471754 2006-11-06 14:55:09Z husted $ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.struts.action; import org.apache.struts.config.ModuleConfig; import javax.servlet.ServletException; /** * <p>A <strong>PlugIn</strong> is a configuration wrapper for a * module-specific resource or service that needs to be notified about * application startup and application shutdown events (corresponding to when * the container calls <code>init</code> and <code>destroy</code> on the * corresponding {@link ActionServlet} instance). <code>PlugIn</code> objects * can be configured in the <code>struts-config.xml</code> file, without the * need to subclass {@link ActionServlet} simply to perform application * lifecycle activities.</p> * * <p>Implementations of this interface must supply a zero-argument * constructor for use by {@link ActionServlet}. Configuration can be * accomplished by providing standard JavaBeans property setter methods, which * will all have been called before the <code>init()</code> method is * invoked.</p> * * <p>This interface can be applied to any class, including an Action * subclass. </p> * * @version $Rev: 471754 $ $Date: 2005-05-14 01:09:32 -0400 (Sat, 14 May 2005) * $ * @since Struts 1.1 */ public interface PlugIn { /** * <p>Receive notification that our owning module is being shut down.</p> */ void destroy(); /** * <p>Receive notification that the specified module is being started * up.</p> * * @param servlet ActionServlet that is managing all the modules in this * web application * @param config ModuleConfig for the module with which this plug-in is * associated * @throws ServletException if this <code>PlugIn</code> cannot be * successfully initialized */ void init(ActionServlet servlet, ModuleConfig config) throws ServletException; }
然后把编写的插件类在struts-config.xml中进行配置即可,当application在tomcat中启动 时候,首先加载web.xml的文件,web.xml中有相应的初始化设置加载指定的文件:
及struts-config.xml文件:
当然struts允许同时加载多个文件如下我的web.xml的配置如下:
<servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-config.xml, /WEB-INF/struts-config-1.xml, /WEB-INF/struts-config-2.xml </param-value> </init-param> <init-param> <param-name>config/admin</param-name> <param-value> /WEB-INF/struts-config-admin.xml </param-value> </init-param> <init-param> <param-name>config/common</param-name> <param-value> /WEB-INF/struts-config-common.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
把编写的插件配置在struts-config.xml中即可:
<plug-in className="com.topwqp.plugin.ConstantsPlugin"></plug-in>
在对应的jsp页面中访问:
<p> Field name: AUTHOR<br /> Field value: <bean:write name="Constants" property="globals(AUTHOR)"/><br /> </p> <p> Field name: PluginTest<br /> Field value: <c:out value="${Constants.globals.PLUGINTEST}"/><br /> </p>
2:创建一个插件记录应用的启动时间以及已经运行了多久
思路:定义时间追踪类,该类中有应用的启动时间,以及方法获取距离启动时间多久,然后在插件中放入这个类的实例,最后在jsp页面中进行显示即可。
1:定义时间类:
package com.topwqp.plugin; import java.util.Date; public class TimeTracker { private long startUpTimeMillis; private Date startupOn; public TimeTracker (){ startUpTimeMillis = System.currentTimeMillis(); startupOn = new Date(); } // how long the application have started up; public long getUptime(){ return System.currentTimeMillis() - startUpTimeMillis; } // get the application startup time public Date getStartupOn(){ return startupOn; } }这个类中有个默认的构造方法,当对象创建的时候对应的启动时间就产生了,
有一个getUptime方法,用去动态生成距离启动时间的毫秒数。
2:创建对应的插件类:
package com.topwqp.plugin; import javax.servlet.ServletException; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ModuleConfig; public class TimeTrackerPlugin implements PlugIn{ private String contextKey ; public void setContextKey(String contextKey){ this.contextKey = contextKey; } @Override public void destroy() { // TODO Auto-generated method stub System.out.println("do nothing............"); } @Override public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { // TODO Auto-generated method stub servlet.getServletContext().setAttribute(contextKey, new TimeTracker()); } }
3:在struts-config.xml中配置插件:
<plug-in className="com.topwqp.plugin.TimeTrackerPlugin"> <set-property property="contextKey" value="timeTracker"/> </plug-in>
4:在jsp页面中获取对应的时间:
<h4> 系统启动日期: since <bean:write name="timeTracker" property="startupOn" format="MM/dd/yyyy HH:mm"/> <br> 已经运行时间:for <bean:write name="timeTracker" property="uptime"/> milliseconds! </h4>
然后启动应用访问即可:
两个插件的访问页面显示效果: