菜鸟学习Struts2遇到的问题

原创 2015年04月21日 20:30:44

1、ClassNotFoundException StrutsPrepareAndExecuteFilter

工程中需要引入struts2的jar包,因为要建许多工程,为了避免重复复制jar包,所以用了建struts2 的user lib的方式,将user lib 引入每个工程就行了。
编译没啥问题,可是一到Tomcat上运行就出问题了,报错ClassNotFoundException StrutsPrepareAndExecuteFilter,将struts2的jar包复制到工程的lib文件夹下面,在buildpath中设置好后,
tomcat又成功运行了。
解决办法:
将jar包复制到lib下,或者部署到tomcat时指定lib(推荐)


2、Javassist library is missing in classpath! Please add missed dependency!  


com.opensymphony.xwork2.util.logging.commons.CommonsLogger error严重: Dispatcher initialization failed
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.opensymphony.xwork2.inject.ContainerImpl$MethodInjector.inject(Container
Impl.java:301)  
Caused by: java.lang.IllegalArgumentException: Javassist library is missing in classpath! Please add missed dependency!  

解决办法:
添加javassist-3.11.0.GA.jar

3、Bad version org...lang3.StringUtils

Exception starting filter struts2
java.lang.UnsupportedClassVersionError: Bad version number in .class file (unabl
e to load class org.apache.commons.lang3.StringUtils)  

解决办法:
commons-lang3-3.2.jar里面的org.apache.commons.lang3.StringUtils需要JDK1.6及以上
编译用1.6,jre也用1.6,同时tomcat运行jdk也用1.6


4、There is no Action mapped for action name indexs. - [unknown location]

There is no Action mapped for action name user. - [unknown location]
    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
    org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)
    com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:554)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    java.lang.Thread.run(Thread.java:662)

 
反复检查,明明有这个Action,并且路径也是对的,就是报错找不到。

解决办法:
找到一个同名的package注释掉,就可以了。
最初误以为是同名Action问题。下例中不是同名Action,并且命名空间也不同,可是还是不能访问到方法二。
访问方法二:http://localhost:8080/Struts2_040_ActionMethodDMI/dmi/test 报错,There is no Action mapped for action name test. - [unknown location]
    <!-- DMI动态方法调用 -->
    <!-- 方法一,常用 -->
    <package name="test" namespace="/test" extends="struts-default">
        <action name="user" class="org.h4x0r.struts2.action.dmi.UserAction">
            <result>/user_add_success.jsp</result>
        </action>
    </package>
    <!-- 方法二,不常用,有多少个方法,就得配多少个action-->
     <package name="test" namespace="/dmi" extends="struts-default">
        <action name="test" class="org.h4x0r.struts2.action.dmi.UserAction" method="userAdd">
            <result>/user_add_success.jsp</result>
        </action>
    </package>  

真正的问题在于,同一个package定义了2次。坑爹啊!!!!
改成:
 
<!-- DMI动态方法调用 -->
    <!-- 方法一,常用 -->
    <package name="test" namespace="/dmi" extends="struts-default">
        <action name="user" class="org.h4x0r.struts2.action.dmi.UserAction">
            <result>/user_add_success.jsp</result>
        </action>

    <!-- 方法二,不常用,有多少个方法,就得配多少个action-->
        <action name="test" class="org.h4x0r.struts2.action.dmi.UserAction" method="userAdd">
            <result>/user_add_success.jsp</result>
        </action>
    </package>  

结论:在struts.xml中一个package的name必须是唯一的,多次定义同名的package会导致后面的package中的action都找不到。
并且需要注意同名action问题。同一个命名空间不能有同名的Action。(注意不是同一个包!为什么?namespace是package的属性,一个package只能有一个namespace,但是多个package可以共用一个namespace)

同名Action验证
如果有同名的Action,找到的将会是最后一个,下面的访问方式及配置,会执行UserAction2
 <package name="test" namespace="/test" extends="struts-default">
        <action name="user" class="org.h4x0r.struts2.action.dmi.UserAction">
            <result>/user_add_success.jsp</result>
        </action>
        <action name="user" class="org.h4x0r.struts2.action.dmi.UserAction2" method="userAdd">
            <result>/user_add_success.jsp</result>
        </action>
    </package>   

多包共用一个Action验证
  <package name="test" namespace="/test" extends="struts-default">
        <action name="user" class="org.h4x0r.struts2.action.dmi.UserAction">
            <result>/user_add_success.jsp</result>
        </action>
    </package> 
<package name="test2" namespace="/test" extends="struts-default">
        <action name="user2" class="org.h4x0r.struts2.action.dmi.UserAction">
            <result>/user_add_success.jsp</result>
        </action>
    </package>

访问
均成功。

参考资料:
尚学堂马士兵Struts2教程

struts中java.lang.NoClassDefFoundError: com/opensymphony/xwork2/util/TextUtils的解决办法

一年前,自己学Struts时,就发现用了struts的标签,就会报这个鸟错误,一年前自己比较菜,也不知道怎么解决问题,又由于有已经搭好的环境,所以没深究,就过去了。。。 今天,想试一个Str...
  • angus_17
  • angus_17
  • 2012年08月09日 18:01
  • 17940

struts2 java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决

eclipse3.6   jdk1.5  tomcat6建立web工程后,使用struts2.3.20搭建环境,使用struts_blank后,添加里面相关jar后,启动tomcat,信息如下: 信...

使用Struts2遇到的问题

问题一:java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher 配置struts2的时候遇...

struts2开发中经常遇到的问题

在struts2开发中总遇到这个问题,No result defined for action: 原因:Action中的属性值为空的时候,Struts2的默认拦截器会报错,但是又找不到input的R...

struts2时遇到的问题和解决的办法

1.加载不了struts.xml  struts-pluging.xml什么的,是tomcat下的C:\Users\Administrator\workspace\.metadata\.plugins...

菜鸟学SSH(二)——Struts2国际化手动切换版

转载自:http://blog.csdn.net/liushuijinger/article/details/16834039 国际化(internationalization,i18n)和...

菜鸟学SSH(十六)——Struts2内部是如何工作的

前面说完了Spring、Hibernate,很自然今天轮到struts了。struts的核心原理就是通过拦截器来处理客户端的请求,经过拦截器一系列的处理后,再交给Action。下面先看看struts官...

【菜鸟学框架】——Struts2快速上手

本文主要讲解如何快速上手利用Struts2完成业务处理,如有不对之处欢迎各位拍砖,小编在此提前谢过各位啦。 1.1下载struts2的开发包     Struts2的官网:https://stru...

.Java程序员从笨鸟到菜鸟之(四十七)细谈struts2(九)内置拦截器和自定义拦截器详解(附源码)

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188        在上一篇博客中,我们一起看了拦截器的具体实现原理,并且看了一下源码(细谈s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:菜鸟学习Struts2遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)