网友们好!
  我现在做毕业设计,是用java开发B/S架构的在线考试系统,其中要实现下面的一个功能,以解决学院机房机器的不稳定问题。
  如果浏览器不幸崩溃,同一学号重新登陆后,能够恢复到崩溃前一刻的状态。要做到这一点,我的想法就是实时保存考生的作答。
  但是,有m个考生考试,每个考生会做n道天空题(只需要考虑填空题),每道题有1到q个待填的空。
  对于一道题有一个以上的空,我想可以用分隔符(例如&div)把答案隔开。因为一个答案一般不会太长,所以整条字符串的长度应该也可以接受。
  但是,m个考生的n道题目的作答信息,这个关系我不太清楚怎么实现。如果在数据库中,为每个学生的作答信息都建一个两列的表(题号,作答),那么就得建立m个表,直觉上认为这是个“不太正常”的做法。
  要么就在文本框焦点切换,或者按下“确认作答”按钮后,就把作答信息保存在外部文件(例如txt,xml)中,即使这样也要建立m个这样的外部文件,但比建立m个数据表貌似是顺眼多了。
  或许还有其他我没有想到的,好得多的方法,大家给点意见吧,谢谢!

解决方案 »

  1.   

    1. 定时保存考生的当前信息:Cookie,Cookie+Session,或者是Html5的local storage,即使是新东西,就用local storage吧,不用保存到服务器端的数据库里。
    2. 保存考生回答的问题的id,选择题不要保存具体的文字信息,只保存答案的id,填空题再保存回答的答案。3. “对于一道题有一个以上的空,我想可以用分隔符(例如&div)把答案隔开”:为了保证安全问题,被保存进来的内容需要编码一下,例如使用base64,或者javascript的escape(),这样,编码后的内容就只有普通字母和几个有限的特殊字符了
      

  2.   

    实时提交 做毕业设计还行 要是真用来做100来个人的考试 服务器会受不了的
    我做过一个能考程序题的考试系统也是BS的  到达提交高峰时甚至服务器会丢失1 2个提交数据 因此最后在提交时还做了提交数据复查的功能  而为了防止登录高峰的压力 试卷做成了提前生成静态文件的方式 
    所以建议LZ尽量保存本地 
    要不然就每道题目修改时AJAX保存一下 服务端尽量缩短提交时间 但是登录时需要AJAX获取试卷数据 防止登录高峰导致服务端崩溃