我用intellij IDEA开发了一个系统,oracle数据库,用了hibernate映射,weblogic服务。
本地测试一切正常,发布到网上能进行读取、修改、删除和操作,就是无法添加。
控制台报空指针错误,不解!!!
(本机测试与网络上使用同一数据库)

解决方案 »

  1.   

    package uiLogic.zygl;import cn.ln.lyfz.nettest.valueObject.Zyfl;
    import cn.ln.lyfz.nettest.logic.ZyflLogic;
    import cn.ln.lyfz.common.PageHelper;
    import cn.ln.lyfz.common.Common;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;/**
     * 1. setPara()
     * 2. save()//添加专业                              
     * 3. update()//修改专业                           
     * 4. delete()//删除专业                                
     * 5. execute()//页面加载时调用此函数                             
     */
    public class Index
    {
        //接收页面bean返回的request值
        private HttpServletRequest request;    //接收页面bean返回的response值
        private HttpServletResponse response;    //接收页面bean返回的session值
        private HttpSession session;
        /**
         * 设置request值并转码
         * 
         * @param request
         */
        public void setRequest(HttpServletRequest request)
        {
            this.request = request;
            try
            {
                //转码
                request.setCharacterEncoding("GB2312");        }
            catch (Exception e)
            {
                try
                {
                    //保存错误到error中
                    session.setAttribute("error", e.getMessage());                //转到错误页
                    response.sendRedirect(request.getContextPath() + "/error.jsp");
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
        }    /**
         * 设置response值
         * @param response
         */
        public void setResponse(HttpServletResponse response)
        {
            this.response = response;
        }    /**
         * 设置session值
         * @param session
         */
        public void setSession(HttpSession session)
        {
            this.session = session;
        }    //专业分类数组
        private Zyfl[] objArr;    //每页显示的行数
        private int pageSize = 10;    //当前页号
        private int currentPage = 1;    //分页帮助类
        private PageHelper ph;    //业务逻辑
        private ZyflLogic logic=new ZyflLogic();    /**
         * 得到专业分类数组
         * @return
         */
        public Zyfl[] getObjArr()
        {
            return objArr;
        }    /**
         * 设置专业分类数组
         * @param objArr
         */
        public void setObjArr(Zyfl[] objArr)
        {
            this.objArr = objArr;
        }    /**
         * 获得分页帮助类
         * @return
         */
        public PageHelper getPh()
        {
            return ph;
        }    /**
         * 获得当前页
         * @param currentPage
         */
        public void setCurrentPage(int currentPage)
        {
            this.currentPage = currentPage;
        }
      

  2.   

    /**
         *  函数名称:       添加新专业                 
         *  函数功能描述:    添加新专业       
         *  被本函数调用的函数清单:                    
         *  被访问的表:Zyfl                             
         *  被修改的表:Zyfl                              
         *  输入参数说明:                            
         *  输出参数说明:                            
         *  返回值的说明:                            
         *  其它说明:
         */
        private void save()throws Exception
        {
            //获得专业名称
            String zymc = request.getParameter("flmc");        //获得该专业下所有工种
            Zyfl[] zyArr = logic.getArr();        //循环工种
            for(int i=0;i<zyArr.length;i++)
            {
                //如果工种名称已有
                if(zymc.equals(zyArr[i].getZymc()))
                {
                    throw new Exception("该专业已添加过!");
                }
            }
            //初始化专业对象
            Zyfl obj=new Zyfl();        //保存专业名称
            obj.setZymc(request.getParameter("flmc"));        //保存专业对象
            logic.save(obj);
        }    /**
         *  函数名称:       修改专业             
         *  函数功能描述:    修改专业       
         *  被本函数调用的函数清单:                   
         *  被访问的表:Zyfl                             
         *  被修改的表:Zyfl                              
         *  输入参数说明:                            
         *  输出参数说明:                            
         *  返回值的说明:                           
         *  其它说明:
         */
        private void update()throws Exception
        {
            //初始化专业对象
            Zyfl obj=new Zyfl();        //设置专业id
            obj.setId(Long.valueOf(request.getParameter("id")));        //设置专业名称
            obj.setZymc(request.getParameter("flmc"));        //更新专业对象
            logic.update(obj);
        }    /**
         *  函数名称:       删除专业                
         *  函数功能描述:    删除专业       
         *  被本函数调用的函数清单:                   
         *  被访问的表:Zyfl                             
         *  被修改的表:Zyfl                             
         *  输入参数说明:                          
         *  输出参数说明:                          
         *  返回值的说明:                           
         *  其它说明:
         */
        private void delete()throws Exception
        {
            //获得要删除专业对象
            Zyfl obj=logic.get(Long.parseLong(request.getParameter("id")));        //删除该专业
            logic.delete(obj);
        }    /**
         *  函数名称:       设置参数                 
         *  函数功能描述:    获得指定页和页面大小       
         *  被本函数调用的函数清单:                    
         *  被访问的表:                              
         *  被修改的表:                              
         *  输入参数说明:                            
         *  输出参数说明:                            
         *  返回值的说明:                            
         *  其它说明:
         */
        private void setPara()throws Exception
        {
            //获得指定页
            if (request.getParameter("head") != null || request.getParameter("previous") != null || request.getParameter("next") != null || request.getParameter("tail") != null || request.getParameter("page") != null)
            {
                //获得当前页
                this.currentPage = Integer.parseInt(request.getParameter("page"));            //如果转到首页设置当前页为1
                if (request.getParameter("head") != null)
                {
                    this.currentPage = 1;
                }            //如果转到上页设置当前页为上一页
                if (request.getParameter("previous") != null)
                {
                    this.currentPage = this.currentPage - 1;
                }            //如果转到下页设置当前页为下一页
                if (request.getParameter("next") != null)
                {
                    this.currentPage = this.currentPage + 1;
                }            //如果转到末页设置当前页为末页
                if (request.getParameter("tail") != null)
                {
                    this.currentPage = Integer.parseInt(request.getParameter("totalPages"));
                }        }        //改变页面大小
            if (request.getParameter("pageSize") != null)
            {
                this.pageSize = Integer.parseInt(request.getParameter("pageSize"));
            }
        }    /**
         *  函数名称:       页面加载时执行  <br>
         *  函数功能描述:   设置参数,执行添加,修改,删除,返回给页面一个专业对象数组   <br>
         *  被本函数调用的函数清单:setPara(), save(), update(), delete()  
         *  被访问的表: Zyfl                                               
         *  被修改的表:                                                
         *  输入参数说明:                                               
         *  输出参数说明:                                               
         *  返回值的说明:                                               
         *  其它说明:                                                   
         */
        public void execute()throws Exception
        {
            //设置参数
            setPara();        if(request.getParameter("insert")!=null)
            {
                //添加新专业
                save();
            }        if(request.getParameter("update")!=null)
            {
               //修改专业
               update();
            }        if(request.getParameter("delete")!=null)
            {
                //删除专业
                delete();
            }        //获得分页对象
            this.ph = new PageHelper(logic.getArr().length,this.pageSize,this.currentPage);        //加载专业对象数组
            objArr=logic.getPageArr(ph.getPageSize(),ph.getStartRow());
        }
    }以上是程序运行时执行的UI逻辑,由于不在现场,无法截取错误信息。
    只是在添加时报该类java空指针错误,然后打出servlet的行数,没有其它信息了。
      

  3.   

    保存操作:
    String zymc = request.getParameter("flmc");
    ZyflLogic logic=new ZyflLogic();
    Zyfl obj=new Zyfl();
    obj.setZymc(request.getParameter("flmc"));
    logic.save(obj);
    值对象:
    public class Zyfl implements Serializable {    private Long id;
        private String zymc;    public Long getId()
        {
            return id;
        }    public void setId(Long id)
        {
            this.id = id;
        }    public String getZymc() {
            return this.zymc;
        }    public void setZymc(String zymc) {
            this.zymc = zymc;
        }}
    相关业务逻辑:
    ....
    ....
    public void save(Zyfl obj) throws Exception
        {
            Session sess = HibernateUtil.currentSession();
            try
            {
                sess.save(obj);
                sess.flush();
            }
            catch (HibernateException e)
            {
                throw e;
            }
            finally
            {
                HibernateUtil.closeSession();
            }
        }
    ....
    ....
    hibernate调用:
    public class HibernateUtil {    private static final SessionFactory sessionFactory;    static
        {
            try
            {
                sessionFactory = new Configuration().configure(new HibernateUtil().getClass().getResource("/hibernate.cfg.xml")).buildSessionFactory();
            }
            catch (HibernateException ex)
            {
                throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
            }
        }    public static final ThreadLocal session = new ThreadLocal();    public static Session currentSession() throws HibernateException
        {
            Session s = (Session) session.get();
            {
                s = sessionFactory.openSession();
                session.set(s);
            }
            return s;
        }    public static void closeSession() throws HibernateException
        {
            Session s = (Session) session.get();
            session.set(null);
            if (s != null)
            {
                s.close();
            }
        }
    }