铁手剑谱

上善若水
数据加载中……

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

第2.1式. 用插件来进行应用初始化

问题

在应用启动时需要装入应用初始化数据到context 中。

动作要领

创建一个类,实现org.apache.struts.action.PlugIn接口,并且在struts-config.xml文件中指定plug-in元素。下面的XML 片断展示了一个plug-in 声明以及一个嵌套的set-property元素来设置定制属性:

 

<plug-in className="com.oreilly.strutsckbk.CustomPlugin" >

  
<set-property property="customData"

                   value
="Hello from the plugin"/>

</plug-in>

 

动作变化

Struts提供了一个PlugIn接口,你可以用它来创建在应用启动时初始化的定制服务。PlugIn接口的Java源代码示于Example 2-1. (为了清晰起见,去除了JavaDoc 文档)

Example 2-1. Struts PlugIn 接口

 

package org.apache.struts.action;

import javax.servlet.ServletException;
import org.apache.struts.config.ModuleConfig;

public interface PlugIn {

    
public void destroy( );

    
public void init(ActionServlet servlet, ModuleConfig config)
        throws ServletException;
}

 

为了实现一个plug-in,只需要实现这个接口并且在struts-config.xml文件中声明这个plug-in 实现。有两个方法必须被实现:即init()和destroy( ), 它们在插件的生命周期中被调用。Struts 在启动ActionServlet时实例化plug-in 之后调用init( )。Struts则在ActionServlet被销毁时调用destroy()方法,通常是在一个用服务器停止时。首先,这个 plug-in 特征似乎是很单纯和有限的。然而,通过使用Struts的另外一个特征,即set-property元素,你可以将特殊的信息传递到plug-in中。这种能力增强了这些类的灵活性。

set-property元素被几乎所有定义Struts实体的元素所支持,比如form-bean, action-mapping, action, 以及plug-in。set-property元素有两个属性:namevalueStruts调用name属性的值指定的property的setter方法,将property设置为value属性的字符串值。

对给定plug-in的所有set-property元素都将在调用plug-in的init( )方法之前进行处理。这允许plug-in 在init( )方法中使用属性的值。

如果对一个plug-in使用多个set-property元素, Struts不能保证它们被调用的顺序。每个setter方法都应该独立于其他任何方法。

 

Struts 将对ActionServlet和plug-in的ModuleConfig的引用作为引数传递给init( )方法。ActionServlet允许访问ServletContext来进行应用范围的对象存储。ActionServlet还可以允许你访问更多高级的容器管理的J2EE 组件,比如数据源和消息队列。ModuleConfig允许你访问定义plug-in 的模块的Struts配置。

每个Struts 应用至少有一个模块:默认模块。如果你不熟悉模块,我们将在第2.5式中讲解之。

为了更具体一些,请考虑一个简单的,但仍然相关的例子。你需要定义一个plug-in,它可以使你决定应用何时启动,以及它启动和运行了多长时间。你可以使用下面所示的类跟踪和报告你的应用的运行时间。

Example 2-2. Application uptime tracker 对象

 

package com.oreilly.strutsckbk;

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接口的实现,比如Example 2-3所示,它实例化了TimeTracker。plug-in 通过plug-in 属性的值将TimeTracker实例保存在ServletContext中。你可以使用这个值来从Servlet上下文中获取TimeTracker实例。虽然这个值是硬编码的,使用属性也提供了更大的灵活性。

Example 2-3. Time tracker plugin

 

package com.oreilly.strutsckbk;

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( ) {
    }

}

 

现在你已经有了为plug-in 创建的类,你可以通过在struts-config.xml中加入plug-in元素来将其集成到Struts 应用中。

 

<plug-in className="com.oreilly.strutsckbk.TimeTrackerPlugin">
    
<set-property property="contextKey" value="timeTracker"/>
</plug-in>

 

