SSH框架 Eclipse sql2000 Tomcat 编程语言JAVA JSP网站
一个简单的注册用户的功能:结果出来这个异常 空指针 貌似是 请高手救命 献上仅有的40分!
add.save(save);
add 是实例化的DAO,save是实例化的表;
以下为异常!
22:14:38,906 [http-8080-1] DEBUG ModuleUtils : Get module name for path /go.do
22:14:38,906 [http-8080-1] DEBUG ModuleUtils : Module name found: default
22:14:38,921 [http-8080-1] INFO  ComposableRequestProcessor : Initializing composable request processor for module prefix ''
22:14:38,921 [http-8080-1] DEBUG ComposableRequestProcessor : setActionContextClassName: no className specified
22:14:39,031 [http-8080-1] DEBUG ComposableRequestProcessor : Using processing chain for this request
22:14:39,031 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.ExceptionCatcher
22:14:39,031 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.SelectLocale
22:14:39,031 [http-8080-1] DEBUG AbstractSelectLocale : retrieve config...
22:14:39,031 [http-8080-1] DEBUG AbstractSelectLocale : set context locale to zh_CN
22:14:39,031 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.SetOriginalURI
22:14:39,031 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.RequestNoCache
22:14:39,031 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.SetContentType
22:14:39,031 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.RemoveCachedMessages
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.SelectAction
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.AuthorizeAction
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.CreateActionForm
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.PopulateActionForm
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.ValidateActionForm
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.SelectInput
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.ExecuteCommand
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.SelectForward
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.SelectInclude
22:14:39,046 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.PerformInclude
22:14:39,062 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.CreateAction
22:14:39,062 [http-8080-1] INFO  CreateAction : Initialize action of type: org.springframework.web.struts.DelegatingActionProxy
22:14:39,078 [http-8080-1] DEBUG AbstractCreateAction : setting action to org.springframework.web.struts.DelegatingActionProxy@1c63791
22:14:39,078 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.ExecuteAction
22:14:39,093 [http-8080-1] DEBUG DelegatingActionUtils : DelegatingActionProxy with mapping path '/go' and module prefix '' delegating to Spring bean with name [/go]
22:14:39,109 [http-8080-1] DEBUG AbstractBeanFactory : Returning cached instance of singleton bean '/go'
man
如果出现性别,那么就确定在LoginAction中获得了表单!
in bo!
12312
1231
23123132
22
man
如果出现则证明,BO中正确得到表单数据!
如果出现则证明,则save.set结束!下面将进行add.save(save);
22:14:39,109 [http-8080-1] DEBUG RegisteroneDAO : saving Registerone instance
22:14:39,109 [http-8080-1] ERROR RegisteroneDAO : save failed
java.lang.NullPointerException
at com.registerone.dao.RegisteroneDAO.save(RegisteroneDAO.java:36)
at com.registerone.bo.DeBO.saveUser(DeBO.java:41)
at com.registerone.action.LoginAction.execute(LoginAction.java:35)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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:175)
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:844)
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(Unknown Source)
java.lang.NullPointerException
at com.registerone.dao.RegisteroneDAO.save(RegisteroneDAO.java:36)
at com.registerone.bo.DeBO.saveUser(DeBO.java:41)
at com.registerone.action.LoginAction.execute(LoginAction.java:35)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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:175)
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:844)
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(Unknown Source)
22:14:39,109 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.ExecuteForwardCommand
22:14:39,109 [http-8080-1] DEBUG ActionCommandBase : Executing org.apache.struts.chain.commands.servlet.PerformForward
22:14:39,187 [http-8080-1] DEBUG PerformForward : Forwarding to /down.jsp

