软件开发中经常会用的三层架构MVC:

VO层

package vo;public class Student {private String id;private String stuName;private int score;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}public Student(String id, String stuName, int score) {super();this.id = id;this.stuName = stuName;this.score = score;}public Student() {super();}
}

由于没把分数放到数据库里,所​​以多建了一层结构,也可以把分数存到数据库里。建立相应的获取和设置方法及构造方法

所用的是MySQL的的数据库

建立tb_exam表

建立tb_stu表

DAO层

package dao;import java.sql.*;public class BaseDao {private static final String driver = "com.mysql.jdbc.Driver";private static final String url = "jdbc:mysql://localhost:3306/javawebdb?serverTimezone=GMT%2B8";private static final String user = "root";private static final String pwd = "123456";Connection conn = null;// 建立与数据库的连接public Connection getConnection() {try {Class.forName(driver);conn = DriverManager.getConnection(url, user, pwd);} catch (Exception e) {e.printStackTrace();}return conn;}public void close(Connection conn, Statement st, ResultSet rst) {try {if (rst != null) {rst.close();}if (st != null) {st.close();}if (conn != null) {conn.close();}} catch (Exception e) {e.printStackTrace();}}public void close(Connection conn, Statement st) {this.close(conn, st, null);}
}

login.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>登陆界面</title>
</head>
<body><form action="LoginServlet" method="post">学生证号:<input type="text" name="id" /><br />密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password"name="pwd" /><br /> <input type="checkbox" name="autoLogin"value="y" />自动登录<br /> <input type="submit" value="登录" /> <ahref="register.jsp"><input type="button" value="注册" /></a> <ahref="returnPwd.jsp"><input type="button" value="忘记密码" /></a></form></body>
</html>

登录过程中可能会出现错误

error.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>学生证号或密码错误,请重新登录或注册<br><a href="register.jsp">注册</a><br><br><a href="login.jsp">重新登录</a><br>
</body>
</html>

register.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>注册用户</title>
</head>
<body>
<body><form action="RegisterServlet" method="post" onsubmit="return validate()">学生证号:<input type="text" name="id"> <br> <br>姓名:<inputtype="text" name="name"><br> <br> 密码:<inputtype="password" name="pwd"><br> <br> 密码确定:<inputtype="password" name="cpwd"><br> <br> 密码提问:<selectname="question"><option>你的父亲叫什么名字</option><option>你的母亲叫什么名字</option></select>(用于找回密码) <br> <br>问题答案:<input type="text" name="answer"><br><br> <input type="submit" name="submit" value="提交"> <inputtype="reset" name="reset"></form>
</body>
</body></html>

returnPwd.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>找回密码界面</title>
</head>
<body><form action="ReturnPwdSvt" method="post">输入学生证号:<input type="text" name="id"> <br> <br> 选择提问:<selectname="question"><option>你的父亲叫什么名字</option><option>你的母亲叫什么名字</option></select> <br> <br>输入答案:<input type="text" name="answer"><br><br> <input type="submit" name="submit" value="提交"> <inputtype="reset" name="reset"></form>
</body>
</html>

success.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>找回密码成功界面</title>
</head>
<body>恭喜你,查找密码成功<br><%="学生证号:" + session.getAttribute("id")%><br /><%="你的密码为:" + session.getAttribute("pwd")%><br /><a href="login.jsp">返回登录</a>
</body>
</html>

