站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题Hibernate+Spring+Struts扩展Struts

Hibernate+Spring+Struts扩展Struts

摘要: 不仅仅是一个强大的框架,同时它也是可扩展的
  简介

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

  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接口:

<table borderColor=#ffcc66 width="90%" align=center bgColor=#c9c9b8 border=1> <tr> <td>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;
 }
}</td></tr></table>
  实现PlugIn接口的类必须完成两个方法:init()和destroy()。当application startup的时候init()方法被调用,当shutdown的时候destroy()方法被调用。Struts还允许给你的PlugIn类传递初始化参数。为了传递参数,你必须在PlugIn类中为每一个参数创建JavaBean式的setter方法。在我们的HibernatePlugIn类中,我会把configFile的name作为参数传进去,而不是硬编码到程序中。

  2、在struts-config.xml中添加如下的代码来通告Struts有新的PlugIn:

<table borderColor=#ffcc66 width="90%" align=center bgColor=#c9c9b8 border=1> <tr> <td><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></td></tr></table>
  属性className是实现了PlugIn接口的类的全限定名。对于每一个初始化参数,可以使用<set-property>元素传递参数。在我们的例子中,我要把config文件的名字传进去,所以使用了一个带有配置文件路径的<set-property>。

  Struts的Tiles和Validator框架都使用PlugIn来读取配置文件进行初始化。另外两件PlugIn可以帮你做到的事情是:

  ·如果你的application依赖于某些配置文件,那么你可以在PlugIn类中检查它们是否可用,如果不可用的话抛出一个ServletException,这样就可以使ActionServlet变为不可用。

  ·PlugIn接口的init()方法是你可以改变ModuleConfig的最后机会,ModuleConfig是一组静态配置信息的集合,用来描述基于Struts模块。Struts将会在所有PlugIn处理完后释放ModuleConfig。




↑返回目录
前一篇: 在Eclipse中使用ANT灵活构建Web应用
后一篇: 通过Java Swing看透MVC设计模式