<body>
<%
//接收第一个数
String s_num1=request.getParameter("num1");
//接收第二个数
String s_num2=request.getParameter("num2");
//接收运算符
String flag=request.getParameter("flag");
//计算
int num1=0;
int num2=0;
int result=0;
num1=Integer.parseInt(s_num1);
num2=Integer.parseInt(s_num2);
if(flag.equals("+")){result=num1+num2;}
else if(flag.equals("-")){result=num1-num2;}
else if(flag.equals("*")){result=num1*num2;}
else if(flag.equals("/")){result=num1/num2;}
//输出结果
%>
<form name="form1" action="myCal.jsp">
<br>
<hr>
请输入第一个数<input type="text" name="num1"><br>
<select name="flag">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<br>
请输入第二个数<input type="text" name="num2"><br>
<br>
<input type="submit" value="计算" onclick="return checkNum()">
<hr>
<!-- 这里输出计算结果 -->
计算结果是:<%=result %>
</form>
</body>
出现错误
java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Integer.java:454)
java.lang.Integer.parseInt(Integer.java:527)
org.apache.jsp.myCal_jsp._jspService(myCal_jsp.java:99)
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:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
关键错误在于org.apache.jsp.myCal_jsp._jspService(myCal_jsp.java:99)
jsp第一次运行时,jsp文件会被服务器翻译成一个对应的java文件,然后再被编译成为.class文件存储在内存中,以后的访问就直接访问.class文件。但是在第一次的访问时,”num1”、 “num2”、是空的,所以会出现java.lang.NumberFormatException: null的错误
我们可以在计算之前加一个if语句来进行处理
if(s_num1!=null&&s_num2!=null&&flag!=null)
输入5+6结果不会出错,但是因为相当于跳转回自己的页面,所以在输出结果时,没有保留原始的数据
事实上,因为对于flag,我们没有进行特别的设置,所以在第一次访问时,flag有值默认为“+”,所以在这句话中,可以不必加flag的判断