exam.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>考试界面</title>
</head>
<body onload="examTime()"><div><span>满分100分</span>&nbsp;&nbsp;&nbsp;&nbsp;<span>单选题40分</span>&nbsp;&nbsp;&nbsp;&nbsp;<span>多选题60分</span><br /><span>考试时间:&nbsp;&nbsp;2分钟</span>&nbsp;&nbsp;&nbsp;&nbsp;<span>计时:</span><spanid="time" style="color: red"></span><form action="ExamServlet" method="post" name="exam"><p>一. 单选题(总分40分,答错不得分)</p>1.zzzzz<br /> <input type="radio" name="one" value="A" />A z <br /><input type="radio" name="one" value="B" />B x <br /> <inputtype="radio" name="one" value="C" />C c <br /> <input type="radio"name="one" value="D" />D v <br /> 2.网络营销的发展历经几个阶段?<br /> <inputtype="radio" name="two" value="A" />A 2个 <br /> <inputtype="radio" name="two" value="B" />B 3个 <br /> <inputtype="radio" name="two" value="C" />C 5个 <br /> <inputtype="radio" name="two" value="D" />D 6个 <br /><p>二. 多选题(总分60分,答错不得分)</p>1.Internet提供的基本服务有那些?<br /> <input type="checkbox" name="three"value="A" />A E-mail <br /> <input type="checkbox" name="three"value="B" />B FTP <br /> <input type="checkbox" name="three"value="C" />C Telnet <br /> <input type="checkbox" name="three"value="D" />D WWW <br /><p><input type="submit" value="交卷" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<aid="a" href="login.jsp">退出当前系统</a></p></form></div>
</body>
<script>var time = 2 * 60;function examTime() {//得到class为time的span标签var spanTime = document.getElementById("time");--time;//获取小时var hour = parseInt(time / 3600);//获取分钟var min = parseInt(time % 3600 / 60);//获取秒var second = time - hour * 3600 - min * 60;//将这个标签设置为timespanTime.innerHTML = min + "分钟" + second + "秒";//判断时间到了就提交if (time == 0) {alert("考试结束")document.exam.submit();}setTimeout("examTime()", 1000);};
</script>
</html>

show.jsp页面

<%@page import="vo.Student"%>
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>显示分数界面</title>
</head>
<body><%Student student = (Student) session.getAttribute("student");%>学生编号:<%=student.getId()%><br /> 姓名:<%=student.getStuName()%><br />总分:<%=student.getScore()%></body>
</html>

建立相应的业务逻辑

LoginServlet

package servlet;import java.io.IOException;
import java.sql.*;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import dao.BaseDao;@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;public LoginServlet() {super();}protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置编码格式req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");// 获取sessionHttpSession session = req.getSession();// 得到学生注册证号String id = req.getParameter("id");// 得到学生注册密码String pwd = req.getParameter("pwd");// 判断是否勾选自动登录String flag = req.getParameter("autologin");if ("y".equals(flag)) {// 创建两个Cookie对象Cookie nameCookie = new Cookie("username", id);// 设置Cookie的有效期为3天nameCookie.setMaxAge(60 * 60 * 24 * 3);Cookie pwdCookie = new Cookie("password", pwd);pwdCookie.setMaxAge(60 * 60 * 24 * 3);// 保存到Cookieresp.addCookie(nameCookie);resp.addCookie(pwdCookie);req.getRequestDispatcher("exam.jsp").forward(req, resp);}// 先查询数据库,看是否存在BaseDao dao = new BaseDao();Connection conn = dao.getConnection();String sql = " select*from tb_stu where stuId=? and pwd=? ";try {PreparedStatement pst = conn.prepareStatement(sql);pst.setString(1, id);pst.setString(2, pwd);ResultSet rst = pst.executeQuery();if (rst.next()) {// 请求转发至考试页面String stuName = rst.getString("stuName");session.setAttribute("id", id);session.setAttribute("stuName", stuName);req.getRequestDispatcher("exam.jsp").forward(req, resp);} else {// 如果没有,那么重定向到错误界面,需要注册resp.sendRedirect("error.jsp");}dao.close(conn, pst, rst);} catch (SQLException e) {e.printStackTrace();}}
}

RegisterServlet

package servlet;import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import dao.BaseDao;@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {private static final long serialVersionUID = 1L;public RegisterServlet() {super();}protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置编码格式req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");// 获取sessionHttpSession session = req.getSession();// 得到学生注册的基本信息// 得到学生注册证号String id = req.getParameter("id");// 得到学生注册姓名String stuName = req.getParameter("name");// 得到学生注册密码String pwd = req.getParameter("pwd");// 得到学生注册确认密码String cpwd = req.getParameter("cpwd");// 得到学生注册密码提问的问题String question = req.getParameter("question");// 得到学生注册的问题答案String result = req.getParameter("answer");// 向数据库内插入该用户try {BaseDao dao = new BaseDao();Connection conn = dao.getConnection();String sql = " insert into tb_stu values(default,?,?,?,?,?,?) ";PreparedStatement pst = conn.prepareStatement(sql);pst.setString(1, id);pst.setString(2, stuName);pst.setString(3, pwd);pst.setString(4, cpwd);pst.setString(5, question);pst.setString(6, result);// 执行更新操作int row = pst.executeUpdate();if (row > 0) { // 表示以及在数据库中插入了该用户session.setAttribute("id", id);session.setAttribute("pwd", pwd);// 注册成功重定向到login.jsp中resp.sendRedirect("login.jsp");} else {// 注册失败重定向到error.jsp中resp.sendRedirect("error.jsp");}dao.close(conn, pst, null);} catch (Exception e) {e.printStackTrace();}}
}

