扩展你的STRUTS

python——体育收入排行2012-2019 请分析文件并读取数据,完成以下功能: 1. 某年的收入排名前若干名选手 如果输入n是2012-19之间的年份,则可以输入整数k,输出n年的前k名排名信息。如果k大于当年排名运动员人数,则输出当年所有的信息。每行一名运动员信息,以' | '间隔该行各项信息。 2. 某年属于某个运动项目的所有运动员信息,和收入总和 如果输入的是'sport'(不区分大小写),则可以继续输入一个年份201*,输出一个当年排行中的运动项目菜单,按照字符串升序排列,格式见示例,再输入运动项目对应的数字来输出该项运动当 阅读详情

扩展你的STRUTS

1.使用<Plugin>机制

  在struts1.1中利用新增的org.apache.struts.action.PlugIn 接口提供<Plugin>扩展机制。
任何的JAVA类都可以当作你自己的PLUGIN,只要该类实现前面提到的PlugIn接口。

  PlugIn接口包含两个方法,如下:
       /**
        *The org.apache.struts.action.PlugIn Interface
        */
public interface PlugIn {
/**
 * Receive notification that the specified sub-applicaiton is being
 * started up.
 *
 */
 public void init(ActionServlet servlet, ApplicationConfig config)
   throws ServletException;

/**
 * Receive notification that our owning sub-application is being
 * shut down.
 */
 public void destroy();
}
   在struts应用程序启动的时候,ActionServlet通过init()方法实例每一个Plugin,struts支持一个或多个
Plugin,如果你的应用程序采取多模块的话,并且可以延伸到“子应用模块”(sub-application:struts1.1新增
功能,此类内容我会在以后的文章中介绍)。
   一旦你实现了struts的PlugIn接口,你将可以在init()方法中放一些需要初始化的东西。(这里将是一个
非常好的“安放”数据库连接的地方,当然初始化数据库连接也可以通过datasource。),对于destory()方法我
想你一定明白它将在你的应用程序结束时调用,这里你可以关闭你在init()方法中初始化的数据库连接等等。

2.在struts-config.xml中添加你的plugin

    这将是非常简单的工作。如下代码:
    <plug-in
    className="com.ifreeway.rms.v12.action.Plugins.InitDataSource"/>    


[资料:《Programming Jakarta Struts》]

   下面我将给出一个简单的用plugin实现连接池的例子。
   
package com.ifreeway.rms.v12.action.Plugins;
import java.io.File;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* Class or Interface Discription
* @author   $Author:jack$
* @version  $ReVision:1.0 $ <br/>
* $Id:InitDataSource.java 2003-5-7 10:03:31 jack Exp.  
*/
public class InitDataSource implements PlugIn {
static String contextFactory =
"com.sun.jndi.rmi.registry.RegistryContextFactory";
private Context ctx = null;
/**
* Commons Logging instance.
*/
private static Log log = LogFactory.getLog(InitDataSource.class);
/**
* Receive notification that the specified sub-applicaiton is being
* started up.
*
*/
public void init(ActionServlet servlet, ModuleConfig config)
throws ServletException {
try {
//解析WEB-INF/database.xml
String dbfile =
servlet.getServletContext().getRealPath(
"/WEB-INF/database.xml");

File file = new File(dbfile);

SAXBuilder builder = new SAXBuilder();

Document doc = builder.build(file);

Element rootElm = doc.getRootElement();
Element normalElm = rootElm.getChild("host");
Element dbuserElm = rootElm.getChild("user");

List dbUserList = dbuserElm.getChildren();
Element dbuser = null;

for (int i = 0; i < dbUserList.size(); i++) {
dbuser = (Element) dbUserList.get(i);
Context ctx = new InitialContext();
ctx.addToEnvironment(
javax.naming.Context.INITIAL_CONTEXT_FACTORY,
contextFactory);
//DriverManager.setLogStream(System.out); // to create more info
// for technical support
// create a DataSource with pooling
com.inet.tds.PDataSource ds = new com.inet.tds.PDataSource();
ds.setServerName(normalElm.getChildText("servername"));
ds.setDatabaseName(dbuser.getAttributevalue("dbname"));
ds.setUser(dbuser.getAttributevalue("username"));
ds.setPassword(dbuser.getAttributevalue("password"));
ds.setLoginTimeout(10);
ds.setMaxPoolSize(6); // default 0
ds.setInitialPoolSize(5); // default 0
ds.setMinPoolSize(3); // default 0
ds.setMaxIdleTime(300); // PLEXA default 600
ds.setDescription("A Test Data Source");
//ds.setSqlServer7Modus( false );
ctx.bind(dbuser.getAttributevalue("JNDIName"), ds);
}

} catch (Exception e) {
log.info(e);
}
}
/**
* Receive notification that our owning sub-application is being
* shut down.
*/
public void destroy() {
try {
if (ctx != null) {
ctx.close();
ctx = null;
}
} catch (NamingException ex) {
ex.printStackTrace();
}
}
}
   
