Samuel Learning

  • 联系
  •  
  • 管理

文章分类(203)

  • 01 ASP/HTML(6)
  • 02 Script/CSS(16)
  • 03 C/C++
  • 04 XML(4)
  • 05 微软编程(26)
  • 06 J2EE(60)
  • 09 Linux(14)
  • 10 Database(27)
  • 11 报表打印
  • 12 打包安装(1)
  • 13 模式重构(2)
  • 14 系统架构
  • 15 敏捷开发(11)
  • 16 案例分析(30)
  • 17 Workflow(1)
  • 18 配置管理(1)
  • 19 项目管理
  • 20 英语(4)

新闻分类(52)

  • CXF学习
  • Hibernate学习(1)
  • iBatis学习(16)
  • Struts1学习(1)
  • Struts2学习(34)

.NET资源

  • adxmenu
  • C# Open Source
  • DNN Directory
  • M2Land
  • Windows Form FAQ
  • 中国DNN
  • 中国DNN联盟

Ajax

  • DoJo
  • GWT
  • JQuery
  • jquery autocomplete
  • jquery flexgrid
  • JQuery Form
  • jquery masked input
  • JQuery UI
  • jquery validation
  • Jquery 图表
  • jquery报表
  • jquery插件集合
  • Qooxdoo
  • Tibco GI
  • YUI
  • YUI-EXT
  • ZeroKode

Java开源

  • ABLE
  • Agile Tao
  • Ajax4JSF
  • Alfresco
  • AppFuse
  • Compiere
  • Equinox
  • Findbugs
  • Geronimo
  • Grails
  • Harmony
  • Hibernate论坛
  • JAG
  • Java开源大全
  • Java视线论坛
  • jBPM工作流
  • JSFTutorials
  • Nereide ERP
  • Ofbiz ERP
  • Opentaps ERP
  • operamasks
  • Petstore
  • Prototype.js
  • RIFE
  • Runa
  • SpringSide
  • Struts Menu
  • Sun Glassfish
  • Trails
  • YUI4JSF
  • 满江红

Mobile

  • Sencha

WEB资源

  • DHTML中心
  • DHTML参考手册
  • DHTML文档
  • EclipsePlugin
  • Firebug
  • GRO Clinux
  • jMaki
  • JSTL文档
  • LoadIcon
  • Openlaszlo
  • Struts Menu 展示
  • Web Test Tools
  • WebCtrs
  • Webdeveloper
  • 中国RIA开发者论坛

Workflow

  • E-Workflow
  • JBPM
  • OpenWFE
  • OSWorkflow
  • WFMC
  • Workflow Research

其他连接

  • confach
  • CPP
  • ejay
  • Giovanni
  • 丹佛
  • 交大e-learning
  • 交大研究生院
  • 可恶的猫
  • 天天@blog
  • 我的相册
  • 阿飞

大牛人

  • 32篇JBPM
  • David.Turing
  • HongSoft@业务集成
  • Joel
  • Koen Aers
  • Martinfowler
  • Raible Matt
  • Raible Wiki
  • Scott W.Ambler
  • Tom Baeyens
  • Uncle Bob
  • 一个世界在等待
  • 子在川上曰
  • 小布老师
  • 小明
  • 差沙
  • 徐昊
  • 江南白衣
  • 汪博士
  • 汪小金
  • 银狐999

开源软件

  • 2Bizbox ERP
  • CompiereCRM&ERP
  • EGW
  • Vtiger CRM
  • webERP

敏捷

  • Canoo
  • Cruisecontrol
  • DBUnit
  • EL4Ant
  • Extreme Programming
  • Fit
  • Fitnesse
  • JFrog
  • Liquibase
  • Maven
  • MockObjects
  • Selenium
  • Squish
  • xpairtise
  • XPlanner
  • XProgramming
  • 敏捷联盟

数据库

  • Oracle 中国
  • Oracle-ERP
  • Oracle在线社区

未归类

  • Aquarius Orm Studio
  • mambo建站系统
  • Oracle产品下载
  • 远程同步管理工具Capivara

