<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的判斷