struts2在服务器端报错,请大家家帮帮忙

momobeibei 2012-05-18 10:02:37
在本地eclipse里面可以正常运行,可是放到集成服务器上面编译部署到tomcat之后,调用LoginAction时就会报错:

org.apache.struts2.dispatcher.ServletDispatcherResult cannot be cast to com.opensymphony.xwork2.Result - action - file:/usr/local/tomcat/webapps/agile2012/WEB-INF/classes/struts.xml:30:57
com.opensymphony.xwork2.DefaultActionInvocation.createResult(DefaultActionInvocation.java:224)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:368)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
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.ClassCastException: org.apache.struts2.dispatcher.ServletDispatcherResult cannot be cast to com.opensymphony.xwork2.Result
com.opensymphony.xwork2.ObjectFactory.buildResult(ObjectFactory.java:228)
com.opensymphony.xwork2.DefaultActionInvocation.createResult(DefaultActionInvocation.java:221)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:368)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:510)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
...全文
141 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jie2workjava 2012-05-20
  • 打赏
  • 举报
回复
又是环境问题。。还是查查包的情况,怀疑冲突
wnczwl369 2012-05-20
  • 打赏
  • 举报
回复
thanks.了解了。打破了我对高版本jdk的迷信。
momobeibei 2012-05-19
  • 打赏
  • 举报
回复
谢谢大家的回帖,今天起来看了下正常了,很诡异有木有。。。

我想问下java EE运行时用到的jar包有几个地方啊?
jre是一个;WEB-INF下面的lib是一个;Tomcat容器的lib是一个。还有别的么?我按照一楼的对比了下WEB-INF中jar包的数量和版本都是一样的啊,还有需要注意的地方么?

struts.xml:30行就是一个action的定义:
<action name="login" class="action.LoginAction">
<result name="success" >/course/course_list.html</result>
<result name="error">error.jsp</result>
</action>

LoginAction的代码也一并贴一下吧:

package action;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


import model.Access;
import model.Person;
import model.dao.AccessDAO;
import model.dao.PersonDAO;
import model.dao.PersonRoleDAO;
import model.dao.RoleAccessDAO;
import model.dao._RootDAO;
import model.dao.KeyWordDAO;


import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;

private PersonDAO personDAO;
private PersonRoleDAO personRoleDAO;
private RoleAccessDAO roleAccessDAO;
private AccessDAO accessDAO;
private KeyWordDAO keywordDAO;

private Person person;

private String username;
private String password;
private List<Integer> roleList;
private List<Integer> accessIDList;
private List<Access> accessItemList;
private List<String> accessString;

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@SuppressWarnings("unchecked")
public String execute(){
_RootDAO.initialize();
personDAO = new PersonDAO();

person = new Person();
person.setName(username);
person.setPassword(password);

person = personDAO.check(person);

if(person!=null){

ActionContext ac=ActionContext.getContext();
Map sess=ac.getSession();
sess.put("uid",person.getId());

roleList = new ArrayList<Integer>();
accessIDList = new ArrayList<Integer>();
accessItemList = new ArrayList<Access>();
accessString = new ArrayList<String>();

personRoleDAO = new PersonRoleDAO();
roleAccessDAO = new RoleAccessDAO();
accessDAO = new AccessDAO();
keywordDAO = new KeyWordDAO();


roleList = personRoleDAO.getRoleByPersonID(person.getId());

for(Integer roleID:roleList)
accessIDList.addAll(roleAccessDAO.getAccessByRoleID(roleID));

for(Integer accessID:accessIDList)
accessItemList.addAll(accessDAO.getAccessByID(accessID));

for(Access accessItem:accessItemList)
{
accessString.add((keywordDAO.get(Integer.valueOf(accessItem.getSource())).getContent())
+(keywordDAO.get(Integer.valueOf(accessItem.getOperation())).getContent()));
}

sess.put("access",accessString);

return SUCCESS;
}
this.addFieldError("password", "invalid username or password");
return ERROR;

}

}
虽然莫名奇妙的可以了,但是还是想知道为什么啊,谢谢各位了!
momobeibei 2012-05-19
  • 打赏
  • 举报
回复
今天又debug了半天,终于发现时jdk版本的原因。本地是jdk6,服务器是jdk7,导致类型转化的时候出现异常。jdk7很多方面都比较严格,ssh框架中的annotation机制也被限制了。不知道是要自己设置jdk的约束级别还是就这样一刀切了。。。谢谢大家哈~
Asher 2012-05-18
  • 打赏
  • 举报
回复
struts.xml:30:57
fw347969680 2012-05-18
  • 打赏
  • 举报
回复
贴下代码吧。。。
yuppy 2012-05-18
  • 打赏
  • 举报
回复
是不是少什么Jar包了。。。 建议对比下本地和服务器上的 Jar包。。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