ReturnPwdSvt

package servlet;import java.io.IOException;
import java.sql.*;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import dao.BaseDao;@WebServlet("/ReturnPwdSvt")
public class ReturnPwdSvt extends HttpServlet {private static final long serialVersionUID = 1L;public ReturnPwdSvt() {super();}protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置编码格式req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");// 获取sessionHttpSession session = req.getSession();// 得到输入的学生证号String id = req.getParameter("id");// 得到选择提问的信息String question = req.getParameter("question");// 得到问题答案String answer = req.getParameter("answer");// 与数据库信息进行匹对try {BaseDao dao = new BaseDao();Connection conn = dao.getConnection();String sql = " select * from tb_stu where stuId=? and question=? and result=? ";PreparedStatement pst = conn.prepareStatement(sql);pst.setString(1, id);pst.setString(2, question);pst.setString(3, answer);ResultSet rst = pst.executeQuery();if (rst.next()) {// 找回密码成功session.setAttribute("id", id);session.setAttribute("pwd", rst.getString("pwd"));resp.sendRedirect("success.jsp");} else {// 找回密码失败重新找回密码resp.sendRedirect("returnPwd.jsp");}dao.close(conn, pst, rst);} catch (Exception e) {e.printStackTrace();}}
}

ExamServlet

package servlet;import java.io.IOException;
import java.sql.*;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import dao.BaseDao;
import vo.Student;@WebServlet("/ExamServlet")
public class ExamServlet extends HttpServlet {private static final long serialVersionUID = 1L;public ExamServlet() {super();}protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}int score = 0;protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置编码格式req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");// 获取sessionHttpSession session = req.getSession();// 获取学生信息String id = (String) session.getAttribute("id");String stuName = (String) session.getAttribute("stuName");System.out.println(id + ":" + stuName);// 测试是否取得学生信息// 查询该学生考试题目的勾选情况String one = req.getParameter("one");String two = req.getParameter("two");String[] three = req.getParameterValues("three");if (!one.equals("") && !two.equals("") && three.length > 0) {// 判断题目的勾选情况String threeT = "";for (String th : three) {threeT = threeT + th;System.out.println(threeT);}// 与数据库中正确答案进行比对Student student = new Student();try {BaseDao dao = new BaseDao();Connection conn = dao.getConnection();String sql1 = " select *from tb_exam where answer='one' and result=? ";String sql2 = " select *from tb_exam where answer='two' and result=? ";String sql3 = " select *from tb_exam where answer='three' and result=? ";// 判断第一题PreparedStatement pst = conn.prepareStatement(sql1);pst.setString(1, one);ResultSet rst = pst.executeQuery();if (rst.next()) {// 第一题答对了score = 20;student.setId(id);student.setStuName(stuName);student.setScore(score);} else {// 第一题答错了student.setId(id);student.setStuName(stuName);student.setScore(score);}// 判断第二题pst = conn.prepareStatement(sql2);pst.setString(1, two);rst = pst.executeQuery();if (rst.next()) {// 第二题答对了score = 20;student.setScore(student.getScore() + score);} else {// 第二题答错了student.setScore(student.getScore());}// 判断第三题pst = conn.prepareStatement(sql3);pst.setString(1, threeT);rst = pst.executeQuery();if (rst.next()) {// 第三题答对了score = 60;student.setScore(student.getScore() + score);} else {// 第三题答错了student.setScore(student.getScore());}session.setAttribute("student", student);// 将这个对象保存到session中,然后到显示分数的页面resp.sendRedirect("show.jsp");dao.close(conn, pst, rst);} catch (Exception e) {e.printStackTrace();}} else {resp.sendRedirect("show.jsp");}}
}

总结:我们始终要记住JSP的优点在于显示页面,Servlet的优点在于处理业务逻辑,servlet的的创建是根据页面是否需要处理业务逻辑来创建相应的servlet.