plug-in 在servlet 上下文中存储了time tracker对象。可以访问TimeTracker来显示关于应用启动运行时间的信息,下面是相关的JSP 片断:

 

<h4>Continuously running since 
    
<bean:write name="timeTracker" 
            property
="startedOn" 
              format
="MM/dd/yyyy HH:mm"/> for
    
<bean:write name="timeTracker" 
            property
="uptime"/> milliseconds!
</h4>

 

你可以使用一个servlet 来载入像Struts plug-in之类的初始化数据。具有load-on-startup初始化参数的servlet,应将其设置为较低的数值,比如1, 一保证它们在应用启动时载入。容器在实例化Servlet之后将调用servlet的init( )方法。但是Struts plug-in 方式由多个优点。首先,大多数Struts 应用在其初始化设置后不需要修改web.xml文件。必须在web.xml中声明额外的Servlet意味着要维护额外的文件。其次,如果需要PlugIn接口提供对特定Struts信息的访问。最后,因为plug-in 的生命周期紧随ActionServlet的生命周期,所以可以保证在你的Struts应用所需时数据有效。

相关招式

第2.8式展示了set-property元素的另一种用法。Struts 文档中关于plug-in 的信息可以访问http://jakarta.apache.org/struts/userGuide/building_controller.html#plugin_classes.

你也可以使用一个Servlet 上下文listener 来载入初始化数据。

 

posted @ 2005-05-10 11:50 铁手 阅读(3269) | 评论 (2)编辑 收藏
Struts秘籍之第1段:配置Struts应用

第1段. 配置Struts应用

介绍

Struts 为我们提供了一个灵活的框架。它可以以很多不同的方式进行使用,并且可以在多种不同的层面进行定制和扩展。这种灵活性的结果是,许多开发人员不知道如何配置Struts 来适应他们的应用。Struts 应用可以通过web 应用部署描述符web.xml文件和一个或者多个Struts 配置文件 (struts-config.xml)来进行配置。另外,Struts Validator 则通过另外的XML 文件来进行配置。

这一段动作是关于处理Struts配置中的一些通用或者不怎么通用的情景。其中包括创建plug-in 以及一种简单的有效的机制来解决大多数问题。我们还会讨论多个配置文件的使用,以适应团队开发和结果化和分块Web应用本身。最后,我们会讨论Struts内建的扩展支持和定制配置属性的使用。

本段动作是“Struts秘籍”的第一段动作。

posted @ 2005-05-10 10:45 铁手 阅读(3384) | 评论 (2)编辑 收藏
Struts秘籍之起式:第1.8式:用XDoclet 产生Struts配置文件

第1.8式. 使用XDoclet 产生Struts配置文件

问题

当你修改或者新建一个Action 或ActionForm时,你需要修改对应的Struts 配置文件。

动作要领

使用XDoclet 工具,配合Ant,来处理Java代码中可以自动产生truts-config.xml文件的注解。

动作变化

现在的大多数应用软件系统都有可执行代码文件文本配置文件组成。这种方式可以使你更容易的在各种不同的环境之间移植,并且减少必须针对各种不同部署而修改的代码量。但是它带来了另外一个负担,那就是保持代码和配置文件之间的一致性。

XDoclet 工具,原本开发来是针对EJB的开发,它就可以解决这个问题。通过XDoclet,开发者能够在代码中放置能够描述与代码相关的配置属性的注解,这些注解非常类似于JavaDoc 标签。在构建时,你可以使用定制的Ant 任务,由它来使用XDoclet 从而处理这些标签并产生对应的XML 配置文件。

对Struts来说,XDoclet 可以产生struts-config.xml文件中的下列元素:

  • action 元素
  • form-bean 元素

另外, XDoclet 还可以创建字段级的Struts Validator 配置,通常是位于validation.xml 文件之中。最后,如果你要映射EJB 实体Bean的属性到Struts ActionForms, XDoclet 可以不产生ActionForm 的Java 源代码。

 

 

