1. 程式人生 > >JSP 簡單入門教學(2): 點選按鈕實現兩數相加加法運算的 兩種 實現方法

JSP 簡單入門教學(2): 點選按鈕實現兩數相加加法運算的 兩種 實現方法

我們要實現頁面效果:


瞭解過html的都知道,提交資料用的是form表單,表單中的內容是被髮送出去的內容。

大部分開發都是這樣的,先畫ui後考慮功能,所以我們先用程式碼表示出這個介面:

<form action="" method="get">
<h1>加法計算</h1>		<!-- h1表示標題大小級數,還有h2,h3....數字越大則標題字大小越小 -->
運算元1<input name="num1"><br>    <!-- name值的作用是用來根據名字取引數的,相當於“鍵值對” -->
運算元2<input name="num2"><br>    
<input type="submit" value="計算">
</form>

然後我們考慮我們的邏輯程式碼:

<%
	int a=Integer.parseInt(request.getParameter("num1"));
	int b=Integer.parseInt(request.getParameter("num2"));
	out.print(a+b);		
%>

解釋一下,因為在jsp中,request屬於9個內建函式中的一員,所以不用例項化(即不用建立物件),這是屬於jsp的內建物件,所以進行純java開發的時候不能這麼寫。

執行,噫!報錯了?


我們觀看出錯資訊(紅色劃線處)可以知道:變數被賦予了null值 ( 這是新手最最最最容易犯的錯 )

原來是因為 jsp 剛執行的時候,輸入框內都是沒有值的,所以這時候直接輸出a+b就會輸出null+null。

為了解決這個錯誤,我們必須設定 if 語句判斷值是否為空,所以完整程式碼如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<!-- 表單內的內容是被髮送出去的內容,action表示提交給誰,不寫就預設提交給自己。method是提交資訊的方式:get,post -->
<!-- get是明碼提交 ,post則暗中操作-->
<!-- 下面是ui介面程式碼 -->
<form action="" method="get">
<h1>加法計算</h1>		<!-- h1表示標題大小級數,還有h2,h3....數字越大則標題字大小越小 -->
運算元1<input name="num1"><br>
運算元2<input name="num2"><br>
<input type="submit" value="計算">
</form>

<%
//這個是邏輯程式碼
String num1=request.getParameter("num1");
String num2=request.getParameter("num2");
if(num1!=null&&num2!=null){
	int a=Integer.parseInt(num1);
	int b=Integer.parseInt(num2);
	out.print(a+b);		//雖然out.print(a+b)和<%=a+b>等效,但是寫在這裡面是錯誤的,因為表示式是相互獨立的,不能互相巢狀
						//和System.out.print(a+b);也等效啦,但是一個是顯示在頁面的,一個是顯示在控制檯中的
}
%>

</body>
</html>

還有另一種實現方式,通過按鈕的點選事件:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
 
<form action="" method="get" name="abadd">	<!-- 這一行有所修改,新增了特定name值 -->
<h1>加法計算</h1>		 
運算元1<input name="num1"><br>
運算元2<input name="num2"><br>
<input type="button" value="計算" onclick="add()" >	<!-- 這一行有所修改:表示當點選按鈕時觸發add()事件 -->
</form>
<!-- 新增下面的 -->
<script language="javascript">
	function add(){
    	document.abadd.submit();	//表示觸發了名為abadd的表單的資料提交
}
</script>

<%
String num1=request.getParameter("num1");
String num2=request.getParameter("num2");
if(num1!=null&&num2!=null){
	int a=Integer.parseInt(num1);
	int b=Integer.parseInt(num2);
	out.print(a+b);							
}

%>
</body>
</html> 
舉一反三,我們可以融合一些以前學過的html的知識加強我們的頁面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<form action="" method="get" name="abadd"><!-- 表單內的內容是被髮送出去的內容,action表示提交給誰,不寫就預設提交給自己,method是提交方式 -->
<h1>加法計算</h1>
運算元1<input type="text" name="num1"><br> 
運算元2<input type="text" name="num2"><br>
<input type="radio" name="op" value="1">加法 <br><!-- 加法和減法的name都相同是為了保證它們都是同一組選擇按鈕,而不是單獨的可選按鈕 -->
<input type="radio" name="op" value="2">減法<br> <!-- 正因為name是相同的,所以同組的通過value來獲取例項 -->
<input type="submit" value="計算" onclick="add()" >
</form>

<%
	int a=0,b=0;		//區域性變數要記得賦初值
	String str1=request.getParameter("num1");
	String str2=request.getParameter("num2");
	String op_value=request.getParameter("op");

	if(str1!=null&&str2!=null){
		a=Integer.parseInt(str1);
		b=Integer.parseInt(str2);
	}
	
	if(op_value!=null)
	switch(op_value){
	case "1":	
		out.print(a+b); 
		break;
	case "2":	
		out.print(a-b); 
		break;
	default:
		out.print("異常");
		break;
	}
	 
%>
</body>
</html>