Struts通过加载插件的形式初始化系统常量以及其他信息
来源:互联网 发布:mac电脑不能用excel 编辑:程序博客网 时间:2024/05/16 11:23
一:通过插件的形式加载系统中定义的常量:
思路:首先定义一个常量类存放系统常量,或者定义一个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";}
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{@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void init(ActionServlet servlet, ModuleConfig config)throws ServletException {System.out.println("load constans success. then you can access constans.......");// TODO Auto-generated method stubConstants 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 timepublic 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;}@Overridepublic void destroy() {// TODO Auto-generated method stubSystem.out.println("do nothing............");}@Overridepublic void init(ActionServlet servlet, ModuleConfig config)throws ServletException {// TODO Auto-generated method stubservlet.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>
然后启动应用访问即可:
两个插件的访问页面显示效果:
- Struts通过加载插件的形式初始化系统常量以及其他信息
- Lighttpd插件系统(二)---插件的加载和初始化
- struts 常量加载顺序
- 通过系统广播,获得apk的packageName以后,如何仅通过packageName获取其他信息
- struts ModuleConfig类加载初始化的过程以及RequestProcessor类源码分析
- 类的加载以及初始化
- 初始化以及类的加载
- Unity3d 通过代码手动创建button(不用GUI自带的button以及其他插件)
- Lighttpd1.4.20源码分析之插件系统(2)---插件的加载和初始化
- struts获取常量配置信息
- 通过vim的插件安装其他vim插件
- java类的加载以及初始化顺序
- datagrid的初始化以及动态加载
- java类的加载以及初始化顺序
- java类的加载以及初始化顺序
- java类的加载以及初始化顺序
- java类的加载以及初始化顺序
- java类的加载以及初始化顺序
- 全世界只有erlang是正确的
- hive脚本深入解读感悟
- linux内核启动过程
- Dalvik虚拟机的运行过程分析
- erlang连接到mysql
- Struts通过加载插件的形式初始化系统常量以及其他信息
- 获取android应用程序信息(PackageInfo、ActivityInfo、ResolveInfo)
- 第十一篇 BCD码调整
- erlang 内存被大量占用,跟踪过程
- NSInvocation 回调使用
- linux times函数分析。
- java.lang.IllegalArgumentException: node to traverse cannot be null!
- PHP上传文件功能实现
- 基带芯片、射频芯片相关