XDoclet可以从http://xdoclet.sourceforge.net处下载。请根据相关的安装指导进行安装。你还需要安装Ant

 

 

首先,你需要添加一个任务到你的Ant 的build 脚本文件中,该任务可称为XDoclet 任务。Example 1-9展示了一个为struts-example 应用产生struts-config.xml 文件的Ant任务。

Example 1-9. Webdoclet Ant target

 

<target name="webdoclet" depends="init">
  
<taskdef 
      
name="webdoclet"
      classname
="xdoclet.modules.web.WebDocletTask"
      classpathref
="project.class.path"/>
  
<webdoclet
      
mergedir="${merge.dir}"
      destdir
="${generated.xml.dir}"
      excludedtags
="@version,@author"
      force
="${xdoclet.force}">
    
<fileset dir="${src.dir}">
      
<exclude name="**/*Registration*.java"/>
      
<include name="**/*.java"/>
    
</fileset>
    
<strutsconfigxml
            
version="1.1"/>
  
</webdoclet>
</target>

 

这个目标(target)调用webdoclet 定制Ant任务,它是由XDoclet提供的。此任务可以产生多个Web应用相关的工件,包括 web.xml 文件, struts-config.xml 文件,validation.xml 文件。对Struts 应用来说,你可能不需要产生web.xml 文件;因为对Struts 应用,该文件并不经常改变。在Example 1-9中,webdoclet 任务被用于产生struts-config.xml 文件。

并不是所有的struts-config.xml 文件中的元素都可以或者应该从注解的代码中产生。像全局forward, 全局例外处理,消息资源,插件等都并不和特定的Action 或ActionForm 类相关。

XDoclet 是通过让你在位于特定的目录中的文件中放置静态配置来处理这些事情的。在构建时, XDoclet 将这些文件中代码中产生的元素进行合并。你可以通过mergedir 属性来指定这些静态文件的位置。destdir 属性则指定将创建的文件的存放目录。通常,你需要为这些产生的文件创建一个单独的目录,然后在其成功创建后将它们拷贝到适当的目录中一共打包或者部署。excludedtags 属性指定排除在XDoclet 处理之外的JavaDoc 标签。

 

执行@author @version标签是通用的。

最后, force 属性强制XDoclet 产生一个新的配置文件。如果这个属性为false, 新文件只有在对应的注解Java代码发生改变时才会产生。

fileset 元素告诉XDoclet 要处理哪些Java 源文件。你可以使用该元素来指示那个源文件包含XDoclet 注解。例如,struts-example 应用使用了两个Struts 配置文件:struts-config.xml 和 struts-config-registration.xml。如Example 1-9所示,你可以通过设置fileset元素来排除包含名称"Registration"的类从而排除放入struts-config-registration.xml 文件中的元素。

strutsconfigxml 元素指示XDoclet 产生struts-config.xml 文件。XDoclet 默认情况下将产生Struts 1.0兼容的配置文件。因此,如果你用Struts1.1你必须指定版本为"1.1"。XDoclet 也使用该属性提供对Struts 1.2 的支持。

一旦你在构建文件中创建了这个target,你就可以添加注解到Action 和ActionForm 类的代码中。对ActionForm, XDoclet 提供了@struts.form 标签来产生form-bean 元素。下面的代码展示了如何在struts-example 应用的SubscriptionForm中使用这个类一级的标签:

 

/**
 * 用于用户概要页面的
 *
 * @struts.form 
 *    name="subscriptionForm"
 
*/


public final class SubscriptionForm extends ActionForm  {
  
}

 

在webdoclet target 被执行时,将在struts-config.xml 中产生下面的form-beans 元素:

 <!-- ========== Form Bean Definitions =================================== -->
  
<form-beans>
    
<form-bean
      
name="subscriptionForm"
      type
="org.apache.struts.webapp.example.SubscriptionForm"
    
/>

    
<!--
         If you have non XDoclet forms, define them in a file called
         struts-forms.xml and place it in your merge directory.
    
