我们通过一个应用内置对象的例子来将之前讲过的进行一个深入理解
关于内置对象的知识可以看这里
https://mp.csdn.net/postedit/84037358
主要功能就是通过输入内置的账号名和密码判断是否可以登陆,如果可以则进行做题并且提交评分,还可以查看分数
先是一个index.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:include page="header.jsp"></jsp:include>
<center>
<form action="check.jsp" method="get">
用户名<input type="text" name="username" />
<br>
密码<input type="password" name="psd" />
<br><br>
<button type="submit">登录</button>
<button type="reset">重填</button>
</form>
</center>
<jsp:include page="footer.jsp"></jsp:include>
</body>
</html>
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<center>
<h2>在线测试系统</h2>
<p>
<a href="index.jsp">登录</a>
|
<a href="test.jsp">在线测试</a>
|
<a href="scorelist.jsp">成绩榜</a>
</p>
</center>
footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!int pageCount = 0;%>
<% pageCount++; %>
<center>
<p>Copyright ? 2018 | 访问次数:<%=pageCount%></p>
</center>
check.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%!
Map<String,String> user_list=new HashMap<String,String>();
%>
<%
user_list.put("ss", "888");
user_list.put("qq", "222");
user_list.put("yy", "666");
%>
<%!
boolean check(String username,String psd){
if(user_list.containsKey(username))
if(user_list.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(" <a href='test.jsp'>开始测试</a>");
}
else{
out.print("登录失败,3秒之后重新登录");
response.setHeader("refresh", "3;url='index.jsp'");
}
%>
</body>
</html>
test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String username=(String)session.getAttribute("username");
if(username==null){
out.print("你还没有登录,3秒钟之后重新登录");
response.setHeader("refresh", "3;url='index.jsp'");
}
else{ //登录之后才能做题
%>
考生:<%=username %>
<h3>在线测试题</h3>
<form action="submit.jsp" onsubmit="return confirm('确定提交吗?')">
第1题:湖北省会是
<input type="text" name="q1" />
<br><br>
第2题:宋朝开国皇帝是
<br>
<input type="radio" value="赵匡胤" name="q2">
赵匡胤
<input type="radio" value="朱元璋" name="q2">
朱元璋
<input type="radio" value="李渊" name="q2">
李渊
<br><br>
第3题:四大名著有
<br>
<input type="checkbox" value="红楼梦" name="q3">
红楼梦
<input type="checkbox" value="水浒传" name="q3">
水浒传
<input type="checkbox" value="Java从入门到放弃" name="q3">
Java从入门到放弃
<br><br>
<button type="submit">提交</button>
</form>
<%}%>
</body>
</html>
submit.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
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>");
response.sendRedirect("logout.jsp");
%>
<%!
Map<String, Integer> score_list = new HashMap<String, Integer>(); //存放用户名+成绩
%>
<% score_list.put((String) session.getAttribute("username"), score);
application.setAttribute("score_list", score_list);%>
</body>
</html>
logout.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
session.invalidate() ; //注销 session
response.sendRedirect("index.jsp");
%>
</body>
</html>
scorelist.jsp
<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>成绩榜</h2>
<%!
//降序排序
public <K, V extends Comparable<? super V>> 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("score_list")==null){
out.print("<h3>没有成绩</h3>");
}
else{ //遍历显示所有成绩(Map遍历)
Map<String, Integer> score_list= (Map<String, Integer>)application.getAttribute("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>");
}
}
%>
</body>
</html>
这个例子用的只是单纯的jsp页面实现,所以用户登陆在check页面写死了三个用户的信息。