手把手教你做一个简单WEB系统———在线考试相关推荐

  1. java学生签到系统视频教程_手把手教你做一个Java web学生信息、选课、签到考勤、成绩管理系统附带完整源码及视频开发教程...

    四个阶段的Java web学生信息系统视频教程终于录制完成了,系统用到的知识点有:jsp+servlet+mysql+jquery+ajax,前端采用的是当下最流行的easyui管理框架,全部采用面向 ...

  2. python手机版做小游戏代码大全-Python大牛手把手教你做一个小游戏,萌新福利!...

    原标题:Python大牛手把手教你做一个小游戏,萌新福利! 引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规 ...

  3. 手把手教你做一个自己的chrome扩展程序

    手把手教你做一个自己的chrome扩展程序 [目录] first.效果 1.收藏夹修改 (1).鼠标移动到收藏夹上的动作效果 (2).收藏夹框 (3)百度搜索框功能 2.右上文字修改 3.背景图片修改 ...

  4. 手把手教你做一个Java贪吃蛇小游戏

    大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...

  5. Blender图解教程:手把手教你做一个马里奥金币 之 图片转法线贴图法(附模型下载)

    <Blender图解教程:手把手教你做一个马里奥金币 之 比较传统的方法>介绍了一种用Blender制作法线贴图的流程,本文介绍一种更加省事的方法. 步骤 效果图 概要 步骤 1. 建模 ...

  6. 手把手教你做一个物联网视频监控项目(三)流媒体方案实现

    往期文章 手把手教你做一个物联网视频监控项目(一) 介绍 手把手教你做一个物联网视频监控项目(二)MJPG-streamer方案实现 文章目录 前言 一.软硬件准备 二.流媒体方案的实现之FFmpeg ...

  7. 手机html5活体检测,手把手教你做实时活体检测系统

    随着深度卷积神经网络(CNN)的发展,人脸识别已经取得了近乎完美的识别性能,并已经应用于我们的日常生活中,如手机解锁,门禁,人脸支付等.然而,这些人脸识别系统容易受到各种方式的攻击,如打印攻击.视频回 ...

  8. 手把手教你做一个jsp+ssm+mysql实现的在线考试系统之在线考试系统源码+视频开发教程+参考论文+开题报告

    今天给大家演示的是一款由jsp+ssm框架(spring+springMVC+mybatis)+mysql实现的在线考试系统源码和开发教程,本系统配有完整的源码.45讲视频开发教程.数据库文件.项目素 ...

  9. 手把手教你做一个jsp servlet mysql实现的学生签到考勤请假管理系统附带视频开发教程和完整源码

    今天给大家演示的是一款由jsp+servlet+my色口数据库实现的学生请假签到考勤管理系统,采用了MVC的设计模式,结构层次非常清晰,此外系统还有完整的开发教程. 下面我们先来看看文档结构: 下面来 ...

最新文章

  1. PyTorch在NLP任务中使用预训练词向量
  2. Scala字符串输出、键盘输入和文件操作
  3. Bootstrap 手风琴搭配导航条实现常用菜单栏
  4. 模块修改-column_left.php
  5. SQL SERVER 常用日期计算
  6. 使用代码创建SAP Sales area
  7. linux手动安装unzip_centos7离线安装unzip和zip
  8. 若依将ehcache改为redis缓存详细整合步骤
  9. 基于相关系数的影像匹配_论文推送 | 基于最优匹配算法的像控点电子点之记制作研究...
  10. HTML网站去色代码
  11. matlab的hilbert变换的实现
  12. win7家庭版计算机桌面,Win7 home basic家庭普通版显示桌面图标的方法
  13. centos7下载php7.4
  14. 课时1 Excel简介与基本操作
  15. 事业单位资产管理系统解决方案:国有资产全生命周期管理监管体系
  16. Akka 指南 之「集群分片」
  17. PIE-engine 教程 ——提取黄河流域/山西省1980—2018年流域降水量并对比分析
  18. 微空间私人定向共享系统设计与实现-计算机毕业设计源码+LW文档
  19. python学习面向对象_Python小白必学的面向对象
  20. 【红帽rhcsa基础命令】

热门文章

  1. 图片压缩 Thumbnails
  2. 如何给小学生讲html,给小学生讲数学题,有什么好方法和好技巧?
  3. 安装urdf_tutorial
  4. spring web 知识点过一遍
  5. 如何对齐MathType公式和Word文字排版
  6. 台式计算机2017排行分析,最新台式电脑排行_2017联想台式电脑排行榜 联想台式电脑排行榜前10...
  7. 关于SSL安全套接层协议
  8. 树的三种遍历原理及实现
  9. 努比亚Z9 倪飞的诚意之作
  10. C++并发型模式#7: 读写锁 - shared_mutex