使用JSP技术实现一个简单的在线测试系统的实例详解

1、登陆界面

实现:

本界面由三部分构成,footer.jsp,index.jsp,header.jsp

header.jsp

<center> 	<h2>在线测试系统</h2>
	<p>
		登录 		|
		在线测试 		|
		成绩榜 	</p>
</center>

该部分主要实现主界面的头部信息,显示三个链接,分别可以跳转到登陆界面,在线测试界面,以及成绩榜界面

 footer.jsp

<%!int pagecount = 0;%>
<% pagecount++; %><center>  <p>copyright @ 2018 | 访问次数:<%=pagecount%></p>
</center>

该部分显示登录页面的底部信息,即显示访问次数等其他信息

 index.jsp

 <meta charset="utf-8"> <title>insert title here</title> <jsp:include page="header.jsp"> <center> <form action="check.jsp" method="get"> 用户名<input type="text" name="username" /> 密码<input type="password" name="psd" /> <button type="submit">登录</button> <button type="reset">重填</button> </form></center> <jsp:include page="footer.jsp"> </jsp:include></jsp:include>

该部分主要显示登陆界面的中间界面,用户可以输入用户名和密码实现登陆系统

 2、登陆检测

当用户点击登陆按钮,系统后台会获取用户输入的用户名以及密码,并与预设的进行比对,由于本例没有使用数据库,所以使用map存储用户名及密码

<%!
map<string,string> userlist= new hashmap<string,string>();
%>
 
<%
userlist.put("qq", "11");
userlist.put("ww","22");
userlist.put("ee","33");
%>
 
<%!
boolean check(string username,string psd){
	if(userlist.containskey(username)){
		if(userlist.get(username).equals(psd)){
			return true;
		}
	}
	
	return false;
}
 
%>
 
 
<%
string username=request.getparameter("username");
string psd=request.getparameter("psd");
if(check(username,psd)){
	session.setattribute("username", username);
	
	out.print("欢迎"+username);
	out.print("开始测试");
}
else{
	out.print("登陆失败,3秒钟后重新登录");
	response.setheader("refresh", "3;url='index.jsp'");
}
 
%></string,string></string,string>

当用户输入的用户名及密码正确时,系统会显示用户姓名,以及跳转链接,同时使用session保存用户名,密码不正确时,3秒后返回登陆界面,

 3、测试页面

用户输入用户名及密码后便进入测试页面,测试页面的第一行显示用户名,之后显示题目信息。

<%
string username=(string)session.getattribute("username"); 
if(username==null){
	out.print("未登陆,3秒钟后重新登录");
	response.setheader("refresh", "3;url='index.jsp'");
}
else{
	%>
	
	考生:<%=session.getattribute("username") %>
 <h3>在线测试题</h3>
<form action="submit.jsp" onsubmit="return confirm('确定提交吗?')"> 		第1题:湖北省会是
		<input type="text" name="q1" /> 		


		第2题:宋朝开国皇帝是
		

		<input type="radio" value="赵匡胤" name="q2" /> 		赵匡胤
		<input type="radio" value="朱元璋" name="q2" /> 		朱元璋
		<input type="radio" value="李渊" name="q2" /> 		李渊
		


		第3题:四大名著有
		

		<input type="checkbox" value="红楼梦" name="q3" /> 		红楼梦
		<input type="checkbox" value="水浒传" name="q3" /> 		水浒传
		<input type="checkbox" value="j2ee编程技术" name="q3" /> 		j2ee编程技术
		


		<button type="submit">提交</button> </form> 	
<%}%>

进入页面之前,会再次检测用户是否登录,以防止用户通过其他路径访问到该页面。

点击提交时,系统会提示是否提交,点击确定后,系统后台要做两件事,第一件事就是注销session,另一件事就是通过答案获取相应的分数,并且将用户名和分数保存。

4、提交页面

用户完成题目点击提交后,系统会获取用户的答案,并与标准答案对比,获取相应的分数,同时使用application保存用户名和成绩,这样就可以在成绩榜中显示每个用户的成绩信息

<%!
map<string, integer=""> score_list = new hashmap<string, integer="">(); //存放用户名+成绩 
%>
<%
int score=0;
string q1=request.getparameter("q1");
string q2=request.getparameter("q2");
string[] q3=request.getparametervalues("q3");
 
if(q1!=null&&q1.equals("武汉")){	score+=10;	}
if(q2!=null&&q2.equals("赵匡胤")){	score+=10;	}
if(q3!=null&&q3.length==2&&q3[0].equals("红楼梦")&&q3[1].equals("水浒传")){
	score+=10;	}
//out.print("<h2>你的成绩=" + score + "</h2>
");
 
score_list.put((string)session.getattribute("username"), score);
application.setattribute("scorelist", score_list);
response.sendredirect("logout.jsp");
%></string,></string,>

 5、成绩榜

成绩榜通过application显示所有登陆用户的用户名及成绩,并按照成绩进行排序‘'

<h1>成绩榜</h1>
<%!
//降序排序
public <k, v="" extends="" comparable<?="" super="">> map<k, v=""> sortbyvaluedescending(map<k, v=""> map)
 {
  list<map.entry<k, v="">> list = new linkedlist<map.entry<k, v="">>(map.entryset());
  collections.sort(list, new comparator<map.entry<k, v="">>()
  {
   
   public int compare(map.entry<k, v=""> o1, map.entry<k, v=""> o2)
   {
    int compare = (o1.getvalue()).compareto(o2.getvalue());
    return -compare;
   }
  });
 
  map<k, v=""> result = new linkedhashmap<k, v="">();
  for (map.entry<k, v=""> entry : list) {
   result.put(entry.getkey(), entry.getvalue());
  }
  return result;
 }
%>
<%
if(application.getattribute("scorelist")==null){
	out.print("<h3>没有成绩</h3>
");
}
else{ //遍历显示所有成绩(map遍历)
	map<string, integer=""> score_list= (map<string, integer="">)application.getattribute("scorelist");
	score_list=sortbyvaluedescending(score_list);
	set s=score_list.keyset();
	iterator it=s.iterator();
	while(it.hasnext()){
		string username=(string)it.next();
		int score=score_list.get(username);
		out.print("<h3>"+username+":"+score+"</h3>
");
	}	
}
%></string,></string,></k,></k,></k,></k,></k,></k,></k,></k,></k,></k,></k,>

 6、完整流程

到此这篇关于使用jsp技术实现一个简单的在线测试系统的实例详解的文章就介绍到这了。

相关文章