项目用struts+ibatis框架,感觉类似于jpetstore。大家帮帮忙啊
问题如下:当我以一个用户登录进去后,点击菜单,比如说“修改密码”,这时候就报异常,页面因此也无法显示。奇怪的是有时候点击该菜单不会有异常,出现异常时我刷新一下,又可以正常点击不报异常。其他菜单也有类似情况,大部分时候可以正常点击,可是又常常出现类似情况。异常如下:
2010-01-06 21:08:52 ERROR : org.apache.struts.util.RequestUtils Error creating form bean of class cn.jsqh.jje.presentation.Tblcti_merchBean
java.lang.NullPointerException
at cn.ardu.framework.presentation.AbstractBean.getAuth(AbstractBean.java:53)
at cn.jsqh.jje.presentation.Tblcti_merchBean.<init>(Tblcti_merchBean.java:64)
at cn.jsqh.jje.presentation.Tblcti_merchBean.<init>(Tblcti_merchBean.java:51)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:231)
at org.apache.struts.util.RequestUtils.createActionForm(RequestUtils.java:837)
at org.apache.struts.action.RequestProcessor.processActionForm(RequestProcessor.java:364)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:253)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at cn.ardu.framework.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at cn.ardu.framework.filter.AccessFilter.doFilter(AccessFilter.java:60)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
出错的代码:
       protected Operator_info getAuth() {
return (Operator_info)ActionContext.getActionContext().getRequest().getSession().getAttribute("user");
} protected String getHost() {
return ActionContext.getActionContext().getRequest().getRemoteHost();
} protected String getParam(String name) {
return ActionContext.getActionContext().getRequest().getParameter(name);
} protected void setSession(String name, Object value) {
ActionContext.getActionContext().getRequest().getSession().setAttribute(name, value);
}出错时getAuth() 方法中getSession()得到的是个空值。--struts-config.xml部分代码,太多了不能全贴出来<form-bean name="operator_infoBean" type="cn.jsqh.jje.presentation.Operator_infoBean" /> 
<action path="/modifyPass"
type="org.apache.struts.beanaction.BeanAction"
name="operator_infoBean" scope="session"
input="/operator_info/modify.jsp" validate="false">
<forward name="success" path="/message.jsp" />
</action>

解决方案 »

  1.   

    java.lang.NullPointerException 
    空指针错误呗public class NullPointerException
    extends RuntimeException
    当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括: 调用 null 对象的实例方法。 
    访问或修改 null 对象的字段。 
    将 null 作为一个数组,获得其长度。 
    将 null 作为一个数组,访问或修改其时间片。 
    将 null 作为 Throwable 值抛出。 
    应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。 
      

  2.   

    AbstractBean.getAuth(AbstractBean.java:53)AbstractBean 53行
      

  3.   

    我知道是53行出问题,并且在上面的描述上也给了说明:
    “出错时getAuth() 方法中getSession()得到的是个空值。” 
    只是我想知道getSession为什么有时候是null ,为什么刷新或者多点几次菜单就可以了  我猜的是session在点击有些页面时页面没获取到session的信息,可是经过一些刷新或者点击别的菜单再回头点击该菜单就没问题了。
    请大家给与更多的帮助。
      

  4.   

    (Operator_info)ActionContext.getActionContext().getRequest().getSession().getAttribute("user"); 
    这里一长串,你怎么知道就一定是getSession()是个空?
    我看倒很大可能是getAttribute("user")是个空,你还还要强制转换。
      

  5.   

    我来回答楼主吧,我前几天刚配好jpetstore5.0,不知道楼主是不是问这个,不过记不太清楚了。
    1个错误好像是程序里username写成name了,还有个是ibatis往数据库里插入空值不行(oracle).
      

  6.   


    你有没有销毁session的地方,session时间设置多长,默认是30分钟.
      

  7.   

    struts是2吗?不是不能这么取的ActionContext.getActionContext().getRequest().getSession()
      

  8.   

    谢谢各位的建议 
    struts是版本1 只是用了一个Apache jpetstore应用中一个包的beanaction.jar
    所以可以ActionContext.getActionContext().getRequest().getSession()我跟踪发现就是到getSession这里得到了null值,实际上应该是ActionContext.getActionContext().getRequest()得到request出问题了,我不知道是不是什么地方导致了request出问题了,也就是说request可能不是我需要的request了。很郁闷,关键找不出问题发生的规律,今晚上点了一通也没出问题,而且在websphere上部署似乎问题出现的比tomcat上部署更多。其实问题基本就集中在一点 request.getSession得到了null而session并没丢失,我点别的菜单或者多点几下该菜单就又正常了。再等一天,看看大家有没有啥思路,不行只好尝试把session的代码换了。
      

  9.   

    既然知道那个是空的,它等于null的时候处理一下不就行了
      

  10.   

    正好我看过jpetstore的源码,出现session中某个参数时有时无得原因是因为在好几个action类里,对session进行了操作,有的是移除某个属性,而有的是将真个session给注销了,你可以留意一下。
      

  11.   

    我认为在ActionContext.getActionContext()这一步就已经返回null了。