一、實驗目的
實驗3_1的目的是掌握怎樣在JSP中使用內置對象request。
實驗3_2的目的是掌握怎樣使用session對象存儲和用戶有關的數據。
二、實驗步驟
**實驗3_1:**編寫一個JSP頁面input.jsp,該頁面提供一個表單,用戶可以通過表單輸人兩個數和四則運算符號提交給該頁面。用戶提交表單後,JSP頁面input.jsp將計算任務交給另一個JSP頁面result.jsp去完成。
input.jsp的具體要求:
input.jsp頁面提供一一個表單,要求表單中提供兩個text輸人框,供用戶輸入數字;提
供一個下拉列表,該下拉列表有加、減、乘、除四個選項,供用戶選擇運算符號。用戶在表單中輸人的數字、選擇運算符號提交給result.jsp頁面。
result.jsp的具體要求:
要求result.jsp頁面獲取input.jsp提交的數據,並計算出相應的結果顯示給用戶。
**實驗3_2:**本實驗編寫3個JSP頁面login.jsp,show.jsp和exit.jsp。login.jsp頁面提供-一個表單,用戶可以通過表單輸人姓名提交給login.jsp頁面,login.jsp頁面將用戶的姓名存放到用戶的session(會話)中。如果用戶鏈接到show.jsp頁面,該頁面將檢查用戶的session中是否存放了姓名,否則就將用戶重新定向到login頁面;如果用戶鏈接到exit.jsp頁面,exit.jsp將銷燬用戶的session。
login.jsp的具體要求:
login.jsp頁面提供-一個表單,要求表單中提供一個text 輸入框,供用戶輸入名字提交給當前頁面,login.jsp頁面將用戶輸人的名字存放到用戶的session(會話)中。
show.jsp的具體要求:
要求show.jsp頁面可以顯示一幅圖像。但前提條件是,用戶事先必須在session中存放有名字,否則無法看到圖像,而且還會被重新定向到login.jsp頁面。
exit.jsp的具體要求:
用戶一旦訪問exit.jsp頁面,用戶的session對象將被銷燬,用戶必須重新訪問其他的頁面獲得新的session。
三、參考代碼
實驗3_1
input.jsp
<%@ 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 ><body bgcolor =yellow >
<form action ="result.jsp" method =post name =form >
輸入運算符、選擇運算符號: <br >
<input type =text name ="numberOne" size =6 >
<select name ="operator" >
<Option value ="+" >加
<Option value ="-" >減
<Option value ="*" >乘
<Option value ="/" >除
</select >
<input type =text name ="numberTwo" size =6 >
<br >< input type ="submit" value =" 提交" name ="submit" >
</form ></body ></html >
result.jsp
<%@ 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 ><body bgcolor =green >
<%
String numberOne=request.getParameter( "numberOne" );
String numberTwo=request.getParameter( "numberTwo" );
String operator=request.getParameter( "operator" );
if (numberOne== null ){
numberOne= "0" ;
}
if (numberTwo== null ){
numberTwo= "0" ;
}
try {
double a=Double.parseDouble(numberOne);
double b=Double.parseDouble(numberTwo);
double r=0;
if (operator.equals( "+" ))
r=a+b;
else if (operator.equals( "-" ))
r=a-b;
else if (operator.equals( "*" ))
r=a*b;
else if (operator.equals( "/" ))
r=a/b;
out.println(a+ "" +operator+ "" +b+ "=" +r);
}
catch (Exception e){
out.println( " 請輸入數字字符! " );
}
%>
</body ></html >
實驗3_2:
login.jsp
<%@ 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">
<head>
<a href=login.jsp> 登錄</a>
<a href=show.jsp> 看圖</a>
<a href=exit.jsp> 退出</a>
</head>
<html><body bgcolor = yellow>
<form action="" method=post name=form>
輸入名字就算登錄了:<br>
<input type=text name="name" size=6>
<br><input type="submit" value=" 提交" name="submit">
</form>
</body></html>
<% String name=request.getParameter("name");
if(name==null)
name="";
session.setAttribute("login_name",name);
%>
Show.jsp
<%@ 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">
<head>
<a href=login.jsp> 登錄</a>
<a href=show.jsp> 看圖</a>
<a href=exit.jsp> 退出</a>
</head>
<html><body>
<%
String name=(String)session.getAttribute("login_name");
if(name==null||name.length()==0){
response.sendRedirect("login.jsp");
}
%>
<img src="image/back1.jpg"
width=200 height=178></img>
</body></html>
exit.jsp
<%@ 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">
<head>
<a href=login.jsp> 登錄</a>
<a href=show.jsp> 看圖</a>
<a href=exit.jsp> 退出</a>
</head>
<html><body>
<%
session.invalidate();
%>
<b>session 會話失敗</b>
</body>
</html>
四、實驗結果
實驗3_1:
input.jsp 頁面:
驗證加法:
提交後結果:
驗證減法:
提交後結果:
驗證乘法:
提交後結果:
驗證除法:
提交後結果:
異常處理:
提交後結果:
實驗3_2:
Login.jsp頁面:
輸入姓名提交 :
提交後:
點擊看圖:
點擊退出:
五、討論
1.HTTP通信協議是用戶與服務器之間一種提交(請求)信息與響應信息(request/response)的通信協議。在JSP中,內置對象request封裝了用戶提交的信息,request對象獲取用戶提交信息的最常用的方法是getParameter(Strings);內置對象response對象對用戶的請求作出動態響應,向用戶端發送數據。
2.HTTP協議是一種無狀態協議。一個用戶向服務器發出請求(request),然後服務器返回響應(response) ,但不記憶連接的有關信息。所以,Tomcat 服務器必須使用內置session對象(會話)記錄有關連接的信息。同一個用戶在某個Web服務目錄中的session是相同的;同一個用戶在不同的Web服務目錄中的session是互不相同的;不同用戶的session是互不相同的。
3.一個用戶在某個Web服務目錄的session對象的生存期限依賴於用戶是否關閉瀏覽器、session對象是否調用invalidate()方法使得session無效或session對象是否達到了設置的最長的“發呆”狀態時間。