当前位置:首页>编程日记>正文

Struts 为什么使用插件

注:对Struts进行扩展有三种方法(1.修改ActionServlet,2.继承RequestProcessor.3.做一插件继承PlugIn)  

问题:有时候你需要在应用程序启动时装载一些数据到程序上下文中或执行某些操作。
解决方法:创建一个实现了org.apache.struts.action.PlugIn接口的类文件并在struts-config.xml中设置plug-in元素。
以下代码片段显示了一个plug-in生命声明和一个自定义的set-property子元素:
<plug-in className="com.oreilly.strutsckbk.CustomPlugin" >  
<set-property property="customData"                   value="Hello from the plugin"/></plug-in>   
细节讨论:Struts提供一个 PlugIn接口能使你在启动应用程序时为你提供自定义的操作。
其源代码如下:package org.apache.struts.action; 
import javax.servlet.ServletException;
import org.apache.struts.config.ModuleConfig; 
public interface PlugIn {  void destroy(); void init(ActionServlet servlet, ModuleConfig config) throws ServletException;}要实现一个plug-in,你只需要实现这个接口并在struts-config.xml文件的中声明plug-in元素。子类必须实现方法destroy()和init()。init()在ActionServlet启动时实例化plug-in过程中执行,当ActionServlet结束时执行destroy(),一般情况下是应用程序关闭。通过在plug-in元素中设置set-property元素,可以向PlugIn类传递参数。所有set-property元素都在init()方法执行之前被执行,这样就可以在init()方法中使用这些由set-property设置的参数了。Struts将ActionServlet的引用和ModuleConfig参数传递给init()方法。ActionServlet使的init()方法中可以将数据保存到ServletContext中。ActionServlet还可以使你能够访问更多的J2EE组件如java sources、message队列等。ModuleConfig可以让你访问当前的模块配置信息。n   举例说明:你需要定义一个plug-in记录应用程序何时运行的及运行了多久。TimeTracker.java:package com.yourcompany.struts.plugin; import java.util.Date; public class TimeTracker {   private long startUpTimeMillis;  private Date startedOn;   public TimeTracker( ) {     startUpTimeMillis = System.currentTimeMillis( );     startedOn = new Date( );   }   public long getUptime( ) {    return System.currentTimeMillis( ) - startUpTimeMillis;  }   public Date getStartedOn( )
{    return startedOn;  }}
创建一个PlugIn子类TimeTrackerPlugin。
TimeTrackerPlugi将TimeTracker保存在ServletContext中,键名由由plug-in元素的set-propery子元素指定:TimeTrackerPlugin.java:package com.yourcompany.struts.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 key) {       this.contextKey = key;   }      public void init(ActionServlet servlet, ModuleConfig conf)         throws ServletException {      servlet.getServletContext( ).setAttribute(contextKey, new TimeTracker( ));   }    public void destroy( ) {    }}struts-config.xml:  <plug-in className="com.yourcompany.struts.plugin.TimeTrackerPlugin">    <set-property property="contextKey" value="timeTracker"/>  </plug-in> 你可以使用如下的JSP片段访问TimTracker,并显示关于应用程序运行时间的信息。 n   你也可以在web.xml中配置一个Servlet实现plug-in的功能将load-on-startup值设置为一个较低的值如1。他将在应用程序启动是自动加载并执行。
容器在实例化Servlet后将调用此Servlet的init()方法。
比较而言,使用plug-in有更多的优势:
1.  一般情况下Struts应用程序设置好web.xml后,在开发过程中不许要改动他的内容。在web.xml中增加servlet意味着增加了一个维护对象。
2.  plug-in接口提供了访问struts应用程序特有的信息的能力。 

plug-in的声明周期跟ActionSerlvet的生命周期一致。他可以保证你的struts应用程序需要的信息可用


本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2010/12/20/1911916.html,如需转载请自行联系原作者


http://www.coolblog.cn/news/137f310a85acb970.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • jquery 使用小技巧
  • 2019-9
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • linux批量创建用户和密码
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • js常用阻止冒泡事件
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • 【设计模式】 模式PK:策略模式VS状态模式
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • CSS小技巧——CSS滚动条美化
  • JS实现-页面数据无限加载
  • 阿里巴巴分布式服务框架 Dubbo
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里大鱼.net core 发送短信
  • 程序员入错行怎么办?
  • 两张超级大表join优化
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 《看透springmvc源码分析与实践》读书笔记一
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • Arm芯片的新革命在缓缓上演
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 行为模式之Template Method模式
  • 通过Spark进行ALS离线和Stream实时推荐