问题描述
packagecn.cp9.homework.demo;importjava.io.IOException;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.jspsmart.upload.*;publicclassEmpServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.setCharacterEncoding("GBK");SmartUploadsmart=null;Stringstatus=request.getParameter("status");//万一接收不到,在使用smartupload接收一次if(status==null||"".equals(status)){try{smart=newSmartUpload();smart.initialize(super.getServletConfig(),request,response);smart.upload();status=smart.getRequest().getParameter("status");}catch(Exceptione){e.printStackTrace();}}if(!(status==null||"".equals(status))){if("insert".equals(status)){this.insert(request,response,smart);}/*if("update".equals(status)){this.update(request,response,smart);}if("delete".equals(status)){this.delete(request,response);}if("show".equals(status)){this.show(request,response);}*/}}publicvoidinsert(HttpServletRequestrequest,HttpServletResponseresponse,SmartUploadsmart)throwsServletException,IOException{//Stringpages="../../../errors.jsp";Stringpages=null;try{Stringempno=smart.getRequest().getParameter("empno");Stringename=smart.getRequest().getParameter("ename");Stringjob=smart.getRequest().getParameter("job");java.util.Datehiredate=newSimpleDateFormat("yyyy-MM-dd").parse(smart.getRequest().getParameter("hiredate"));doublesal=Double.parseDouble(smart.getRequest().getParameter("sal"));doublecomm=Double.parseDouble(smart.getRequest().getParameter("comm"));Stringnote=smart.getRequest().getParameter("note");Empemp=newEmp();emp.setEmpno(empno);emp.setEname(ename);emp.setJob(job);emp.setHiredate(hiredate);emp.setSal(sal);emp.setComm(comm);emp.setNote(note);StringtempMgr=smart.getRequest().getParameter("mgr");emp.setMgr(tempMgr);inttempDeptno=Integer.parseInt(smart.getRequest().getParameter("deptno"));emp.setDeptno(tempDeptno);//设置关系StringfileName=null;StringfilePath=null;if(smart.getFiles().getSize()>0){//有文件上传,则自动生成新的图片名称IPTimeStampits=newIPTimeStamp(request.getRemoteAddr());fileName=its.getIPTimeRand()+"."+smart.getFiles().getFile(0).getFileExt();filePath=this.getServletContext().getRealPath("/")+"uploadfile"+java.io.File.separator+fileName;emp.setPhoto(fileName);}else{emp.setPhoto("nophoto.jpg");}if(DAOEmpFactory.getIEmpDaoInstance().insert(emp)){if(smart.getFiles().getSize()>0){smart.getFiles().getFile(0).saveAs(filePath);//保存文件}pages="success.jsp";}}catch(Exceptione){e.printStackTrace();}request.getRequestDispatcher(pages).forward(request,response);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{this.doGet(request,response);}}
<%@pagecontentType="text/html"pageEncoding="GBK"%><html><head><title>insert</title></head><body><formaction="EmpServlet"method="post"><table><tr><td>增加雇员信息</td></tr><tr><td>雇员编号:</td><td><inputtype="text"name="empno"></td></tr><tr><td>雇员姓名:</td><td><inputtype="text"name="ename"></td></tr><tr><td>雇员工作:</td><td><inputtype="text"name="job"></td></tr><tr><td>雇员日期:</td><td><inputtype="text"name="hiredate"></td></tr><tr><td>雇员工资:</td><td><inputtype="text"name="sal"></td></tr><tr><td>雇员奖金:</td><td><inputtype="text"name="comm"></td></tr><tr><td>雇员上级:</td><td><inputtype="text"name="mgr"></td></tr><tr><td>雇员部门:</td><td><inputtype="text"name="deptno"></td></tr><tr><td>雇员照片:</td><td><inputtype="file"name="photo"></td></tr><tr><td>雇员简介:</td><td><textareaid="note"name="note"style="width:650px;height:200px;"></textarea></td></tr><tr><td><inputtype="hidden"name="status"value="insert"></td><td><inputtype="submit"value="提交"></td><td><inputtype="reset"value="重置"></td></tr></table></form></body></html>
createtableemp(empnovarchar(8)primarykey,enamevarchar(10),jobvarchar(10),hiredatedatetime,salnumeric(10,2),commnumeric(10,2),mgrvarchar(8),deptnoint,photovarchar(100),notevarchar(100),)
通过jsp页面提交后,就会出现500错误。求大神指点~~为什么会出现那个空指针异常?通过下面这个测试又可以加入相应的雇员信息,packagecn.cp9.homework.demo;importjava.util.Date;importjava.util.Calendar;publicclassTest{publicstaticvoidmain(String[]args){Empemp=newEmp();emp.setEmpno("110210");emp.setEname("FiShelly");emp.setJob("ADC");emp.setSal(110210);emp.setComm(0210);emp.setDeptno(0210);emp.setMgr("Shelly");emp.setPhoto("love.jpg");emp.setNote("。。。.");emp.setHiredate(newDate());try{System.out.println(DAOEmpFactory.getIEmpDaoInstance().insert(emp));}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}
很纠结,求大神指点~~~~
解决方案
解决方案二:
会用debug模式不?打断点看具体哪边nullpointer然后再判断页面name是否与后台一致
解决方案三:
pages="success.jsp";这句话没有执行导致request.getRequestDispatcher(pages).forward(request,response);的pages为null
解决方案四:
2楼说的有道理,断点if(DAOEmpFactory.getIEmpDaoInstance().insert(emp)){if(smart.getFiles().getSize()>0){smart.getFiles().getFile(0).saveAs(filePath);//保存文件}pages="success.jsp";}看代码有没有走到这个if内,如果没有走进来那么pages就是null了
解决方案五:
引用2楼sc6231565的回复:
pages="success.jsp";这句话没有执行导致request.getRequestDispatcher(pages).forward(request,response);的pages为null
那请问下为什么会没有执行?要怎么改?
解决方案六:
87--93行:if(DAOEmpFactory.getIEmpDaoInstance().insert(emp)){if(smart.getFiles().getSize()>0){smart.getFiles().getFile(0).saveAs(filePath);//保存文件}pages="success.jsp";}-------------------------------49行://Stringpages="../../../errors.jsp";------------------------------DAOEmpFactory.getIEmpDaoInstance().insert(emp)有可能是这个emp对象没有插入到数据库,所以没进入if(){}中。也有可能是进入了if(){},是pages="success.jsp"不对。即页面不在这个目录下,找不到页面,也是空指针。这个猜测是基于49行的注释信息。----建议:Empemp=newEmp();emp.setEmpno(empno);emp.setEname(ename);emp属性赋值,应该写到构造里面。这里只要一句Empemp=newEmp(no,name,....)就可以,我觉得这样比较清晰。String对象赋初值用null有待商榷。88-89行也有点问题,是先保存对象后保存文件吗。另外,初学就不要用工厂了,直接JDBC好些。
解决方案七:
引用3楼magi1201的回复:
2楼说的有道理,断点if(DAOEmpFactory.getIEmpDaoInstance().insert(emp)){if(smart.getFiles().getSize()>0){smart.getFiles().getFile(0).saveAs(filePath);//保存文件}pages="success.jsp";}看代码有没有走到这个if内,如果没有走进来那么pages就是null了
怎么判断有没有走进来?
解决方案八:
引用2楼sc6231565的回复:
pages="success.jsp";这句话没有执行导致request.getRequestDispatcher(pages).forward(request,response);的pages为null
顶
解决方案九:
引用7楼wyx100的回复:
Quote: 引用2楼sc6231565的回复:
pages="success.jsp";这句话没有执行导致request.getRequestDispatcher(pages).forward(request,response);的pages为null顶
为什么会没执行?是哪里有问题么?
解决方案十:
引用8楼u013246140的回复:
Quote: 引用7楼wyx100的回复:
Quote: 引用2楼sc6231565的回复:
pages="success.jsp";这句话没有执行导致request.getRequestDispatcher(pages).forward(request,response);的pages为null顶
为什么会没执行?是哪里有问题么?
打个断点就知道了
解决方案十一:
会用debug模式不?打断点看具体哪边nullpointer然后再判断页面name是否与后台一致