[该例中除了struts中常用的jar以外还要包括:jdom.jar providerutil.jar rmiregistry.jar jndi.jar]

我在struts-config.xml中添加plugin的代码同上。

你可以不必理会该例的具体实现,只要理解Struts的这一扩展机制即可。

这篇文章最初是发贴在CJW(http://www.chinajavaworld.net)的struts专区


Jplateau 2003-05-09

扩展Struts框架 扩展Struts框架一个好的软件框架应该具备可扩展特性。在Struts框架中提供了许多可扩展之处,不放将其称为可扩展点(Extension Point)。以下是Struts扩展点:· 一般性扩展点:Struts插件(PlugIn)、扩展Struts配置类。· 控制器的扩展点:扩展ActionServlet类、RequestProcessor类和Action类。· 视图的扩展点:扩展Struts 阅读详情

相关推荐

使用Simulink进行四足机器人的非线性动力学建模与仿真

四足机器人的运动包含多个自由度(DOF),包括腿部的摆动和支撑阶段的动力学特性。由于存在接触力、摩擦以及不同地形的影响,四足机器人的动力学行为呈现出高度的非线性特征。因此,构建准确的非线性动力学模型对于研究机器人的运动学和动力学特性至关重要。定义代表机器人状态的变量,如位置、速度、角度和角速度。matlab深色版本通过本指南,我们介绍了如何基于Simulink搭建一个四足机器人的非线性动力学模型,并进行了详细分析。

xiaoheshang_123的博客 287

扩展Struts

者:Sunil Patil;loryliu原文地址:http://www.onjava.com/pub/a/onjava/2004/11/10/ExtendingStruts.html中文地址:http://www.matrix.org.cn/resource/article/43/43857_Struts.html简介我见过许多项目开发者实现自己专有的MVC框架。这些开发者并不是因为想实现不

行者无疆 608

GJB 2725B-2024 军用校准和测试实验室能力通用要求.rar

GJB 2725B-2024 军用校准和测试实验室能力通用要求.rar

扩展StrutsPlugin接口

1.使用机制在struts1.1中利用新增的org.apache.struts.action.PlugIn 接口提供扩展机制。任何的JAVA类都可以当作你自己的PLUGIN,只要该类实现前面提到的PlugIn接口。PlugIn接口包含两个方法,如下:/***The org.apache.struts.action.PlugIn Interface*/public interface Plu

鲤鱼商城 3101

使用StrutsPlugIn进行Web应用的扩展

  Struts提供了PlugIn的方式来扩展Struts的功能,这种方式的扩展适合于实现Struts启动或者停止时需要执行的某些特殊处理的情况,可以方便地实现Web应用启动时的系统初始化工作以及在Web应用卸载时的资源释放工作,它不能实现针对每个用户请求的处理功能.   开发一个StrutsPlugIn需要以下两个步骤:(1)实现Struts定义的PlugIn接口,其中的init()方法将在应...

爱java,爱生活 151

Struts秘籍之第1段:第2.1式:用插件来进行应用初始化

第2.1式. 用插件来进行应用初始化问题在应用启动时需要装入应用初始化数据到context 中。动作要领创建一个类,实现org.apache.struts.action.PlugIn接口,并且在struts-config.xml文件中指定plug-in元素。下面的XML 片断展示了一个plug-in 声明以及一个嵌套的set-property元素来设置定制属性: plu

急死我了 811

数据库连接driverClass、jdbcUrl、Maven依赖不完全记录

驱动jar包获取方式: 1) 通过maven自动获得; 2) 到maven仓库去搜索下载:http://search.maven.org/ 3) 到各数据库官网去下载。   MySQL驱动源码下载: http://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.25/src/   PS: 表格样式怎么这么难搞啊?边框设置为...

Love Cafe, Love Java 478

Sunil Patil 告诉你如何扩展Struts

 by Sunil Patil11/10/2004 IntroductionI have seen lot of projects where the developers implemented a proprietary MVC framework, not because they wanted to do something fundamentally different from S

Hsu Tsing 好好学习,天天快乐 1205

