问题描述
最近学习JSP,使用书本上的例子,就是显示不了,总出现异常。比如我要使用自己建立的一个javabean,packagebean;publicclassSimpleCalculator{privateStringfirst;privateStringsecond;privatedoubleresult;privateStringoperator;publicvoidsetFirst(Stringfirst){this.first=first;}publicvoidsetSecond(Stringsecond){this.second=second;}publicvoidsetOperator(Stringoperator){this.operator=operator;}publicStringgetFirst(){returnthis.first;}publicStringgetSecond(){returnthis.second;}publicStringgetOperator(){returnthis.operator;}publicdoublegetResult(){returnthis.result;}publicvoidcalculate(){doubleone=Double.parseDouble(first);doubletwo=Double.parseDouble(second);try{if(operator.equals("+"))result=one+two;elseif(operator.equals("-"))result=one-two;elseif(operator.equals("*"))result=one*two;elseif(operator.equals("/"))result=one/two;}catch(Exceptione){System.out.println(e);}}}
作用是计算器。将Bean编译到/Webapps/ch06/WEB-INF/classes中。再在/webapps/ch06下创建一calculate.jsp页面,代码如下:<%@pagecontentType="text/html;charset=GB2312"%><%@pageimport="bean.SimpleCalculator"%><html><head><title>实现简单的计数器</title><metahttp-equiv="Content-Type"content="texthtml;charset=GB2312"></head><body><palign=center><b>简单的计算器</b></p><hr/>计算结果<jsp:useBeanid="calculator"scope="request"class="bean.SimpleCalculator"><jsp:setPropertyname="calculator"property="*"/></jsp:useBean><%calculator.calculate();out.println(calculator.getFirst()+calculator.getOperator()+calculator.getSecond()+"="+calculator.getResult());%><hr/><formaction="calculate.jsp"method=get><tablewidth="75%"><tr><tdalign=right>第一个操作数</td><td><inputtype=textname="first"></td></tr><tr><tdalign=right>操作符号</td><td><selectname="operator"><optionvalue="+">+</option><optionvalue="-">-</option><optionvalue="*">*</option><optionvalue="/">/</option></select></td></tr><tr><tdalign=right>第二个操作数</td><td><inputtype=textname="second"></td></tr><tr><td></td><td><inputtype=submitvalue="点我计算"></td></tr></table></form></body></html>
在浏览器中打开http://localhost:8080/ch06/calculate.jsp时候,出现异常.typeExceptionreportmessagedescriptionTheserverencounteredaninternalerror()thatpreventeditfromfulfillingthisrequest.exceptionorg.apache.jasper.JasperException:AnexceptionoccurredprocessingJSPpage/calculate.jspatline1613:<jsp:setPropertyname="calculator"property="*"/>14:</jsp:useBean>15:<%16:calculator.calculate();17:out.println(calculator.getFirst()+calculator.getOperator()+calculator.getSecond()+"="18:+calculator.getResult());19:%>Stacktrace:org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:519)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:428)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)javax.servlet.http.HttpServlet.service(HttpServlet.java:717)rootcausejava.lang.NumberFormatException:Forinputstring:"-1212`"sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)java.lang.Double.parseDouble(Double.java:510)bean.SimpleCalculator.calculate(SimpleCalculator.java:39)org.apache.jsp.calculate_jsp._jspService(calculate_jsp.java:85)org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)javax.servlet.http.HttpServlet.service(HttpServlet.java:717)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)javax.servlet.http.HttpServlet.service(HttpServlet.java:717)noteThefullstacktraceoftherootcauseisavailableintheApacheTomcat/6.0.32logs.求解,不甚感激。
解决方案
解决方案二:
字符串"-1212`"转换不了double类型,注意输入的数字"-1212`",-1212后面有个字符,在doubleone=Double.parseDouble(first);操作是会出异常的,去掉"-1212`"最后的一个字符"-1212"
解决方案三:
这是我修改后的,并实验可以运行:packagebean;publicclassSimpleCalculator{privateStringfirst;privateStringsecond;privatedoubleresult;privateStringoperator="+";publicvoidsetFirst(Stringfirst){this.first=first;}publicvoidsetSecond(Stringsecond){this.second=second;}publicvoidsetOperator(Stringoperator){this.operator=operator.trim();}publicStringgetFirst(){returnthis.first;}publicStringgetSecond(){returnthis.second;}publicStringgetOperator(){returnthis.operator;}publicdoublegetResult(){returnthis.calculate();}publicdoublecalculate(){doubleone=Double.parseDouble(first);doubletwo=Double.parseDouble(second);if(operator.equals("+"))result=one+two;elseif(operator.equals("-"))result=one-two;elseif(operator.equals("*"))result=one*two;elseif(operator.equals("/"))result=one/two;returnresult;}}<%@pagecontentType="text/html;charset=GB2312"%><%@pageimport="bean.SimpleCalculator"%><html><head><title>实现简单的计数器</title><metahttp-equiv="Content-Type"content="texthtml;charset=GB2312"></head><body><palign=center><b>简单的计算器</b></p><hr/>计算结果<jsp:useBeanid="calculator"scope="session"class="bean.SimpleCalculator"><jsp:setPropertyname="calculator"property="*"/></jsp:useBean><hr/><formaction=""method=postname=form><tablewidth="75%"><tr><tdalign=right>第一个操作数</td><td><inputtype=textname="first"value="<jsp:getPropertyproperty="first"name="calculator"/>"></td></tr><tr><tdalign=right>操作符号</td><td><selectname="operator"><optionvalue="+">+</option><optionvalue="-">-</option><optionvalue="*">*</option><optionvalue="/">/</option></select></td></tr><tr><tdalign=right>第二个操作数</td><td><inputtype=textname="second"value="<jsp:getPropertyproperty="second"name="calculator"/>"></td></tr><tr><td>结果:<jsp:getPropertyname="calculator"property="result"/></td><td><inputtype=submitvalue="点我计算"></td></tr></table></form></body></html>
解决方案四:
1楼看的果然仔细,佩服佩服!
解决方案五:
calculator.calculate();运行到这一步有问题,第一次访问该页面的时候,calculator对象的属性被设置成NULL值,所以计算时会抛出异常,如2楼或新建个js页面作为action1楼果然看的很认真!好眼力!
解决方案六:
嗯,输入非法数据时会报异常,建议楼主做异常处理
解决方案七:
引用1楼wj594594520的回复:
字符串"-1212`"转换不了double类型,注意输入的数字"-1212`",-1212后面有个字符,在doubleone=Double.parseDouble(first);操作是会出异常的,去掉"-1212`"最后的一个字符"-1212"
+1
解决方案八:
以前做的MVC模式,楼主参考下/***@(#)HandleComputer.java***@author*@version1.002011/2/1*/packageuser.yourservlet;importuser.yourbean.ComputerBean;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHandleComputerextendsHttpServlet{publicvoidinit(ServletConfigconfig)throwsServletException{super.init(config);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ComputerBeandataBean=null;HttpSessionsession=request.getSession(true);try{dataBean=(ComputerBean)session.getAttribute("ok");//判断是否属于同一用户?。。。if(dataBean==null){dataBean=newComputerBean();//创建Javabean对象session.setAttribute("ok",dataBean);//将dataBean存储到session对象中}}catch(Exceptionexp){dataBean=newComputerBean();session.setAttribute("ok",dataBean);}Stringmessage;StringNumone=request.getParameter("numberOne");StringNumtwo=request.getParameter("numberTwo");if(Numone==null||Numtwo==null)Numone=Numtwo="";try{doublenumberOne=Double.parseDouble(Numone);//获取表单提交的数据doublenumberTwo=Double.parseDouble(Numtwo);Stringoperator=request.getParameter("operator");doubleresult=0;if(operator.equals("+"))result=numberOne+numberTwo;elseif(operator.equals("-"))result=numberOne-numberTwo;//进行数据处理elseif(operator.equals("*"))result=numberOne*numberTwo;elseif(operator.equals("/"))result=numberOne/numberTwo;message="数据操作成功!";dataBean.setNumberOne(numberOne);//将处理后的数据存储在dataBean中dataBean.setNumberTwo(numberTwo);dataBean.setOperator(operator);dataBean.setResult(result);dataBean.setMessage(message);}catch(NumberFormatExceptione){message="数据操作失败,请输入数字字符!";dataBean.setMessage(message);}/*RequestDispatcher对象可以把用户对当前JSP页面或servlet的请求转发给另一个JSP**页面或servlet,而且将用户对当前JSP页面或servlet的请求和响应(HttpServletRequest**对象和HttpServletResponse对象传递给所转发的JSP页面或servlet)**/RequestDispatcherdispatcher=request.getRequestDispatcher("lookResult.jsp");dispatcher.forward(request,response);//请求lookResult.jsp显示dataBean中的数据}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);}}