Struts不仅仅是一个强大的框架,同时它也是可扩展的。你可以以三种方式来扩展Struts。
1、PlugIn:如果你想在application startup或shutdown的时候做一些业务逻辑的话,那就创建你自己的PlugIn类。
2、RequestProcessor:如果你想在请求被处理的过程中某个时刻做一些业务逻辑的话,那么创建你自己的RequestProcessor类。比如说,在每次请求执行之前,你可以扩展RequestProcessor来检查用户是否登陆了以及他是否有权限去执行某个特定的action。
3、ActionServlet:如果你想在application startup和shutdown的时候以及请求被处理的时候做某些业务逻辑,你也可以扩张ActionServlet类。不过你应当在PlugIn和RequestProcessor都不能解决你的需求的时候来使用ActionServlet。
在这篇文章中,我们将使用一个Struts应用的示例来示范如何使用这三种方式来扩展Struts。示例程序的代码可以从http://www.onjava.com/onjava/2004/11/10/examples/sample1.zip下载。两个扩展Struts成功的范例是Struts自身的Validation和Tiles框架。
我们假设你已经比较熟悉Struts框架并且知道如何使用它创建一个简单的应用。如果你想知道更多关于Struts的内容,请参考官方主页。
PlugIn
PlugIn是一个接口,你可以创建一个实现该接口的类,当application startup或shutdown的时候做些事情。
比方说,我创建了一个使用Hibernate作为持久层的web应用,我想当应用启动的时候就初始化Hibernate,这样子当我的web应用受到第一个请求的时候,Hibernate就已经是配置好的并且可用的。同时我们想当application关闭的时候关闭Hibernate。我们可以用一个Hibernate PlugIn来实现这个需求,通过如下的两步:
1、创建一个类实现了PlugIn接口:
public class HibernatePlugIn implements PlugIn{
private String configFile;
// This method will be called at application shutdown time
public void destroy() {
System.out.println("Entering HibernatePlugIn.destroy()");
//Put hibernate cleanup code here
System.out.println("Exiting HibernatePlugIn.destroy()");
}
//This method will be called at application startup time
public void init(ActionServlet actionServlet, ModuleConfig config)
throws ServletException {
System.out.println("Entering HibernatePlugIn.init()");
System.out.println("value of init parameter " +
getConfigFile());
System.out.println("Exiting HibernatePlugIn.init()");
}
public String getConfigFile() {
return name;
}
public void setConfigFile(String string) {
configFile = string;
}
}
实现PlugIn接口的类必须完成两个方法:init()和destroy()。当application startup的时候init()方法被调用,当shutdown的时候destroy()方法被调用。Struts还允许给你的PlugIn类传递初始化参数。为了传递参数,你必须在PlugIn类中为每一个参数创建JavaBean式的setter方法。在我们的HibernatePlugIn类中,我会把configFile的name作为参数传进去,而不是硬编码到程序中。
2、在struts-config.xml中添加如下的代码来通告Struts有新的PlugIn:
<struts-config>
...
<!-- Message Resources -->
<message-resources parameter= "sample1.resources.ApplicationResources"/>
<!-- Declare your plugins -->
<plug-in className="com.sample.util.HibernatePlugIn">
<set-property property="configFile" value="/hibernate.cfg.xml"/>
</plug-in>
</struts-config>
属性className是实现了PlugIn接口的类的全限定名。对于每一个初始化参数,可以使用<set-property>元素传递参数。在我们的例子中,我要把config文件的名字传进去,所以使用了一个带有配置文件路径的<set-property>。
Struts的Tiles和Validator框架都使用PlugIn来读取配置文件进行初始化。另外两件PlugIn可以帮你做到的事情是:
·如果你的application依赖于某些配置文件,那么你可以在PlugIn类中检查它们是否可用,如果不可用的话抛出一个ServletException,这样就可以使ActionServlet变为不可用。
·PlugIn接口的init()方法是你可以改变ModuleConfig的最后机会,ModuleConfig是一组静态配置信息的集合,用来描述基于Struts模块。Struts将会在所有PlugIn处理完后释放ModuleConfig。
http://hi.baidu.com/ng520tx/blog/item/46dd642791cd8700918f9d94.html
分享到:
相关推荐
标题提到的"扩展Struts1.x标签"指的是开发者根据项目需求自定义了Struts1.x的标签库,增加了新的功能,例如Select和Table标签。 1. **Select标签**: Select标签是用于在HTML表单中创建下拉选择框的。原生的Struts...
8. **PlugIn**:允许开发者插入自定义的初始化和销毁代码,以扩展Struts1的功能。 9. **Interceptor**:拦截器是Struts1中实现AOP(面向切面编程)的重要机制,可以定义在请求处理之前和之后执行的逻辑,例如日志...
众所周知,struts2宣称freemarker模板中不再支持自定义标签,但如果工程UI仅用freemarker模板可以通过扩展struts标签简单实现,不是采用官方不推荐的配置JspSupportServlet实现的!内付详细说明及范例,此方法仅为团队...
3. **配置扩展**:为了实现注解支持,我们需要扩展Struts1的配置机制。这可能包括编写自定义拦截器来解析注解信息,以及修改或扩展ActionServlet来处理注解配置的Action。 4. **POJO Action**:传统Struts1的Action...
本话题将深入探讨如何使用FreeMarker扩展Struts2的标签库,以增强视图层的表现力和灵活性。 首先,FreeMarker是一个基于模板的语言,它允许开发者用简单的语法来处理数据模型并生成HTML或其他文本。在Struts2中,...
5. **Tiles**:Struts1的一个扩展,用于创建可重用的页面布局,增强了视图的灵活性和可维护性。 6. **国际化与本地化**:Struts1支持多语言环境,通过资源包(.properties文件)管理不同语言的文本。 7. **JSP标签...
11. **Configurable** 和 **PlugIn** 接口:允许开发者创建自定义配置和插件,以扩展Struts 1的功能。 12. **MessageResources**:处理国际化和本地化,提供资源文件加载和消息查找功能。 通过深入理解和熟练运用...
7. **插件架构**:Struts 2的插件体系使得扩展和定制变得简单,如 strut2-dojo-plugin 提供了与Dojo JavaScript库的集成。 整合Struts 1和Struts 2涉及到的主要工作包括: 1. **Action映射**:将Struts 1的Action...
- 在 Struts1 中,Action 类需要继承自一个抽象基类,这限制了其可扩展性和定制性。而 Struts2 改进了这一点,Action 类可以实现 Action 接口,也可以实现其他接口,提供了更多的灵活性。ActionSupport 类则提供了...
1. **拦截器**:Struts2的核心特性之一是拦截器,它们按照预定义的顺序在Action执行前后进行干预。拦截器可以用来实现日志记录、事务管理、权限检查等功能,也可以自定义拦截器来满足特定需求。例如,我们可以通过...
- **Struts2**:继承了Struts1的Front Controller模式,并引入了拦截器(Interceptor)机制,使得扩展性和灵活性更强。拦截器链允许在请求到达Action之前和之后执行自定义逻辑。 2. 表达式语言(EL)支持: - **...
本篇文章将详细介绍如何在Struts2中去除.action后缀,以及Struts1中隐藏.do扩展名,使URL更加简洁。 首先,让我们来看看Struts2的情况。在Struts2中,默认情况下,所有的请求都会映射到.action结尾的URL上。为了...
Struts1和Struts2是两个非常著名的Java Web框架,...总的来说,Struts2在设计上更加灵活、可测试和可扩展,而Struts1则相对更注重基础功能和简单的实现。在实际项目中,开发者会根据具体需求和项目规模选择适合的框架。
7. **Plug-in(插件)**:Struts1支持插件架构,允许开发者扩展框架功能,例如Struts Tiles用于布局管理,Struts Tiles通过定义模板和部分来构造复杂的页面结构。 8. **JSP标签库**:Struts1提供了丰富的JSP标签,...
使用一个Struts应用的示例来示范如何使用这三种方式来扩展Struts。两个扩展Struts成功的范例是Struts自身的Validation和Tiles框架 用到了Hibernate, Spring, Struts的结构 此源代码教程: ...
Struts1和Struts2是两个不同的版本,它们各自拥有独特的特性和功能,但在Java Web开发领域都扮演了重要角色。 **Struts1** Struts1是最早的版本,它在2001年发布,是基于ApacheJakarta项目的一个框架。Struts1的...
最后,在数据校验方面,Struts1支持在ActionForm的validate方法中进行手动校验,或使用Commons Validator扩展。Struts2提供了更多样化的校验方式,包括validate方法和基于XML的XWork验证框架,以及支持子对象的校验...
4. **Tiles**: Tiles是Struts1的一个扩展,提供了一种强大的布局和页面组装机制,可以创建可重用的页面片段。 **Struts2.0** Struts2是Struts1的升级版,它吸取了许多其他框架的优点,如WebWork,提供了更灵活的...
### Struts2 与 Struts1 的核心区别 #### 一、架构设计及Action实现方式 **Struts1** 在架构上要求Action类必须继承一个特定的抽象基类,这限制了开发者的灵活性,同时也意味着所有的Action都需要遵循相同的生命...
### Struts1与Struts2的主要区别 #### 一、Action执行机制的不同 - **Struts1**: 在Struts1...Struts2在灵活性、可扩展性和易用性方面相对于Struts1有了很大的改进,这使得它成为许多现代Web应用开发的首选框架之一。