经典框架

  • Apache Shale
  • formdef-struts
  • FreeMarker 主页
  • JBoss Seam
  • JSF 中心
  • JSF 入门应用
  • JSF中国
  • MyFaces官方
  • Spring 社区
  • Spring专业网站
  • Spring中文论坛
  • Spring参考手册
  • Spring官方网站
  • strecks-struts
  • Struts1
  • Struts2
  • Struts-layout
  • StrutsWiKi
  • Tapestry WIKI
  • Tapestry 官方
  • Tapestry4开发指南
  • Tapestry中文文档
  • Webwork2文档
  • Wicket

网络教程

  • Laliluna
  • RoseIndia
  • Sang Shin
  • Visualbuilder

著名站点

  • Buildix
  • Dev2Dev
  • IBM dev中国
  • InfoQ
  • ITPub
  • Java Eye
  • Java Research
  • JavaRead
  • JavaWorldTW
  • Matrix
  • PHP100
  • PHPX
  • SpringSideWiKi
  • TheServerSide
  • TWPHP
  • 中国工作流论坛

项目管理

  • 管理人网

最新评论

View Post

MailReader-Struts1.3.8配置文件分析

 

MailReader-Struts1.3.8配置文件分析

         MailReader是Struts自带的4个例子之一,本文分析Struts1.3.8版本里的配置文件。MailReader的Tour文件是必读材料。

       按照web.xml,struts-config.xml,validation.xml的顺序分别分析。

l Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <servlet>

       <servlet-name>action</servlet-name>

       <servlet-class>

           org.apache.struts.action.ActionServlet

       </servlet-class>

       <init-param>

           <param-name>config</param-name>

             <!—

             指出struts的配置文件

             -->

           <param-value>/WEB-INF/struts-config.xml</param-value>

       </init-param>

       <load-on-startup>0</load-on-startup>

    </servlet>

<!—

所有.do的请求经过struts的ActionServlet处理

-->

    <servlet-mapping>

       <servlet-name>action</servlet-name>

       <url-pattern>*.do</url-pattern>

    </servlet-mapping>

    <welcome-file-list>

       <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

<!—

未处理的异常,最后页面会跳到Error.jsp

-->

    <error-page>

       <exception-type>java.lang.Exception</exception-type>

       <location>/Error.jsp</location>

    </error-page>

</web-app>

l Struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>

<!—

定义FormBean

-->

    <form-beans>

        <!—

DynaValidatorForm 的 FormBean可以实现继承,这里的BaseForm就是一个抽象类,包含3个属性

        -->

       <!-- BaseAction form bean (abstract) -->

       <form-bean name="BaseForm"

           type="org.apache.struts.validator.DynaValidatorForm">

             <!--

               属性由名字和类型构成,还可以有初始值

             -->

           <form-property name="username" type="java.lang.String" />

           <form-property name="password" type="java.lang.String" />

           <form-property name="task" type="java.lang.String"

              initial="Create" />

       </form-bean>

        <!--

         LogonForm 继承自BaseForm

        -->

       <!-- LogonAction form bean -->

       <form-bean name="LogonForm" extends="BaseForm" />

        <!--

         RegistrationForm 继承自BaseForm,多了4个属性

        -->

       <!-- RegistrationAction form bean -->

       <form-bean name="RegistrationForm" extends="BaseForm">

           <form-property name="fromAddress" type="java.lang.String" />

           <form-property name="fullName" type="java.lang.String" />

           <form-property name="password2" type="java.lang.String" />

           <form-property name="replyToAddress"

              type="java.lang.String" />

       </form-bean>

         <!--

        SubscriptionForm 继承自BaseForm,多了3个属性。reset 属性不知道什么用

        -->

       <!-- SubscriptionAction form bean -->

       <form-bean name="SubscriptionForm" extends="BaseForm">

           <form-property name="autoConnect" type="java.lang.Boolean"

              initial="FALSE" reset="true" />

           <form-property name="host" type="java.lang.String" />

           <form-property name="type" type="java.lang.String" />

       </form-bean>

    </form-beans>

<!--

定义全局的Exception

-->

    <global-exceptions />

     <!-- ==== Global Forward Definitions ==== -->

<!--

定义全局的Forward

-->

    <global-forwards>

    <!--

如果在Action里找不到相应的forward,就用这里的forward。

Path不仅可以是jsp文件,而且可以是下一个action,即.do请求。

