`
kyo100900
  • 浏览: 639770 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

原来是Struts2.0的一个Bug

阅读更多

开始使用的是Struts2.06版本。在配置Struts.xml的时候,发现了一个问题:

struts.xml代码:

xml 代码
  1. <!---->
  2.         "http://struts.apache.org/dtds/struts-2.0.dtd">  
  3. <struts>  
  4.     <include file="struts-default.xml" />  
  5.     <package name="default" extends="struts-default">  
  6.         <!---->  
  7.         <interceptors>  
  8.             <interceptor-stack name="strutsStack">  
  9.                 <interceptor-ref name="exception" />  
  10.                 <interceptor-ref name="alias" />  
  11.                 <interceptor-ref name="servlet-config" />  
  12.                 <interceptor-ref name="prepare" />  
  13.                 <interceptor-ref name="i18n" />  
  14.                 <interceptor-ref name="chain" />  
  15.                 <interceptor-ref name="debugging" />  
  16.                 <interceptor-ref name="profiling" />  
  17.                 <interceptor-ref name="scoped-model-driven" />  
  18.                 <interceptor-ref name="model-driven" />  
  19.                 <interceptor-ref name="fileUpload" />  
  20.                 <interceptor-ref name="checkbox" />  
  21.                 <interceptor-ref name="static-params" />  
  22.                 <interceptor-ref name="params" />  
  23.   
  24.                 <interceptor-ref name="validation">  
  25.                     <param name="excludeMethods">  
  26.                         input,back,cancel,browse   
  27.                     param>  
  28.                 interceptor-ref>  
  29.                 <interceptor-ref name="workflow">  
  30.                     <param name="excludeMethods">  
  31.                         input,back,cancel,browse   
  32.                     param>  
  33.                 interceptor-ref>  
  34.             interceptor-stack>  
  35.         interceptors>  
  36.         <!---->  
  37.         <default-interceptor-ref name="strutsStack" />  
  38.     package>  
  39.   
  40.     <include file="struts_xml/user.xml" />  
  41.   
  42. struts>  

这是struts.xml所包含的代码。

xml 代码
  1. <!---->
  2.         "http://struts.apache.org/dtds/struts-2.0.dtd">  
  3. <struts>  
  4.   
  5.     <package name="user" extends="default">  
  6.         <!---->  
  7.         <action name="userAction"  
  8.             class="com.leo.controller.UserController" method="userAction">  
  9.             <result name="success">a.jspresult>  
  10.             <result name="input">login.jspresult>  
  11.         action>  
  12.   
  13.         <action name="index" class="com.leo.controller.UserController"  
  14.             method="index">  
  15.             <result name="success">login.jspresult>  
  16.             <result name="input">login.jspresult>  
  17.         action>  
  18.   
  19.         <action name="login" class="com.leo.controller.UserController"  
  20.             method="login">  
  21.             <result name="success" type="redirect-action">  
  22.                 index.action   
  23.             result>  
  24.             <result name="input">login.jspresult>  
  25.         action>  
  26.   
  27.         <action name="logout" class="com.leo.controller.UserController"  
  28.             method="logout">  
  29.             <result name="success">login.jspresult>  
  30.             <result name="input">login.jspresult>  
  31.         action>  
  32.   
  33.     package>  
  34.   
  35. struts>  

这种“包”继承关系是合法的,但在struts2.06版本怎么也无法通过,控制台一直报错:Error building results for action ××× in namespace - action 。调试了很久,Webwork文档与书也翻了N遍,还是没有效果。最后实在没有办法了,换成Struts2.09包,竟然通过了。

大家可以试试,其实Struts2的包继承是非常有用的,很多全局拦截器的设置,Action的设置,以及Result-type等,都可以通过包继承来组织你的配置文件。

分享到:
评论
6 楼 hmx_x 2008-10-27  
Result-type等,都可                    
5 楼 dimscar 2007-10-31  
真不知道为什么,webwork2.0变成了这样的Struts2.0,真叫晕倒!
4 楼 jalinhu 2007-10-31  
<div class='code_title'>
<div class='code_title'>java 代码
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-j'>
    <li class='alt'><span><span class='keyword'>import</span><span> java.net.*;      </span></span></li>
    <li class=''><span/><span class='keyword'>import</span><span> java.io.*;      </span></li>
    <li class='alt'><span/><span class='keyword'>import</span><span> java.util.*;      </span></li>
    <li class=''><span>     </span></li>
    <li class='alt'><span/><span class='keyword'>public</span><span> </span><span class='keyword'>class</span><span> UDPServer {      </span></li>
    <li class=''><span>  </span><span class='keyword'>static</span><span> </span><span class='keyword'>final</span><span> </span><span class='keyword'>int</span><span> INPORT = </span><span class='number'>1711</span><span>;      </span></li>
    <li class='alt'><span>  </span><span class='keyword'>private</span><span> </span><span class='keyword'>byte</span><span>[] buf = </span><span class='keyword'>new</span><span> </span><span class='keyword'>byte</span><span>[</span><span class='number'>1000</span><span>];      </span></li>
    <li class=''><span>  </span><span class='keyword'>private</span><span> DatagramPacket dp = </span><span class='keyword'>new</span><span> DatagramPacket(buf, buf.length);      </span></li>
    <li class='alt'><span>  </span><span class='keyword'>private</span><span> DatagramSocket socket;      </span></li>
    <li class=''><span>  </span><span class='keyword'>public</span><span> UDPServer() {      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>try</span><span> {      </span></li>
    <li class=''><span>      socket = </span><span class='keyword'>new</span><span> DatagramSocket(INPORT);      </span></li>
    <li class='alt'><span>      System.out.println(</span><span class='string'>"Server started!"</span><span>);      </span></li>
    <li class=''><span>      </span><span class='keyword'>while</span><span> (</span><span class='keyword'>true</span><span>) {      </span></li>
    <li class='alt'><span>        socket.receive(dp);      </span></li>
    <li class=''><span>        String rcvd = Dgram.toString(dp) + </span><span class='string'>",from ddress:"</span><span> + dp.getAddress() +      </span></li>
    <li class='alt'><span>            </span><span class='string'>",port:"</span><span> + dp.getPort();      </span></li>
    <li class=''><span>        System.out.println(rcvd);      </span></li>
    <li class='alt'><span>        String echoString = </span><span class='string'>"Echoed:"</span><span> + rcvd;      </span></li>
    <li class=''><span>        DatagramPacket echo = Dgram.toDatagram(echoString, dp.getAddress(),      </span></li>
    <li class='alt'><span>                                               dp.getPort());      </span></li>
    <li class=''><span>        socket.send(echo);      </span></li>
    <li class='alt'><span>      }      </span></li>
    <li class=''><span>    }      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>catch</span><span> (SocketException e) {      </span></li>
    <li class=''><span>      System.err.println(</span><span class='string'>"Can't open socket"</span><span>);      </span></li>
    <li class='alt'><span>      System.exit(</span><span class='number'>1</span><span>);      </span></li>
    <li class=''><span>    }      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>catch</span><span> (IOException e) {      </span></li>
    <li class=''><span>      System.err.println(</span><span class='string'>"Communication error!"</span><span>);      </span></li>
    <li class='alt'><span>      e.printStackTrace();      </span></li>
    <li class=''><span>    }      </span></li>
    <li class='alt'><span>  }      </span></li>
    <li class=''><span>     </span></li>
    <li class='alt'><span>  </span><span class='keyword'>public</span><span> </span><span class='keyword'>static</span><span> </span><span class='keyword'>void</span><span> main(String[] args) {      </span></li>
    <li class=''><span>    </span><span class='keyword'>new</span><span> UDPServer();      </span></li>
    <li class='alt'><span>  }      </span></li>
    <li class=''><span>}      </span></li>
    <li class='alt'><span>     </span></li>
    <li class=''><span/><span class='comment'>//=====================================    </span><span>  </span></li>
    <li class='alt'><span/><span class='keyword'>class</span><span> UDPClient      </span></li>
    <li class=''><span>    </span><span class='keyword'>extends</span><span> Thread {      </span></li>
    <li class='alt'><span>  </span><span class='keyword'>private</span><span> DatagramSocket s;      </span></li>
    <li class=''><span>  </span><span class='keyword'>private</span><span> InetAddress hostAddress;      </span></li>
    <li class='alt'><span>  </span><span class='keyword'>private</span><span> </span><span class='keyword'>byte</span><span>[] buf = </span><span class='keyword'>new</span><span> </span><span class='keyword'>byte</span><span>[</span><span class='number'>1000</span><span>];      </span></li>
    <li class=''><span>  </span><span class='keyword'>private</span><span> DatagramPacket dp = </span><span class='keyword'>new</span><span> DatagramPacket(buf, buf.length);      </span></li>
    <li class='alt'><span>  </span><span class='keyword'>private</span><span> </span><span class='keyword'>int</span><span> id;      </span></li>
    <li class=''><span>     </span></li>
    <li class='alt'><span>  </span><span class='keyword'>public</span><span> UDPClient(</span><span class='keyword'>int</span><span> identifier) {      </span></li>
    <li class=''><span>    id = identifier;      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>try</span><span> {      </span></li>
    <li class=''><span>      s = </span><span class='keyword'>new</span><span> DatagramSocket();      </span></li>
    <li class='alt'><span>      hostAddress = InetAddress.getByName(</span><span class='string'>"localhost"</span><span>);      </span></li>
    <li class=''><span>    }      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>catch</span><span> (UnknownHostException e) {      </span></li>
    <li class=''><span>      System.err.println(</span><span class='string'>"Cannot find host"</span><span>);      </span></li>
    <li class='alt'><span>      System.exit(</span><span class='number'>1</span><span>);      </span></li>
    <li class=''><span>    }      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>catch</span><span> (SocketException e) {      </span></li>
    <li class=''><span>      System.err.println(</span><span class='string'>"Can't open Socket"</span><span>);      </span></li>
    <li class='alt'><span>      e.printStackTrace();      </span></li>
    <li class=''><span>      System.exit(</span><span class='number'>1</span><span>);      </span></li>
    <li class='alt'><span>    }      </span></li>
    <li class=''><span>  }      </span></li>
    <li class='alt'><span>     </span></li>
    <li class=''><span>  </span><span class='keyword'>public</span><span> </span><span class='keyword'>void</span><span> run() {      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>try</span><span> {      </span></li>
    <li class=''><span>      </span><span class='keyword'>for</span><span> (</span><span class='keyword'>int</span><span> i = </span><span class='number'>0</span><span>; i &lt; </span><span class='number'>1</span><span>; i++) { </span><span class='comment'>//消息数    </span><span>  </span></li>
    <li class='alt'><span>        String outMessage = </span><span class='string'>"Client #"</span><span> +      </span></li>
    <li class=''><span>            id + </span><span class='string'>",message#"</span><span> + i;      </span></li>
    <li class='alt'><span>        s.send(Dgram.toDatagram(outMessage, hostAddress, UDPServer.INPORT));      </span></li>
    <li class=''><span>        s.receive(dp);      </span></li>
    <li class='alt'><span>        String rcvd = </span><span class='string'>"Client #"</span><span> + id + </span><span class='string'>",rcvd from "</span><span> +      </span></li>
    <li class=''><span>            dp.getAddress() + </span><span class='string'>","</span><span> +      </span></li>
    <li class='alt'><span>            dp.getPort() + </span><span class='string'>":"</span><span> +      </span></li>
    <li class=''><span>            Dgram.toString(dp);      </span></li>
    <li class='alt'><span>        System.out.println(rcvd);      </span></li>
    <li class=''><span>      }      </span></li>
    <li class='alt'><span>    }      </span></li>
    <li class=''><span>    </span><span class='keyword'>catch</span><span> (IOException e) {      </span></li>
    <li class='alt'><span>      e.printStackTrace();      </span></li>
    <li class=''><span>      System.exit(</span><span class='number'>1</span><span>);      </span></li>
    <li class='alt'><span>    }      </span></li>
    <li class=''><span>  }      </span></li>
    <li class='alt'><span>     </span></li>
    <li class=''><span>  </span><span class='keyword'>public</span><span> </span><span class='keyword'>static</span><span> </span><span class='keyword'>void</span><span> main(String[] args) {      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>for</span><span> (</span><span class='keyword'>int</span><span> i = </span><span class='number'>0</span><span>; i &lt; </span><span class='number'>1</span><span>; i++) </span><span class='comment'>//客户数量    </span><span>  </span></li>
    <li class=''><span>      </span><span class='keyword'>new</span><span> UDPClient(i).start();      </span></li>
    <li class='alt'><span>  }      </span></li>
    <li class=''><span>}      </span></li>
    <li class='alt'><span>     </span></li>
    <li class=''><span/><span class='keyword'>class</span><span> Dgram {      </span></li>
    <li class='alt'><span>  </span><span class='keyword'>public</span><span> </span><span class='keyword'>static</span><span> DatagramPacket toDatagram(      </span></li>
    <li class=''><span>      String s, InetAddress destIA, </span><span class='keyword'>int</span><span> destPort) {      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>byte</span><span>[] buf = </span><span class='keyword'>new</span><span> </span><span class='keyword'>byte</span><span>[s.length() + </span><span class='number'>1</span><span>];      </span></li>
    <li class=''><span>    s.getBytes(</span><span class='number'>0</span><span>, s.length(), buf, </span><span class='number'>0</span><span>);      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>return</span><span> </span><span class='keyword'>new</span><span> DatagramPacket(buf, buf.length, destIA, destPort);      </span></li>
    <li class=''><span>  }      </span></li>
    <li class='alt'><span>     </span></li>
    <li class=''><span>  </span><span class='keyword'>public</span><span> </span><span class='keyword'>static</span><span> String toString(DatagramPacket p) {      </span></li>
    <li class='alt'><span>    </span><span class='keyword'>return</span><span> </span><span class='keyword'>new</span><span> String(p.getData(), </span><span class='number'>0</span><span>, p.getLength());      </span></li>
    <li class=''><span>  }      </span></li>
    <li class='alt'><span>}     </span></li>
</ol>
</div>
</div>
</div>
3 楼 Sharp 2007-10-31  
了解!
2 楼 totobacoo 2007-10-31  

http://www.iteye.com/topic/89919

老问题了
1 楼 topcloud 2007-10-29  
怎么才知道啊,哈哈!

相关推荐

    Struts2.0的api

    Struts2.0是Java Web开发中的一个热门框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建动态Web应用程序的强大工具。API文档是理解任何框架核心功能的关键,对于Struts2.0也不例外。让我们深入...

    NetBeans7.0 Struts2.0最新插件

    Struts2.0 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它使得开发者能够更方便地构建动态、数据驱动的Web应用。此“NetBeans7.0 Struts2.0最新插件”提供了对Struts2.0框架的强大支持,以增强...

    Struts2权威指南完整版

    相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在《Struts 2.1权威指南》第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2...

    struts-2.0.11.2-src

    Struts 2.0.11.2 是一个流行的开源MVC框架,基于Java平台,用于构建企业级Web应用程序。这个源代码版本提供了框架的核心功能和相关组件的源码,帮助开发者深入理解其内部工作原理,进行定制化开发或者调试。 在...

    struts2-core-2[1].0.11.zip_struts2 2.0.11.2_struts2 core

    标题中的"struts2-core-2[1].0.11.zip"指的是Struts2的核心库版本2.0.11.2,这是一个重要的组件,包含了处理请求、动作映射、结果渲染等核心功能。 在描述中提到的"有错误是难免的",这通常是指任何软件,包括开源...

    Bug管理系统 struts2+sping2.5+hibernate3(2-2)

    本程序采用struts2.0+spring2.5+hiberhate3架构开发。 主要展示技术包括:三层架构 freemarker模版 面向切面编程 邮件发送 定时任务 缓存管理 运行环境: 1 TOMCAT 5.5及以上版本. 2 JDK5.0及以上版本. 3 ...

    Struts 2.1 权威指南 part13 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part04 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part01 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part02 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part06 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part03 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part05 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part11 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part12 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part10 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part07 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part09 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

    Struts 2.1 权威指南 part08 pdf

     相对于2007年发布的Struts 2.0,Struts 2.1改变较大,Struts 2.1不仅修正了Struts 2.0中少量Bug(这些Bug在本书第一版中已经指出)。而且新增了REST、Convention和Java Templates,这些都是Struts 2未来的发展方向...

Global site tag (gtag.js) - Google Analytics