ssh 框架下运行时Unable to instantiate Action, userAction, defined for
type Exception reportmessage
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
Unable to instantiate Action, userAction, defined for 'userAction' in namespace '/'userAction
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:306)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:387)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
root cause
java.lang.ClassNotFoundException: userAction
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:146)
com.opensymphony.xwork2.ObjectFactory.getClassInstance(ObjectFactory.java:96)
com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:206)
com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:128)
com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:139)
com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:109)
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:287)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:387)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.
bean.xml:
<bean id="userAction" class="com.action.UserAction" scope="prototype">
<property name="userService" ref="userService"/>
</bean>
struts。xml:
<package name="default" extends="struts-default" namespace="/">
<action name="userAction" class="userAction">
<result name="login">home.jsp</result>
<result name="addUser">index.jsp</result>
</action>
</package>
userAction:
//登录
public String login() throws Exception{
try{
User u = this.userService.login(login_name, login_password);
if(u != null){
ActionContext.getContext().getSession().put("USERS", u);
return "login";
}else{
System.out.println("错误");
return "fail";
}
}catch(Exception e){
e.printStackTrace();
return "error";
}
}
在线等 请求支援帮帮忙~ --------------------编程问答-------------------- 怎么每人回复呢~欢迎大侠们过来指点指点 这个问题纠结我好久勒 --------------------编程问答-------------------- <action name="userAction" class="userAction">
class应为com.action.UserAction --------------------编程问答-------------------- <bean id="userAction" class="com.action.UserAction" scope="prototype">
<property name="userService" ref="userService"/>
</bean> 这个不是在bean中配置了吗 --------------------编程问答-------------------- 你输入的参数类型有错误 你调试一下看看 那个if else 判断都没有走
在User u = this.userService.login(login_name, login_password);这句就已经报错了
你在检查一下
--------------------编程问答--------------------
嗯~我知道 也调试了~就是这句话的问题 但是该配的都配置了啊 没有找到错误在哪里~郁闷 --------------------编程问答-------------------- 你在看看 走进User u = this.userService.login(login_name, login_password);之前
你所传入的参数的login_name, login_password 是否正确
应该是这两个参数的问题
--------------------编程问答--------------------
这个是正确的 这两个参数 我都在后台输出打印了~找了好久也没看到配置什么的 错误 。。。。。纠结 --------------------编程问答-------------------- ClassNotFoundException:userAction
说明在nameSpace 中不能找到这个userAction
你检查这个
<package name="default" extends="struts-default" namespace="/">
应该是路径问题, --------------------编程问答-------------------- 你确定 进入了action 进入了login()这个方法吗 要是方法的没进的话 就是你配置有问题
要是进入方法了的话 那就是你的User u = this.userService.login(login_name, login_password);有问题 那你就自己在一步一步的推测检查
--------------------编程问答--------------------
嗯谢谢了~ 还是没排查出来~ 是配置的问题 但是真的没有找到哪里有错误 我怀疑是不是少配置东西了呢 --------------------编程问答-------------------- 看看web.xml spring的配置文件路径
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml,classpath*:applicationContext.xml</param-value>
</context-param>
如果没有前边的/web-inf/,classpath指spring的配置文件在src里边 --------------------编程问答-------------------- Unable to instantiate Action, ....action.CertAction, defined for '...' in namespace '/...'null
原因是变量定义:
private UserUtil userUtil = (UserUtil)ServletActionContext.getContext().getSession().get("userUtil");
关键是这里,这个uerUtil成员变量使用了 action 的上下文"ServletActionContext.getContext()".
了解webwork中ServletDispatcher原理的人可能知道原因了, 因为ServletDispatcher接受客户端的HTTP请求,将JavaServlet的很多相关对象进行包装,再传给我们的XWork框架,由我 们的XWork 框架去解析我们的xwork.xml配置文件,根据配置文件的信息,创建对应的Action,组装并调用相应的易做图,执行Action,返回执行结果。
因此每次客户端的请求都将调用ServletDispatcher 的 service()方法,
该方法执行顺序如下:
1、通过request请求取得action的命名空间
2、根据servlet请求的Path,解析出要调用该请求的Action的名字(actionName)
3、创建Action上下文(extraContext)
4、根据前面获得的namespace、actionName、extraContext,创建一个ActonProxy
5、执行proxy的execute()方法,根据Action执行返回的值去调用执行相应的Result(返回结果处理)的方法。
现在应该能明白,原来是Action对象实例在ActionContext对象实例之前创建的,所有这样取得ActionContext容器对象就有可能会返回null.
因此解决次问题方法很简单,就是最好不要在成员变量或者是构造方法里调用ActionContext,而把它放在其它方法里. --------------------编程问答-------------------- 你有没有在struts.xml中配置
<constant name="struts.objectFactory" value="spring"/>
补充:Java , Web 开发