-->

        <forward

                name="Logoff"

                path="/Logoff.do"/>

        <forward

                name="Logon"

                path="/Logon.do"/>

        <forward

                name="Failure"

                path="/Error.do"/>

</global-forwards>

<!--

定义Action-Mapping

-->

    <action-mappings>

        

    <!--

    通配符定义的action,例如/Logon.do的请求,页面转向/Logon.jsp

    定义在最前面,在其他位置找不到相应的配置,才执行此配置

-->

       <!-- Display any other page (Logon, MainMenu) - Wildcards must come first! -->

       <action path="/*" forward="/{1}.jsp"></action>

<!--

    对于/Welcome.do的请求,要经过WelcomeAction处理之后,如果是返回Success,才转向/Welcome.jsp

-->

       <!-- Display welcome page -->

       <action path="/Welcome"

           type="com.yourcompany.struts.apps.mailreader.action.WelcomeAction">

           <forward name="Success" path="/Welcome.jsp" />

       </action>

<!--

    实际没用,只是为了学习

-->

       <!-- Display welcome page

           <action path="/Welcome" forward="/Welcome.jsp" />

       -->

<!--

    Logoff之前,用LogoffAction作一些处理,最后回到Welcome.do

-->

        <!-- Process a user logoff -->

        <action

                path="/Logoff"

                type="com.yourcompany.struts.apps.mailreader.action.LogoffAction">

            <forward

                    name="Success"

                    path="/Welcome.do"/>

        </action>

       

<!--

    设置Local之前,用LocaleAction作一些处理,最后回到Welcome.do

    Parameter属性是定义MappingDispatchAction类里的方法名,但这里的Success只是表示一个参数,因为LocaleAction里定义了一个execute方法。

    用途是:target = mapping.getParameter();

-->

        <!-- Change locale action -->

        <action

                path="/Locale"

                type="com.yourcompany.struts.apps.mailreader.action.LocaleAction"

                parameter="Success">

            <forward

                    name="Success"

                    path="/Welcome.do"/>

        </action>

       

 <!--

     登录的Action,validate表示用了服务端验证,和plugin有关,如果验证失败就让页面转入input标识的forward请求。

    Name指出了ActionForm的名字

    Cancellable不知道是什么意思

-->

        <!-- Process a user logon -->

        <action

                path="/SubmitLogon"

                type="com.yourcompany.struts.apps.mailreader.action.LogonAction"

                name="LogonForm"

                scope="request"

                cancellable="true"

                validate="true"

                input="Logon">

    <!--

        如果抛出ExpiredPasswordException就转入/ChangePassword.do请求

-->

            <exception

                    key="expired.password"

                    type="org.apache.struts.apps.mailreader.dao.ExpiredPasswordException"

                    path="/ChangePassword.do"/>

            <forward

                    name="Success"

                    path="/MainMenu.do"/>

        </action>

 <!--

     类似ActionForm,Action也可以用继承。为了防止抽象的Action被请求,故用//作为前缀。

     参数{1}代表子类的通配符*

-->

       <!-- "Abstract" mapping to use as base -->

       <!-- Input like as forward -->

       <action path="//BaseAction" input="Input"

           type="com.yourcompany.struts.apps.mailreader.action.{1}Action"

           name="{1}Form" scope="request">

           <forward name="Success" path="/{1}.jsp" />

           <forward name="Input" path="/{1}.jsp" />

       </action>

 <!--

     /Delete*通配符匹配action,减少配置文件内容。

     例如/DeleteSubscription. 父类的参数{1}就代表Subscription

     Parameter=Delete表示,执行SubscriptionAction的Delete函数。

-->

       <action path="/Delete*" extends="//BaseAction"

           parameter="Delete" validate="false" />

       <action path="/Edit*" extends="//BaseAction" parameter="Edit"

           validate="false" />

       <action path="/Save*" extends="//BaseAction" parameter="Save"

           cancellable="true" validate="true">

           <forward name="Success" path="/MainMenu.do" />

       </action>

      

        <!-- Matches SaveSubscription action -->

        <!-- If extends understood wildcards, we could specify only Success here. -->

        <action

                path="/SaveSubscription"

                extends="/Save*"

                type="com.yourcompany.struts.apps.mailreader.action.SubscriptionAction"

                name="SubscriptionForm">

            <forward

                    name="Success"

                    path="/EditRegistration.do"/>

            <forward

                    name="Input"

                    path="/Subscription.do"/>

        </action>

        <!-- Display the "walking tour" documentation -->

        <action

                path="/Tour"

                forward="/tour.html"/>

               

    </action-mappings>

   

   

