answer.jsp
上传用户:shjgzm
上传日期:2017-08-31
资源大小:2757k
文件大小:4k
源码类别:

Ajax

开发平台:

Java

  1. <%@ page contentType="text/html; charset=UTF-8"%>
  2. <%@ page language="java"%>
  3. <%@ page import="java.sql.*,ajax.db.DBUtils"%>
  4. <%@ page import="java.util.*,java.io.*,org.dom4j.*,org.dom4j.io.*"%>
  5. <%!
  6.     Map rightAnswerCache = new HashMap();   //用于缓存答案的Map
  7.     String marker = "^$$^";                 //答案分段标记
  8.     String RIGHT = "RIGHT";                 //正确变量
  9.     String WRONG = "WRONG";                 //错误变量
  10.     //获取正确答案
  11.     String getRightAnswer(String questionId) throws DocumentException {
  12.         //先从缓存答案的Map查找
  13.         String cacheAnswer = (String) rightAnswerCache.get(questionId);
  14.         if (cacheAnswer!=null) {
  15.             return cacheAnswer;
  16.         }
  17.         //缓存中没有则从数据库中读取
  18.         String question = null;
  19.         String sql = "select content from questions where id = ?";   //定义SQL语句
  20.         Connection conn = null;                 //声明Connection对象
  21.         PreparedStatement pstmt = null;         //声明PreparedStatement对象
  22.         ResultSet rs = null;                    //声明ResultSet对象
  23.         try {
  24.             conn = DBUtils.getConnection();     //获取数据库连接
  25.             pstmt = conn.prepareStatement(sql); //根据sql创建PreparedStatement
  26.             pstmt.setString(1, questionId);     //设置参数
  27.             rs = pstmt.executeQuery();
  28.             if (rs.next()) {
  29.                 question = rs.getString(1);
  30.             }
  31.         } catch (SQLException e) {
  32.             System.out.println(e.toString());
  33.         } finally {
  34.             DBUtils.close(rs);                  //关闭结果集
  35.             DBUtils.close(pstmt);               //关闭PreparedStatement
  36.             DBUtils.close(conn);                //关闭连接
  37.         }
  38.         //使用Dom4jAPI解析试题信息
  39.         StringBuffer rightAnswer = new StringBuffer(marker);
  40.         SAXReader reader = new SAXReader();     //创建一个SAXReader
  41.         Document doc = reader.read(new StringReader(question)); //解析试题信息
  42.         Node node = doc.selectSingleNode("//question");         //获取question节点
  43.         String type = node.valueOf("@type");                    //获取type属性
  44.         List options = doc.selectNodes("//option");             //获取option选项
  45.         //遍历选项,将正确答案连接在一起,中间用答案分段标记marker变量分隔
  46.         for (int i=0; i<options.size(); i++) {
  47.             Node option = (Node) options.get(i);
  48.             //mark属性为“1”表示该选项为正确答案
  49.             if ("1".equals(option.valueOf("@mark"))) {
  50.                 rightAnswer.append(option.getText());
  51.                 rightAnswer.append(marker);
  52.             }
  53.         }
  54.         //将正确答案放入缓存
  55.         rightAnswerCache.put(questionId, rightAnswer.toString());
  56.         return rightAnswer.toString();
  57.     }
  58.     //生成用户答案
  59.     String getUserAnswer(String[] answers) {
  60.         if (answers==null) return null;
  61.         //将用户答案连接在一起,中间用答案分段标记marker变量分隔
  62.         StringBuffer userAnswer = new StringBuffer(marker);
  63.         for (int i=0; i<answers.length; i++) {
  64.             userAnswer.append(answers[i]);
  65.             userAnswer.append(marker);
  66.         }
  67.         return userAnswer.toString();
  68.     }
  69. %>
  70. <%
  71.     out.clear();                                            //清空当前的输出内容(空格和换行符)
  72.     request.setCharacterEncoding("UTF-8");                  //设置请求字符集为UTF-8
  73.     String questionId = request.getParameter("questionId"); //获取问题编号
  74.     String rightAnswer = getRightAnswer(questionId);        //获取正确答案
  75.     String userAnswer = getUserAnswer(request.getParameterValues("answer"));    //获取用户答案
  76.     //比对答案是否正确,决定输出内容
  77.     if (rightAnswer.equals(userAnswer)) {
  78.         out.print(RIGHT);
  79.     } else {
  80.         out.print(WRONG);
  81.     }
  82. %>