解决方案 »

  1.   

    这个是业务逻辑BO
    package com.registerone.bo;import com.registerone.dao.RegisteroneDAO;
    import com.registerone.vo.Registerone;
    public class DeBO implements IDeBO {
    private RegisteroneDAO registeroneDAO;

    public void setRegisteroneDAO(RegisteroneDAO registeroneDAO) {
    this.registeroneDAO = registeroneDAO;
    } public boolean saveUser(String username, String psd, String name,
    String sex, String age) { boolean saveUser = false;
    RegisteroneDAO add = new RegisteroneDAO();
    Registerone save = new Registerone();
    if (!username.equals("")) {
    System.out.println("in bo!");
    saveUser = true;
    System.out.println(username);
    System.out.println(psd);
    System.out.println(name);
    System.out.println(age);
    System.out.println(sex);
    System.out.println("如果出现则证明,BO中正确得到表单数据!");
    save.setUsername(username);
    save.setPsd(psd);
    save.setName(name);
    save.setAge(age);
    save.setSex(sex);
    System.out.println("如果出现则证明,则save.set结束!下面将进行add.save(save);");
    add.save(save);
    System.out.println("如果出现则证明,完成增操作!");
    }
    return saveUser;
    }}
      

  2.   

    这个是DAO 一直到BO中调用DAO SAVE方法的代码 全程序无错误package com.registerone.dao;import java.util.List;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.hibernate.LockMode;
    import org.springframework.context.ApplicationContext;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.registerone.vo.Registerone;/**
     * A data access object (DAO) providing persistence and search support for
     * Registerone entities. Transaction control of the save(), update() and
     * delete() operations can directly support Spring container-managed
     * transactions or they can be augmented to handle user-managed Spring
     * transactions. Each of these methods provides additional information for how
     * to configure it for the desired type of transaction control.
     * 
     * @see com.registerone.vo.Registerone
     * @author MyEclipse Persistence Tools
     */public class RegisteroneDAO extends HibernateDaoSupport implements IRegisteroneDAO {
    private static final Log log = LogFactory.getLog(RegisteroneDAO.class);
    protected void initDao() {
    // do nothing
    } /* (non-Javadoc)
     * @see com.registerone.dao.IRegisteroneDAO#save(com.registerone.vo.Registerone)
     */
    public void save(Registerone transientInstance) {
    log.debug("saving Registerone instance");
    try {
    getHibernateTemplate().save(transientInstance);
    log.debug("save successful");
    } catch (RuntimeException re) {
    log.error("save failed", re);
    throw re;
    }
    } /* (non-Javadoc)
     * @see com.registerone.dao.IRegisteroneDAO#delete(com.registerone.vo.Registerone)
     */
    public void delete(Registerone persistentInstance) {
    log.debug("deleting Registerone instance");
    try {
    getHibernateTemplate().delete(persistentInstance);
    log.debug("delete successful");
    } catch (RuntimeException re) {
    log.error("delete failed", re);
    throw re;
    }
    }
      

  3.   

    public void save(Registerone transientInstance) {
    log.debug("saving Registerone instance");
    try {
    getHibernateTemplate().save(transientInstance);
    log.debug("save successful");
    } catch (RuntimeException re) {
    log.error("save failed", re);
    throw re;
    }

    这里面空指针,跟踪下。
    是否你的方法根本没有注入,就是你的配置文件不对啦。。
      

  4.   

    原因是我NEW了DAO,这个心NEW的DAO 在调用SAVE方法的时候 并没有通过Spring被注入Session,所以用新NEW的DAO调用SAVE的时候就成了空指针!因为这个DAO中没有注入Session;DAO中的SAVE方法里是空的;
      

  5.   

    楼主既然使用了Spring 为什么还要自己new呢? 自己new的对象 数据库的连接信息去哪弄?只有借助Spring注入的DAO才会有数据库相关的信息啊!用法不对呃!
      

  6.   

    用法不对  不能用NEW的  NEW了以后是不能获得链接的..
    如果真的要测试在的话可以建一个TEST的类  里面通过获得上下文本对象读取spring的配置文件  通过getBean("beanid")来获得这个Dao  然后就对了..如果在Action中使用的话  直接把那个Dao注入进来  get  set方法  然后可以直接使用..