<!-- ==== Controller Configuration ==== -->

<!--

没弄清楚啥意思,虽然下面有注释

-->

    <controller

            pagePattern="$M$P"

            inputForward="true"/>

    <!-- pagePattern: use this pattern when creating URIs to resources.

        $M=module, $P=path -->

    <!-- inputForward: The "input" parameter on "action" elements is the name of a

         local or global "forward" rather than a module-relative path -->

   

<!--

定义资源文件

-->

    <message-resources

       parameter="com.yourcompany.struts.ApplicationResources" />

    <message-resources

       parameter="com.yourcompany.struts.AlternateApplicationResources"

       key="alternate" />

      

<!--

定义插件

-->

<!--

和验证有关,使用了common-validator

-->

    <plug-in

            className="org.apache.struts.validator.ValidatorPlugIn">

        <set-property

                property="pathnames"

                value="/org/apache/struts/validator/validator-rules.xml,

                /WEB-INF/validation.xml"/>

    </plug-in>

   

<!--

和MailReader的xml数据库有关,这里用到一个被封装好的jar包

-->

    <plug-in

        className="com.yourcompany.struts.apps.mailreader.plugin.MemoryDatabasePlugIn">

       <set-property property="pathname" value="/WEB-INF/database.xml" />

    </plug-in>

   

 <!--

     和下拉框有关,有点过于复杂

-->

     <plug-in

            className="org.apache.struts.plugins.DigestingPlugIn">

        <set-property

                property="key"

                value="serverTypes"/>

        <set-property

                property="configPath"

                value="/WEB-INF/server-types.xml"/>

        <set-property

                property="digesterPath"

                value="/WEB-INF/lvb-digester-rules.xml"/>

    </plug-in>

</struts-config>

l Validation.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE form-validation PUBLIC

        "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"

        "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">

<form-validation>

    <!-- ==== Default Language Form Definitions ==== -->

<formset>

<!--

     被验证的Form的定义,对应DynaActionForm的名字

     Depends表示验证的方式

     Key表示在资源文件定义的名字

-->

        <form

                name="LogonForm">

            <field

                    property="username"

                    depends="required">

                <arg

                        key="prompt.username"/>

            </field>

           <field

                    property="password"

                    depends="required, minlength,maxlength">

                <arg

                        key="prompt.password"/>

                <arg

                        key="${var:minlength}"

                        name="minlength"

                        resource="false"/>

                <arg

                        key="${var:maxlength}"

                        name="maxlength"

                        resource="false"/>

                <var>

                    <var-name>

                        maxlength

                    </var-name>

                    <var-value>

                        16

                    </var-value>

                </var>

                <var>

                    <var-name>

                        minlength

                    </var-name>

                    <var-value>

                        3

                    </var-value>

                </var>

            </field>

        </form>

        <form

                name="RegistrationForm">

            <field

                    property="fromAddress"

                    depends="required,email">

                <arg

                        key="prompt.fromAddress"/>

            </field>

            <field

                    property="fullName"

                    depends="required">

                <arg

                        key="prompt.fullName"/>

            </field>

            <field

                    property="replyToAddress"

                    depends="email">

                <arg

                        key="prompt.replyToAddress"/>

            </field>

            <field

                    property="username"

                    depends="required">

                <arg

                        key="prompt.username"/>

            </field>

        </form>

        <form

                name="SubscriptionForm">

            <field

                    property="host"

                    depends="required">

                <arg

                        key="prompt.mailHostname"/>

            </field>

            <field

                    property="username"

                    depends="required">

                <arg

                        key="prompt.mailUsername"/>

            </field>

            <field

                    property="password"

                    depends="required">

                <arg

                        key="prompt.mailPassword"/>

            </field>

        </form>

    </formset>

</form-validation>

posted on 2008-07-06 21:32 MingIsMe 阅读(913) 评论(0)  编辑  收藏 所属分类: 16 案例分析

 
Powered by:
BlogJava
Copyright © MingIsMe