我用的是eclipse3.4, tomcat6.0.刚开始学struts2.我login.jsp页面的action提交形式为<form action="login.action" method="post">
web.xml(在WEB-INF下):
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>struts.xml(在src的根目录下)如下:
<struts>
<!-- 配置包,名称为bookcode -->
<package name="struts2" extends='struts-default'>
<!-- 配置Action -->
<action name="login" class="LoginAction">
<!-- 配置返回结果 -->
<result name="success">/struts/success.jsp</result>
<result name="error">/struts/failure.jsp</result>
</action>
</package>
</struts> LoginAction.java(也是在src根目录下)我按了login.jsp登录按钮后出现这样的错误:
console显示:
java.lang.InstantiationException: com.opensymphony.xwork2.Action
at java.lang.Class.newInstance0(Class.java:335)
at java.lang.Class.newInstance(Class.java:303)
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:123)
at org.apache.struts2.plexus.PlexusObjectFactory.lookup(PlexusObjectFactory.java:298)
at org.apache.struts2.plexus.PlexusObjectFactory.buildBean(PlexusObjectFactory.java:216)
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:154)
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:143)
at com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:113)
。
浏览器显示:
javax.servlet.ServletException: Unable to intantiate Action! - action - file:/D:/STUDY/Java/Development/eclipse/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/test1/WEB-INF/classes/struts.xml:11:46Unable to intantiate Action! - action - file:/D:/STUDY/Java/Development/eclipse/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/test1/WEB-INF/classes/struts.xml:11:46
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:277)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:365)java.lang.InstantiationException: com.opensymphony.xwork2.Action
java.lang.Class.newInstance0(Class.java:335)
java.lang.Class.newInstance(Class.java:303)望大家指教。。万分感谢哈
web.xml(在WEB-INF下):
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>struts.xml(在src的根目录下)如下:
<struts>
<!-- 配置包,名称为bookcode -->
<package name="struts2" extends='struts-default'>
<!-- 配置Action -->
<action name="login" class="LoginAction">
<!-- 配置返回结果 -->
<result name="success">/struts/success.jsp</result>
<result name="error">/struts/failure.jsp</result>
</action>
</package>
</struts> LoginAction.java(也是在src根目录下)我按了login.jsp登录按钮后出现这样的错误:
console显示:
java.lang.InstantiationException: com.opensymphony.xwork2.Action
at java.lang.Class.newInstance0(Class.java:335)
at java.lang.Class.newInstance(Class.java:303)
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:123)
at org.apache.struts2.plexus.PlexusObjectFactory.lookup(PlexusObjectFactory.java:298)
at org.apache.struts2.plexus.PlexusObjectFactory.buildBean(PlexusObjectFactory.java:216)
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:154)
at com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:143)
at com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:113)
。
浏览器显示:
javax.servlet.ServletException: Unable to intantiate Action! - action - file:/D:/STUDY/Java/Development/eclipse/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/test1/WEB-INF/classes/struts.xml:11:46Unable to intantiate Action! - action - file:/D:/STUDY/Java/Development/eclipse/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/test1/WEB-INF/classes/struts.xml:11:46
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:277)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:365)java.lang.InstantiationException: com.opensymphony.xwork2.Action
java.lang.Class.newInstance0(Class.java:335)
java.lang.Class.newInstance(Class.java:303)望大家指教。。万分感谢哈
如果用IOC注入生成对象的方式,可能配置文件没有配置
其他,可能没有NEW一个对象
我们目前就单用struts2,没有用到IOC的。
不知是哪里出错了导致LoginAction不能够被实例。。
<!-- 配置包,名称为bookcode -->
<package name="struts2" extends='struts-default'>
<!-- 配置Action -->
<action name="login" class="LoginAction">
<!-- 配置返回结果 -->
<result name="success">/struts/success.jsp </result>
<result name="error">/struts/failure.jsp </result>
</action>
</package>
</struts> 红色部分写类的全名 包括包名
**.**.LoignAction是全路径的类名称
我同样的结构和代码copy到myeclipse6.0,并用自己的lib包(没有用myelipse自带的包)就成功了。
也许是环境的问题了,但不知道问题出在哪里。其他的跑ibatis和hibernate,struts1都是没问题的。
真闹人,真是。
错误啊 ,应该带上命名空间
你的 action 类继承ActionSupport了吗?
要使工程中运用struts2
工程目录下必须要有struts2必须的五个包,如下:
struts2-core-2.0.12.jar,
xwork-2.0.6.jar,
commons-logging-1.0.4.jar,
ognl-2.6.11.jar,
freeer-2.3.8.jar
struts2中的任何一个action都无需继承任何类(struts自带的Action类)
但是作为struts2的action来说,默认执行的方法是execute()
要让配置简单那必须要有这个方法,当然这个方法也不是必须的
没有这个方法也可以作为正常的action使用但是需要指出所执行的方法,如:
<action name="you want name" class="your class" method="your method">
</action>
而有execute()方法,且又是执行该方法就无须显示指明method的值,即:<action name="you want name" class="your class" method="execute"></action>
和
<action name="you want name" class="your class">
</action>
等价
对于表单中的值,如果在当前action中可取,那必须要在当前action中直接或者间接的拥有该属性
且必须提供get、set方法
想了解更多
http://user.qzone.qq.com/492236022/blog/1225195641