-->
  
</form-beans>

XDoclet 使用你在标签中指定的名称来产生form-bean 元素,并且使用ActionForm 的权限定类名来创建type 属性。这一特征也是XDoclet最大的优点之一。你的类的属性,比如类名、包名、方法名等,对XDoclet 都可使用,就像它们被用于产生Javadocs 一样。XDoclet 将在产生的文件的适当位置使用这些值。

如果你修改了一个类的类名或者包名, XDoclet产生正确的配置元素而不会混淆。虽然IDE 的重构工具也可以处理这种类型的改变,但是使用XDoclet这是另外一种可以集成到现有的Ant构建过程中的解决方案。

 

你可以使用XDoclet 来从Action类中产生action 元素。XDoclet 使用@struts.action 标签来指定action 元素。另外,@struts.action-forward 标签则可以指定嵌套的forward 元素。同时@struts.action-exception标签可以用于产生action特定的宣称性例外处理。struts-example 中的LoginAction.java 类示于下方,其中还包括产生完整的action元素所需的注解:

 

/**
 * Implementation of <strong>Action</strong> that validates a user logon.
 * 
 * @struts.action
 *    path="/logon"
 *    name="logonForm"
 *    scope="session"
 *    input="logon"
 * 
 * @struts.action-exception
 *    key="expired.password"
 *    type="org.apache.struts.webapp.example.ExpiredPasswordException"
 *    path="/changePassword.jsp"
 
*/

public final class LogonAction extends Action {
  
}

 

标签中的语法必须严格匹配对应的XML元素的语法。如果你已经有定义了的 struts-config.xml 文件,一个好办法是将struts-config.xml中的XML元素剪切粘贴到Action 类中。使 XDoclet 能够认可这些标签作必要的修改。下面位于LogoffAction.java 文件中的注解展示了如何使用@struts.action-forward 标签:

/**
 * Implementation of <strong>Action</strong> that processes a
 * user logoff.
 *
 * @struts.action
 *    path="/logoff"
 * 
 * @struts.action-forward
 *    name="success"
 *    path="/index.jsp"
 
*/


public final class LogoffAction extends Action {
  
}



虽然XDoclet 对产生struts-config.xml 文件大有帮助,它也并不是万能的。某些action 元素并不与任何你创建的Action 类相对应。例如,struts-example 应用中就包含下面的action mapping:

<action path="/tour"
     forward
="/tour.htm">
</action>

 

struts-config.xml 文件可以包含全局forwards, 全局例外, controller 元素,消息资源元素以及plug-in 元素。XDoclet 不能产生这些元素。但是它可以和饱含这些配置元素的文件进行合并以产生完整的struts-config.xml 文件。Table 1-5列出了在创建struts-config.xm文件时XDoclet希望在mergedir属性指定的目录中找到的文件清单。

Table 1-5. 可以合并到产生的struts-config.xml文件中的配置文件

合并文件

用途

struts-data-sources.xml

一个XML 文档,包含可选的data-sources元素

struts-forms.xml

一个XML 未解析的实体,包含form-bean 元素,作为非XDoclet forms的补充

global-exceptions.xml

一个XML 文档,包含可选的global-exceptions 元素

global-forwards.xml

一个XML 文档,包含可选的global-forwards 元素

struts-actions.xml

一个可选的XML 未解析实体,包含action 元素,作为非XDoclet actions的补充

struts-controller.xml

一个XML 文档,包含可选的controller 元素

struts-message-resources.xml

一个可选的XML 未解析实体,包含message-resources元素

struts-plugins.xml

一个可选的XML 未解析实体,包含 plug-in 元素

 

大多数开发者都认为, XDoclet 对Struts 开发并不像他用在EJB 开发那么能干。比如,如果你在struts-config.xml中主要使用动态action forms ,那么从ActionForm 中产生form-bean 元素并不会为你带来任何好处。但是,如果你开发一个具有大量action元素的大型应用,并使用Ant, 那么 XDoclet 则是值得考虑的。XDoclet 也支持其它类型的配置文档,比如Hibernate mappings的生成。