Hibernate+Spring+Struts扩展Struts

  简介:  我看到很多项目中,开发者实现了自己的MVC框架,并不是因为他们想做同Struts根本不同的东西,而是因为他们并没有意识到如何扩展Struts。开发自己的MVC框架可以获得全部的控制权,但是这也意味着需要很多资源来实现它(人力物力),在紧张的日程安排下,有时候这是不可能的。   Struts不仅仅是一个强大的框架,同时它也是可扩展的。你可以以三种方式来扩展Struts。  1、Plug

键者天行 5597

如何在项目实践中扩展Struts

我看到很多项目中,开发者实现了自己的MVC框架,并不是因为他们想做同Struts根本不同的东西,而是因为他们并没有意识到如何扩展Struts。开发自己的MVC框架可以获得全部的控制权,但是这也意味着需要很多资源来实现它(人力物力),在紧张的日程安排下,有时候这是不可能的。   Struts不仅仅是一个强大的框架,同时它也是可扩展的。你可以以三种方式来扩展Struts。   1、PlugIn:如果你

1332

iReport 和 Jasperreport整合开发web报表向导(1)

iReport 和 Jasperreport整合开发web报表向导(1)        我是在一个星期以前接触iReport 和 Jasperreport的,下载最初它们并没有吸引我的兴趣(或信任),主要是他们的版本的问题(我一直不敢用版本都不到1.0的工具软件,目前它们的版本:iReport0.2.2,Jasperreport0.5.0),不过听说有人在用他们,于是就仔细看了一下(因为在

隐隐约约出现平常人诞生的故乡 9256

iReport 和 Jasperreport整合开发web报表向导(2)

iReport 和 Jasperreport整合开发web报表向导(2)        在上一篇文档里我们初步介绍了iReport和Jasperreport,基本上我们已经对它们有了一个最初的认识,在今天这篇文档里,我将深入的对iReport这个工具进行说明。        接着上篇文档的结尾,如果我们成功运行iReport的话,可以看到如下的主界面:  点击“新增

隐隐约约出现平常人诞生的故乡 9179

Hibernate综合查询解决方案

Hibernate查询解决方案      这两个星期以来,我把原来用struts开发的一个测试工具改用struts+hibernate来实现,首先从心情上来,整个开发过程中始终保持愉快和平和,“原来开发可以这样愉快?”,再一点就是开发效率上高效了许多。      现在sun又加入jdocentral.com开始着手JDO2.0,想想看等它出台以后将是一个怎样激动人心得场面,让我们拭目以待。  

隐隐约约出现平常人诞生的故乡 3014

iReport 和 Jasperreport整合开发web报表向导(3)

iReport 和 Jasperreport整合开发web报表向导(3) 让我们先回顾一下上一篇文档中已经阐述的问题:1. 如何连接数据库?2. 如何定义变量、参数以及字段?3. 如何定义字体以及如何使用自定义的字体(如黑体、楷体或者比较艺术化的子体)?下面我们接着往下阐述余下的两个问题,在开始以前我补充两个因该在上篇文档阐述而没有阐述的地方。       第一个就是我

隐隐约约出现平常人诞生的故乡 2469

使用Hibernate进行对象的关系映射

使用Hibernate进行对象的关系映射原文连接:http://www.meagle.com:8080/hibernate.jsp    Hibernate是业界比较推崇的ORM(o/r mapping),目前的版本已经非常稳定和成熟,而且的他的文档也极其丰富。    Http://www.jdon.com和http://www.chinaxp.com 这两个技术网站对hibernate的

隐隐约约出现平常人诞生的故乡 1982

基于Junit2.0的StrutsTestCase应用

基于Junit2.0的StrutsTestCase应用        在我的前一篇文档《测试驱动的开发是重要的》中说过我要写一些测试框架应用方面的文档,今天我要实现我的诺言之一,这篇文章是介绍StrutsTeseCase的,熟悉并采用struts的开发员曾经一定有过这样一个困扰:我的action如何进行测试?(不是说要“测试先行”么?),如果没有一个可行的测试框架那我的struts环境去哪

隐隐约约出现平常人诞生的故乡 1659

为actin mpping之attribute属性正身!

在很多时候,action mapping中的attribute 和 name 这两个属性一直困扰我,今天我觉得是该痛下决心拔掉这颗钉子的时候了。 翻看一些资料。。。。。 在《Programming Jakarta Struts》这本书中的第四章“Configuring the Struts Application”中这样一段说明来分别阐述这两个属性:(102页)++++++++atribu

隐隐约约出现平常人诞生的故乡 1525
下一篇: 为actin mpping之attribute属性正身!
Jplateau
博客等级 码龄23年 1粉丝 49原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值