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,如需转载请自行联系原作者

目录
相关文章
|
1天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1064 0
|
10天前
|
人工智能 运维 安全
|
1天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
251 0
|
8天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
9天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
740 23