相关招式

第1.7式提供了一个模版Ant build 脚本,你可以在其中添加XDoclet target。

关于XDoclet 的详细信息访问http://xdoclet.sourceforge.net.

你也可以阅读Manning 出版Craig Walls和Norman Richards所著的Xdoclet in Action 其中包括Xdoclet在Struts, Webwork, JDO, EJB,JMX, SOAP,Web Service 等方面开发的应用。http://www.manning.com/walls

 

posted @ 2005-05-09 11:07 铁手 阅读(2735) | 评论 (1)编辑 收藏
Struts秘籍之起式:第1.7式:使用Ant进行构建和部署

第1.7式. 使用Ant 进行构建和部署

问题

你希望能够以一种能够重复和可移动的情况下构建和部署Struts 应用。

动作要领

可以创建一个Ant (http://ant.apache.org) 构建脚本并使用Ant (或者你的 IDE集成的Ant ) 来编译、测试、打包和部署你的应用。Example 1-8是一个样板的Ant build 文件,可以编译、构建和部署Struts 应用

Example 1-8. 样板Ant build 文件

 

 

<project name="jsc-ch01-r02" default="dist" basedir=".">
  
<description>
      Jakarta Struts Cookbook - Ant Template
  
</description>

  
<!-- Enable access to environment variables -->
  
<property environment="env"/>

  
<!-- Set to use JDK 1.4 -->
  
<property name="build.compiler" value="javac1.4"/>

  
<!-- set global properties for this build -->
  
<property name="src.dir" location="src"/>
  
<property name="build.dir" location="build"/>
  
<property name="dist.dir"  location="dist"/>
  
<property name="server.dir" location="${env.CATALINA_HOME}"/>
  
<property name="servlet.jar" 
     location
="${server.dir}/common/lib/servlet-api.jar"/>
  
<property name="jsp.jar" location="${server.dir}/common/lib/jsp-api.jar"/>
  
<property name="struts.dist.dir" location="c:/jakarta-struts-1.1/lib"/>

  
<!-- Struts -->
  
<fileset id="struts.lib.files" dir="${struts.dist.dir}">
       
<include name="**/*.jar"/>
  
</fileset>
  
<path id="struts.classpath">
       
<fileset refid="struts.lib.files"/>
  
</path>

  
<path id="project.class.path">
    
<pathelement location="${servlet.jar}"/>
    
<pathelement location="${jsp.jar}"/>
    
<path refid="struts.classpath"/>
  
</path>

  
<!-- Deployment Properties -->
  
<property name="deploy.dir" location="${server.dir}/webapps"/>

  
<target name="clean"
        description
="clean up" >
    
<!-- Delete the ${build.dir} and ${dist.dir} directory trees -->
    
<delete dir="${build.dir}"/>
    
<delete dir="${dist.dir}"/>
  
</target>

  
<target name="init">
    
<!-- Create the build directory structure used by compile -->
    
<mkdir dir="${build.dir}"/>
  
</target>

  
<target name="compile" depends="init"
        description
="compile the source " >
    
<!-- Compile the java code from ${src.dir} into ${build.dir} -->
    
<javac srcdir="${src.dir}" destdir="${build.dir}" debug="on">
      
<classpath>
          
<path refid="project.class.path"/>
      
</classpath>
    
</javac>

    
<copy todir="${build.dir}">
      
<fileset dir="${src.dir}">
        
<include name="**/*.properties"/>
      
</fileset>
    
</copy>
  
</target>

  
<target name="dist" depends="compile"
        description
="generate the distribution" >

    
<!-- Create the distribution directory -->
    
<mkdir dir="${dist.dir}"/>

    
<!-- Copy the build dir to WEB-INF/classes -->
    
<mkdir dir="web/WEB-INF/classes"/>
      
    
<copy todir="web/WEB-INF/classes">
        
<fileset dir="${build.dir}"/>
    
</copy>

    
<!-- Put everything in ${build} into the war file -->
    
<war destfile="${dist.dir}/${ant.project.name}.war" 
         webxml
="web/WEB-INF/web.xml">
      
<fileset dir="web" excludes="**/web.xml"/>
        
<webinf dir="web/WEB-INF">
          
<include name="*.xml"/>
          
<exclude name="web.xml"/>
        
</webinf>
      
<lib dir="web/WEB-INF/lib">
        
<include name="${struts.dist.dir}/**/*.jar"/>
        
<include name="${struts.dist.dir}/**/*.tld"/>
      
</lib>
      
<classes dir="build"/>
    
</war>
  
</target>

  
<!-- Deploy the application by copying it to the deployment directory -->
  
<target name="deploy" depends="dist"
           description
="deploy to server" >
      
<unjar src="${dist.dir}/${ant.project.name}.war"
          dest
="${deploy.dir}/${ant.project.name}"/>
  
</target>

</project>

 

动作变化

上面展示的构建文件可以知进行一些最小的修改就可以用于大部分的Struts web 应用。你应该将project元素的name属性的值修改为你的应用的名称。项目名称将用于创建WAR 是所用的名称,以及应用部署时的文件夹名称。此外,你应该将struts.dist.dir属性的值设置为Struts 分发包所安装的特定的lib目录。

基于Ant的构建可以帮助你完成各种开发任务:

  • 从源代码控制系统(即, CVS)中获取最新的源代码
  • 将Struts 应用打包为WAR 文件
  • 运行单元测试
  • 使用XDoclet 来从Ant中产生代码和配置文件
  • 部署Struts应用到应用服务器中
  • 预编译JSP 文件以检测转换错误

通过使用构建脚本来创建WAR 文件,你可以根据你觉得合适的方式来对源代码和Struts 奋发的物理文件位置进行结构化。然后你可以使用Ant 脚本将它们整合到一起。

相关招式

你可以访问Ant 的站点获取更多详细的信息http://ant.apache.org。另外,Jesse E. Tilly 和Eric M. Burke (O'Reilly)所著的《Ant: The Definitive Guide》也是使用Ant的一个非常棒的参考。第1.8式将展示使用XDoclet 工具来产生Struts-的相关文件。

posted @ 2005-05-08 09:49 铁手 阅读(1740) | 评论 (1)编辑 收藏
Struts秘籍之起式:第1.6式:管理Struts配置文件

第1.6式. 管理Struts 配置文件

问题

你需要在Struts配置文件中避免拼写和其他低级错误,以及使得编辑和管理它们更容易些。

动作要领

使用Struts Console,或者其他IDE工具来查看、编辑和管理Struts 配置文件。

动作变化

Web应用中最常见的错误原因之一就是拼写错误。总体而言,大多数现代软件包括Struts 都依赖于某种ASCII文本格式的配置文件和部署描述符,通常是XML。使用能够进行校验的XML 编辑器能够有助于减少错误,但是,它却不能消除路径、form-bean名称、类名等的拼写和键入错误。

你可以从http://www.jamesholmes.com下载Stuts Console,它提供了对Struts (struts-config.xml), Validator (validation.xml a和validator-rules.xml), 和Tiles (tiles-defs.xml) 配置文件的图形化编辑。不需要进行手工编辑,你可以使用Struts Console 提供的基于Swing的编辑器进行。除了减少了输入错误, Struts Console 还使你对这些文件有一个直观和总体的视图。你将发现这些特征在你的配置文件开始变得庞大的时候简直是妙不可言。

Struts Console 提供了一个聪明的图形编辑器来处理Struts开发中所用的各种XML配置文件。Figure 1-2是struts-example应用的struts-config.xml文件的视图。

Figure 1-2. Struts Console 中查看Struts 示例应用

clip_image001_0008.gif

 

 

Editor tab 表现为两个面板。左边pane 包含一个组成配置文件的元素的树形视图。右边则是图形化编辑窗口。不同的编辑器将取决于所选择的元素。在Figure 1-2中,在视图中选择了/saveSubscription action mapping ,右边则显示了特的配置细节,并可以编辑它。

配置文件的XML源代码可以在一个只读的窗口中显示,可以通过选择Source tab 来打开它。你在图形环境中所作的修改,都可以同步反映在源代码中。当然,除非你保存文件,它不会提交进行保存。

2

因为Struts Console解析和管理实际的XML 数据,当重新保存文件时,它不会在原始文件中包含任何定制格式化和注释信息。

 

Struts Console 不同于常规的XML editor 之处是Struts console 能够理解元素之间如何关联。例如,在Figure 1-2, 有效可用的Form Beans 可以使用下拉列表来显示。点击Form Bean 下拉列表右边的View 按钮将显示选定的Forms 定义。Form Bean 编辑器将显示出来,而左边pane的树形视图将被更新以反映正在查看的Form Bean。

目前, Struts Console Version 4.4.1支持下列文件的编辑和创建:

  • Struts 配置文件( Struts 1.2, 1.1, 和 1.0); 即, struts-config.xml
  • Tiles 配置文件;即tiles-defs.xml
  • Validator 配置文件( Struts 1.1, 和 1.0);即, validator-rules.xml, validation.xml
  • JSP Tag Library Descriptor (TLD) (JSP Version 1.2, 1.1);即, struts-html.tld

除了将它用作一个标准的程序之外,Struts Console 还可以插入到大多数Java IDE中,比如Eclipse, NetBeans, 和IntelliJ IDEA。

使用任何图形编辑器之前,最好是要熟悉和理解Struts 配置文件中的结构和元素的含义。只有这样,你才可以使用工具来隐藏具体的结构而作你想做的事情。这有点类似于你心学习一种编程语言的时候,在依赖于IDE之前,还是最好使用简单的文本编辑器和命令行工具。最然图形化工具能够减少你调试的精力和时间,你也需要理解文件的基本结构,以便能够发生错误是找出具体原因。

相关动作

James Holmes的站点可以下载Struts Console。这个站点还提供其他Struts Console的详细资料。James 还开发其他工具,比如Spring Console。http://www.jamesholmes.com.

Struts 1.2 包括了一个plug-in, 即ModuleConfigVerifier,它用来捕捉应用初始化时发生的配置错误。关于此插件的详细信息,参见http://struts.apache.org/api/org/apache/struts/plugins/ModuleConfigVerifier.html.

MyEclipse 是Eclipse IDE的一个定制化版本。这个漂亮的IDE提供了一个精心裁减的J2EE 应用开发环境。目前,最新的 MyEclipse 已经支持Eclipse 3.0。但是MyEclipse 不是免费的,年订阅费大概是不到$50 。如果你想要一个一站式的IDE,它还是值得的。可访问http://www.myeclipse.com.

Struts Studio 也是一个非常雄心勃勃的开发工具,视图提供商业级的Struts开发工具。可访问,http://www.exadel.com/products_strutsstudio.htm.

另外,M7的Nitrox也是非常优秀个开发工具。www.M7.com

商业IDE几乎全部提供Struts的开发工具和环境,包括:IBM的WebSphere Application Developer Studio, WebSphere Site Developer Studio, Oracle 的JDeveloper , Borland JBuilder, BEA Weblogic Workshop。其中, oracle 和 Bean本身对Struts作了一些扩展和定制化。可以访问个公司的网站获得详细信息。

posted @ 2005-04-30 11:04 铁手 阅读(2449) | 评论 (3)编辑 收藏
仅列出标题
共26页: First 上一页 18 19 20 21 22 23 24 25 26 下一页