基于javaweb+mysql的jsp+servlet在线考试管理系统(java+jsp+jquery+servlet+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的JSP+Servlet在线考试管理系统(java+jsp+jquery+servlet+mysql)
项目介绍
本项目包含管理员与学生两个角色; 管理员角色包含以下功能: 登录页面,管理员首页,考生信息管理,成绩管理,考生录入,题库管理,题目录入,试卷管理等功能。
学生角色包含以下功能: 学生登录,学生主页,开始考试,查看成绩等功能。
PS:在添加学生或者添加试题的时候,可以上传文件来实现,文件的模板在管理试题和管理学生的时候,点击下载就有了。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本; 6.是否Maven项目:否;
技术栈
- 后端:Servlet 2. 前端:JSP+jQuery
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/ 登录
request.setAttribute("per", per);
String ID = request.getParameter("ID");
String name = request.getParameter("name");
String CLASS = request.getParameter("class");
Float score_sing = Float.valueOf(request.getParameter("score_sing"));
Float score_muti = Float.valueOf(request.getParameter("score_muti"));
Float score_jud = Float.valueOf(request.getParameter("score_jud"));
Float score_fill = Float.valueOf(request.getParameter("score_fill"));
Float score_ess = Float.valueOf(request.getParameter("score_ess"));
// Float score=Float.valueOf(request.getParameter("score"));
Float score = score_sing + score_muti + score_jud + score_fill + score_ess;
String grade = "";
int f = Math.round(score);
int g = ((f < 0) == true ? 1 : 0) + ((f < 60) == true ? 1 : 0) + ((f < 75) == true ? 1 : 0)
+ ((f < 85) == true ? 1 : 0) + ((f < 95) == true ? 1 : 0);
switch (g) {
case 0:
grade = "优秀";
break;
case 1:
grade = "良好";
break;
case 2:
grade = "中等";
break;
case 3:
grade = "及格";
break;
case 4:
grade = "不及格";
break;
case 5:
grade = "缺考";
break;
default:
break;
}
try {
DatabassAccessObject db = new DatabassAccessObject();
// ResultSet rs=db.query("select * from student where id = ?", ID);
// if (rs.next()) {
// db.modify(sql, args)
// }
Boolean boolean1 = db.modify("UPDATE student SET name = ? , class = ? , score = ? WHERE ID = ? ", name,
CLASS, score, ID);
if (boolean1) {
db.modify(
"UPDATE score set score=?, score_sing=?, score_muti=?, score_jud=?, score_fill=?, score_ess=?, grade=? where ID=? ",
score, score_sing, score_muti, score_jud, score_fill, score_ess, grade, ID);
}
PrintWriter out = response.getWriter();
/**
* 接下来要把图片从【tomcat发布目录】拷贝到【当前项目目录】 原因:发布目录在tomcat重启会重新发布,上传的图片需要迁移到永久保留的位置
* 目的:把图片拷贝到项目目录,上传的图片得以保留,可以任意次数发布
*/
try {// try能保证流被正确关闭
Path sorcePath = Paths.get(savePath + "/" + fileName1); // 图片的原始路径(tomcat的发布目录下)
// 图片的的目标路径(当前项目目录)
Path targetPath = Paths.get("E:\\WorkSpace_All\\cli_workspace\\" + request.getContextPath()
+ "/WebRoot/images/" + fileName1);
Files.copy(sorcePath, targetPath, StandardCopyOption.REPLACE_EXISTING); // 复制文件,并替换已存在的文件
} catch (Exception e) {
}
}
}
try {
DatabassAccessObject db;
switch (mode) {
case 1:
List<QuestionBean> listExcel = QuestionExcelService.getAllByExcel(excelSorcePath);
db = new DatabassAccessObject();
for (QuestionBean queBean : listExcel) {
if (!QuestionExcelService.isExist(queBean.getQ_id())) {
db.insert("insert into question values (?,?,?,?,?,?,?) ; ", queBean.getQ_id(),
queBean.getQ_type(), queBean.getQ_title(), queBean.getQ_select(), queBean.getQ_score(),
queBean.getQ_key(), queBean.getQ_img());
} else {
db.modify(
"update question set type = ? , title = ? , `select` = ? , score = ? , `key` = ? , img = ? where number = ? ;",
queBean.getQ_type(), queBean.getQ_title(), queBean.getQ_select(), queBean.getQ_score(),
queBean.getQ_key(), queBean.getQ_img(), queBean.getQ_id());
}
}
System.out.println("数据导入成功");
PrintWriter out = response.getWriter();
out.println("<script language=javascript>alert('数据导入成功');window.location='" + request.getContextPath()
+ "/ShowQuePage';</script>");
break;
case 2:
List<StudentInfoBean> stuListExcel = StuInfoExcelService.getAllByExcel(excelSorcePath);
db = new DatabassAccessObject();
for (StudentInfoBean stuBean : stuListExcel) {
if (!StuInfoExcelService.isExist(stuBean.getID())) {
db.insert("INSERT INTO student (ID,password,name,class,score) VALUES (?,?,?,?,?) ; ",
stuBean.getID(), stuBean.getPassword(), stuBean.getName(), stuBean.getCLASS(),
stuBean.getScore());
} else {
db.modify("UPDATE student SET password = ? , name = ? , class = ? , score = ? WHERE ID = ? ;",
stuBean.getPassword(), stuBean.getName(), stuBean.getCLASS(), stuBean.getScore(),
/**
* 负责处理题库表中题目的增删改查
*/
@WebServlet("/HandleQue")
@MultipartConfig //支持文件上传
public class QuestionModifyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); // 编码处理
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String executeMode = request.getParameter("executeMode");
int mode = Integer.parseInt(executeMode); // 转化整形
System.out.println(mode);
String number=request.getParameter("number");
String type="";
String title="";
String score="";
String key="";
String select = "";
String fileName ="";
if (mode!=2) { //如果不用执行删除,就执行
type=request.getParameter("type");
title=request.getParameter("title");
request.setCharacterEncoding("UTF-8"); // 编码处理
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String executeMode = request.getParameter("executeMode");
int mode = Integer.parseInt(executeMode); // 转化整形
System.out.println(mode);
int cpage = 0;
int per = 10;
if (request.getParameter("cpage") != null) {
cpage = Integer.parseInt(request.getParameter("cpage"));
}
request.setAttribute("cpage", cpage);
if (request.getParameter("per") != null) {
per = Integer.parseInt(request.getParameter("per"));
}
request.setAttribute("per", per);
String ID=request.getParameter("ID");
Connection con;
PreparedStatement sql = null;
float score=0.0f;
String name=request.getParameter("name");
String Class=request.getParameter("class");
String temp=request.getParameter("score");
if(temp!=null)
score = Float.parseFloat(temp);
String password=request.getParameter("password");
try {
DatabassAccessObject db = new DatabassAccessObject();
con = db.con;
String condition = "";
switch (mode) {
case 0: //模式0,增加一条数据
condition = "INSERT INTO student (ID,password,name,class,score) VALUES (?,?,?,?,?);";
sql = con.prepareStatement(condition);
sql.setString(1, ID);
sql.setString(2, password);
sql.setString(3, name);
sql.setString(4, Class);
sql.setFloat(5, score);
default:
break;
}
}
listALL.addAll(randomQue(list1, rs,num1));
listALL.addAll(randomQue(list2, rs,num2));
listALL.addAll(randomQue(list3, rs,num3));
listALL.addAll(randomQue(list4, rs,num4));
listALL.addAll(randomQue(list5, rs,num5));
tihao=0; //题号从0开始
HttpSession session = request.getSession();
session.setAttribute("examTime", examTime);
session.setAttribute("ques", listALL); //把试卷数组保存到Session对象
//重定向到试卷页面,供考生作答
response.sendRedirect(request.getContextPath()+"/student/student_exam_paper.jsp");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 负责每种题型、指定数量的随机抽题
* @param list 题目链表(存储了一类题型的行号)
* @param rs 数据表结果集
* @param count 抽取指定的题目数量
* @return 返回一个(存储了count条指定类型的题目)数组
*/
public ArrayList<QuestionBean> randomQue(LinkedList<Integer> list,ResultSet rs,int count) {
int m = -1;
int index = -1;
ArrayList<QuestionBean> listA = new ArrayList<QuestionBean>();
while (list.size() > 0&&count>0) {
count--;
m = (int) (Math.random() * list.size());
index = list.get(m);
System.out.println(index);
list.remove(m);
tihao++;
try {
request.setAttribute("per", per);
try {
// 数据库的查询结果有多少条记录
DatabassAccessObject db=new DatabassAccessObject();
ResultSet rsTotal = db
.query("select count(*) as total from student");
if (rsTotal.next()) {
// 求出总页数压到request容器传递给前台页面。
request.setAttribute("totalPage", 1
+ (rsTotal.getInt("total") - 1) / per);
}
// 新建一个动态数组用来存放查询结果
ArrayList<StudentInfoBean> stuBeanAllList = new ArrayList<StudentInfoBean>();
ResultSet rs=null;
String s_ID=request.getParameter("s_ID");
if (s_ID!=null) {
rs=db.query("select * from student where ID LIKE '%"+s_ID+"%' ;");
}else {
rs = db.query("select * from student order by ID ;");
}
int total = 0;
while (rs.next()) {
StudentInfoBean stuBean = new StudentInfoBean();
stuBean.setID(rs.getString("Id"));
stuBean.setPassword(rs.getString("password"));
stuBean.setName(rs.getString("Name"));
stuBean.setCLASS(rs.getString("class"));
stuBean.setScore(rs.getFloat("score"));
stuBeanAllList.add(stuBean);
total++;
}
// 再通过根据cpage与per求出要推回给前台显示的数组
ArrayList<StudentInfoBean> stuTableList = new ArrayList<StudentInfoBean>();
for (int i = cpage * per; i < cpage * per + per && i < total; i++) {
stuTableList.add(stuBeanAllList.get(i));
}
String temp=request.getParameter("modify_id");
System.out.println(temp);
request.setAttribute("modify_id", temp);
request.setAttribute("total", total);
request.setAttribute("stuTableList", stuTableList);
request.getRequestDispatcher("/teacher/teacher_stu_manage.jsp").forward(request,
response);
} catch (Exception e) {
e.printStackTrace();
}
String condition = "";
switch (mode) {
case 0: //模式0,增加一条数据
condition = "INSERT INTO student (ID,password,name,class,score) VALUES (?,?,?,?,?);";
sql = con.prepareStatement(condition);
sql.setString(1, ID);
sql.setString(2, password);
sql.setString(3, name);
sql.setString(4, Class);
sql.setFloat(5, score);
sql.executeUpdate();
break;
case 1: //模式1:更新一条数据
condition = "UPDATE student SET password = ? , name = ? , class = ? , score = ? WHERE ID = ? ;";
sql = con.prepareStatement(condition);
sql.setString(5, ID);
sql.setString(1, password);
sql.setString(2, name);
sql.setString(3, Class);
sql.setFloat(4, score);
sql.executeUpdate();
break;
case 2: //模式2:删除一条数据
condition = "DELETE FROM student WHERE ID = ? ;";
sql = con.prepareStatement(condition);
sql.setString(1, ID);
sql.executeUpdate();
break;
default: //错误的模式选择
fail(request, response, "executeMode模式错误,仅有0/1/2 3种情况");//报错
break;
}
con.close();//关闭数据库连接
} catch (Exception e) {}
PrintWriter out = response.getWriter();
// request.getRequestDispatcher("ShowStuPage").forward(request,
// response);
}
private void fail(HttpServletRequest request, HttpServletResponse response, String backNews) {
response.setContentType("text/html;charset=UTF-8");
try {
PrintWriter out = response.getWriter();
out.println("<script language=javascript>alert('" + backNews + "');window.location='"
+ request.getContextPath() + "ShowStuPage';</script>");
} catch (IOException exp) {
}
}
}
request.setCharacterEncoding("UTF-8"); // 编码处理
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String executeMode = request.getParameter("executeMode");
int mode = Integer.parseInt(executeMode); // 转化整形
System.out.println(mode);
int cpage = 0;
int per = 10;
if (request.getParameter("cpage") != null) {
cpage = Integer.parseInt(request.getParameter("cpage"));
}
request.setAttribute("cpage", cpage);
if (request.getParameter("per") != null) {
per = Integer.parseInt(request.getParameter("per"));
}
request.setAttribute("per", per);
String ID=request.getParameter("ID");
Connection con;
PreparedStatement sql = null;
float score=0.0f;
String name=request.getParameter("name");
String Class=request.getParameter("class");
String temp=request.getParameter("score");
if(temp!=null)
score = Float.parseFloat(temp);
String password=request.getParameter("password");
try {
DatabassAccessObject db = new DatabassAccessObject();
con = db.con;
String condition = "";
switch (mode) {
case 0: //模式0,增加一条数据
condition = "INSERT INTO student (ID,password,name,class,score) VALUES (?,?,?,?,?);";
sql = con.prepareStatement(condition);
sql.setString(1, ID);
sql.setString(2, password);
sql.setString(3, name);
sql.setString(4, Class);
sql.setFloat(5, score);
sql.executeUpdate();
break;
case 1: //模式1:更新一条数据
condition = "UPDATE student SET password = ? , name = ? , class = ? , score = ? WHERE ID = ? ;";
sql = con.prepareStatement(condition);
sql.setString(5, ID);
sql.setString(1, password);
sql.setString(2, name);
sql.setString(3, Class);
sql.setFloat(4, score);
HttpSession session=request.getSession();
LoginBean loginBean=(LoginBean) session.getAttribute("loginBean");
String ID = loginBean.getID();
String role = loginBean.getRole();
String newPassword = request.getParameter("newPassword");
String newPasswordAgain = request.getParameter("newPasswordAgain");
try {
if (newPassword.equals(newPasswordAgain)) { //判断两次输入的密码是否一致
DatabassAccessObject db = new DatabassAccessObject();
db.modify("update "+role+" set password=? where ID=?", newPassword, ID);
String msg="密码修改成功!请重新登录";
PrintWriter out = response.getWriter();
out.println("<script language=javascript>top.location='" + request.getContextPath()
+ "/login.jsp';alert('" + msg + "')</script>");
} else {
String msg="两次输入的密码不一致!请重新确认。";
PrintWriter out = response.getWriter();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
HttpSession session=request.getSession();
LoginBean loginBean=(LoginBean) session.getAttribute("loginBean");
String ID = loginBean.getID();
String role = loginBean.getRole();
String newPassword = request.getParameter("newPassword");
String newPasswordAgain = request.getParameter("newPasswordAgain");
try {
if (newPassword.equals(newPasswordAgain)) { //判断两次输入的密码是否一致
DatabassAccessObject db = new DatabassAccessObject();
db.modify("update "+role+" set password=? where ID=?", newPassword, ID);
String msg="密码修改成功!请重新登录";
PrintWriter out = response.getWriter();
out.println("<script language=javascript>top.location='" + request.getContextPath()
+ "/login.jsp';alert('" + msg + "')</script>");
} else {
String msg="两次输入的密码不一致!请重新确认。";
PrintWriter out = response.getWriter();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 该类负责修改考题数量和考试时间
*/
@WebServlet("/PaperQuantity")
public class PaperQuantityServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
}
}
}
@WebServlet("/ShowScorePage")
public class ScoreShowByPage extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException {
// 如果没有参数传递过来,初定每页显示10条记录,显示第一页。
// 然后把这两个参数压到request容器传到前台页面。request容器是前台页面收到即销毁的容器。
int cpage = 0;
int per = 10;
if (request.getParameter("cpage") != null) {
cpage = Integer.parseInt(request.getParameter("cpage"));
}
request.setAttribute("cpage", cpage);
if (request.getParameter("per") != null) {
per = Integer.parseInt(request.getParameter("per"));
}
request.setAttribute("per", per);
try {
// 数据库的查询结果有多少条记录
DatabassAccessObject db=new DatabassAccessObject();
ResultSet rsTotal = db
.query("select count(*) as total from student");
if (rsTotal.next()) {
// 求出总页数压到request容器传递给前台页面。
/**
* 该类实现修改学生信息表功能
*/
@WebServlet("/HandleStuInfo")
public class StudentModifyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
Class.forName("com.mysql.jdbc.Driver"); // 数据库驱动
} catch (Exception e) {
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); // 编码处理
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String executeMode = request.getParameter("executeMode");
int mode = Integer.parseInt(executeMode); // 转化整形
System.out.println(mode);
int cpage = 0;
int per = 10;
if (request.getParameter("cpage") != null) {
cpage = Integer.parseInt(request.getParameter("cpage"));
}
request.setAttribute("cpage", cpage);
if (request.getParameter("per") != null) {
per = Integer.parseInt(request.getParameter("per"));
}
HttpSession session = request.getSession(true);
LoginBean loginBean = new LoginBean();
try {
rs.first();
loginBean.setID(rs.getString("ID"));
loginBean.setPassword(rs.getString("password"));
loginBean.setName(rs.getString("name"));
loginBean.setCLASS(rs.getString("class"));
loginBean.setRole(role);
if (role.equals("student")) {
loginBean.setScore(rs.getFloat("score"));
} else {
loginBean.setJob(rs.getString("job"));
}
} catch (SQLException e) {
e.printStackTrace();
}
session.setAttribute("loginBean", loginBean);
}
/**
* 如果账号密码匹配失败,就重定向回登录页面
* @param request 请求对象
* @param response 响应对象
* @param ID 用户ID
* @param backNews 登录失败的原因
*/
private void fail(HttpServletRequest request, HttpServletResponse response, String ID, String backNews) {
response.setContentType("text/html;charset=UTF-8");
try {
PrintWriter out = response.getWriter();
out.println("<script language=javascript>alert('" + backNews + "');window.location='"
+ request.getContextPath() + "/login.jsp';</script>");
} catch (IOException exp) {
}
}
}
* 该类是自动抽提组卷类,实现功能:
* 1.每种题型随机抽取指定条数,例:选择题抽5条;
* 2.被抽中的题目信息传入QuestionBean储存;
* 3.把Bean存入动态数组ArrayList组成试卷数组;
* 4.把试卷数组存入Session对象,供考生作答。
*/
@WebServlet("/HandlePaper")
public class QuestionExtractServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
int tihao = 0;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ArrayList<QuestionBean> listALL = new ArrayList<QuestionBean>();
//抽题数量
//单选题抽5道,多选题抽4道,判断题抽5道,填空题抽5道,简答题抽3道
int num1=5,num2=4,num3=5,num4=5,num5=3;
int examTime=30;
try {
DatabassAccessObject db = new DatabassAccessObject();
ResultSet rs=db.query("select * from paper");
num1=Integer.valueOf(rs.getString("qty_sing"));
num2=Integer.valueOf(rs.getString("qty_muti"));
num3=Integer.valueOf(rs.getString("qty_jud"));
num4=Integer.valueOf(rs.getString("qty_fill"));
num5=Integer.valueOf(rs.getString("qty_ess"));
examTime=Integer.valueOf(rs.getString("time"));
} catch (Exception e) {
}
try {
DatabassAccessObject db = new DatabassAccessObject();
ResultSet rs = db.query("SELECT * FROM question");
//区分每种题型,将所有相同题型的行号存入双向循环链表,用于随机取题目
LinkedList<Integer> list1 = new LinkedList<Integer>();
LinkedList<Integer> list2 = new LinkedList<Integer>();
throws ServletException, IOException {
// 如果没有参数传递过来,初定每页显示10条记录,显示第一页。
// 然后把这两个参数压到request容器传到前台页面。request容器是前台页面收到即销毁的容器。
int cpage = 0;
int per = 10;
if (request.getParameter("cpage") != null) {
cpage = Integer.parseInt(request.getParameter("cpage"));
}
request.setAttribute("cpage", cpage);
if (request.getParameter("per") != null) {
per = Integer.parseInt(request.getParameter("per"));
}
request.setAttribute("per", per);
// 之后进行数据库的查询
try {
// 先数据库的查询结果有多少条记录
DatabassAccessObject db = new DatabassAccessObject();
ResultSet rsTotal = db.query("select count(*) as total from question");
if (rsTotal.next()) {
// 求出总页数压到request容器传递给前台页面。
request.setAttribute("totalPage", 1 + (rsTotal.getInt("total") - 1) / per);
}
// 新建一个动态数组用来存放查询结果
ArrayList<QuestionBean> queBeanAllList = new ArrayList<QuestionBean>();
ResultSet rs=null;
String q_title=request.getParameter("q_title");
String q_type="";
q_type=request.getParameter("q_type");
if (q_title!=null) {
rs=db.query("select * from question where title LIKE '%"+q_title+"%' ;");
}else if(q_type!=null&&q_type.length()>0){
rs=db.query("select * from question where type='"+q_type+"' ;");
}
else {
rs = db.query("select\r\n" +
" *\r\n" +
"from\r\n" +
" question\r\n" +
"order by\r\n" +
" case \r\n" +
" when type='单选题' then 1\r\n" +
" when type='多选题' then 2\r\n" +
" when type='判断题' then 3\r\n" +
" when type='填空题' then 4\r\n" +
" when type='简答题' then 5\r\n" +
" end");
sql.setString(3, name);
sql.setString(4, Class);
sql.setFloat(5, score);
sql.executeUpdate();
break;
case 1: //模式1:更新一条数据
condition = "UPDATE student SET password = ? , name = ? , class = ? , score = ? WHERE ID = ? ;";
sql = con.prepareStatement(condition);
sql.setString(5, ID);
sql.setString(1, password);
sql.setString(2, name);
sql.setString(3, Class);
sql.setFloat(4, score);
sql.executeUpdate();
break;
case 2: //模式2:删除一条数据
condition = "DELETE FROM student WHERE ID = ? ;";
sql = con.prepareStatement(condition);
sql.setString(1, ID);
sql.executeUpdate();
break;
default: //错误的模式选择
fail(request, response, "executeMode模式错误,仅有0/1/2 3种情况");//报错
break;
}
con.close();//关闭数据库连接
} catch (Exception e) {}
PrintWriter out = response.getWriter();
// request.getRequestDispatcher("ShowStuPage").forward(request,
// response);
}
private void fail(HttpServletRequest request, HttpServletResponse response, String backNews) {
response.setContentType("text/html;charset=UTF-8");
try {
PrintWriter out = response.getWriter();
out.println("<script language=javascript>alert('" + backNews + "');window.location='"
+ request.getContextPath() + "ShowStuPage';</script>");
} catch (IOException exp) {
db.insert("update student set score = ? where ID = ? ", score, ID);
ResultSet rs = db.query("select * from score where id = ?", ID);
if (!rs.next()) {
db.insert("insert into score values(?,?,?,?,?,?,?,?)", ID, score, score_sing, score_muti, score_jud,
score_fill, score_ess,grade);
} else {
db.modify(
"update score set score = ? , score_sing = ? , score_muti= ? , score_jud = ? , score_fill = ? , score_ess = ?,grade = ? where ID = ? ;",
score, score_sing, score_muti, score_jud, score_fill, score_ess,grade, ID);
}
rs = db.query("select * from student where id = ?", ID);
rs.first();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(score);
response.setContentType("text/html;charset=utf-8");
//如果考生交了白卷,且作答时间有剩余5分钟以上,则建议考生继续作答,重定向回试卷页面;
//否则,视为交卷成功,重定向回学生信息页。
PrintWriter out = response.getWriter();
long curTime = System.currentTimeMillis() / 1000;
long endTime = (long) session.getAttribute("endTime");
if (score == 0 && endTime - curTime >= 300) {
out.println("<script language=javascript>if(confirm('时间尚有剩余,请认真作答')){window.location='" + request.getContextPath()
+ "/student/student_exam_paper.jsp';}</script>");
out.println("<script language=javascript>window.location='" + request.getContextPath()
+ "/student/student.jsp';alert('试卷已经提交,可以查阅成绩单');</script>");
LoginBean loginBean = (LoginBean) session.getAttribute("loginBean");
loginBean.setScore(score);
} else {
LoginBean loginBean = (LoginBean) session.getAttribute("loginBean");
loginBean.setScore(score);
session.removeAttribute("examTime");
session.removeAttribute("endTime");
out.println("<script language=javascript>window.location='" + request.getContextPath()
+ "/student/student.jsp';alert('试卷已经提交,可以查阅成绩单');</script>");
}
}
}