java在线考试系统,在线测试系统 使用技术: mvc架构,servlet,jdbc,mysql,jsp,百度文本相似度识别 软件: eclipse/Myeclipse/mysql/jdk1.8/tomcat8.0 功能描述:普通陪你过用户,管理员,命题人,阅卷人 普通用户可以进行在线测试,测评成功录入个人信息生成对应的账号面,查询个人的考试成绩等 管理员可以对题库,题型,试卷,考试,员工,阅卷进行管理 命题人可以对题库进行管理 阅卷人进行阅卷,使用百度短文本相似度,能够根据正确答案对学生的主观题进行智能判分,,近似0.8以上,认为满分,0.5以上7分,0.3以上5分,否则0分 包含需求文档,java源码,数据库源码,使用说明

看到Java+Servlet还能撑起一个完整的在线考试系统,是不是觉得老技术栈也能打?咱们直接扒代码说话。系统用MVC分层明显,JSP当视图层,Servlet控制路由,JDBC操作MySQL。先看用户注册怎么玩:

// UserRegisterServlet.java片段
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    String username = request.getParameter("username");
    String password = BCrypt.hashpw(request.getParameter("password"), BCrypt.gensalt());
    
    try(Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS)) {
        String sql = "INSERT INTO users (username, password_hash, role) VALUES (?, ?, 'STUDENT')";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, username);
        pstmt.setString(2, password);
        pstmt.executeUpdate();
        // 生成准考证号逻辑...
    } catch(SQLException e) {
        // 异常处理
    }
}

这里用了BCrypt加密密码,比直接MD5安全多了。注意PreparedStatement防SQL注入的细节,老生常谈但总有人忘。注册完自动生成准考证号的逻辑藏在工具类里,通过时间戳+随机数保证唯一性。

阅卷模块才是重头戏,百度AI的短文本相似度接口用得挺溜:

// 智能阅卷核心逻辑
public float autoScore(String studentAnswer, String standardAnswer) {
    AipNlp client = new AipNlp(APP_ID, API_KEY, SECRET_KEY);
    JSONObject res = client.simnet(studentAnswer, standardAnswer, null);
    float similarity = res.getJSONObject("output").getFloat("score");
    
    if(similarity >= 0.8) return 10f;
    else if(similarity >= 0.5) return 7f;
    else if(similarity >= 0.3) return 5f;
    else return 0f;
}

实测发现百度的相似度算法对短句比对效果还行,长段落容易翻车。阈值设置成0.8给满分是不是太严格了?有学校要求0.6就给及格分,这个得看甲方需求。

题库管理有个骚操作——动态SQL拼接:

// 动态组合查询条件
public List<Question> searchQuestions(String keyword, String type) {
    StringBuilder sql = new StringBuilder("SELECT * FROM questions WHERE 1=1 ");
    List<Object> params = new ArrayList<>();
    
    if(StringUtils.isNotBlank(keyword)) {
        sql.append("AND content LIKE ? ");
        params.add("%"+keyword+"%");
    }
    if(StringUtils.isNotBlank(type)) {
        sql.append("AND question_type = ? ");
        params.add(type);
    }
    // JDBC执行查询...
}

这种写法比在JSP里拼字符串安全多了,1=1的套路虽然被diss过,但确实好用。注意用StringBuilder避免字符串拼接性能问题,虽然在小系统里差别不大。

java在线考试系统,在线测试系统 使用技术: mvc架构,servlet,jdbc,mysql,jsp,百度文本相似度识别 软件: eclipse/Myeclipse/mysql/jdk1.8/tomcat8.0 功能描述:普通陪你过用户,管理员,命题人,阅卷人 普通用户可以进行在线测试,测评成功录入个人信息生成对应的账号面,查询个人的考试成绩等 管理员可以对题库,题型,试卷,考试,员工,阅卷进行管理 命题人可以对题库进行管理 阅卷人进行阅卷,使用百度短文本相似度,能够根据正确答案对学生的主观题进行智能判分,,近似0.8以上,认为满分,0.5以上7分,0.3以上5分,否则0分 包含需求文档,java源码,数据库源码,使用说明

权限控制这块用Filter简单粗暴:

<!-- web.xml配置 -->
<filter-mapping>
    <filter-name>AuthFilter</filter-name>
    <url-pattern>/admin/*</url-pattern>
</filter-mapping>

配合Session校验用户角色,虽然不如Shiro专业,但对于小型系统够用了。有个坑是JSP页面里别忘做二次校验,防止直接URL访问越权。

源码里数据库设计文档挺有意思,考试表用testpaper和examrecord分开存储试卷模板和考试记录,避免了数据冗余。试卷生成时的随机抽题算法值得细看,用了ORDER BY RAND()但是加了limit限制,算是在性能和随机性之间折中。

要说缺点,前端还是老旧的JSP+JSTL,要是改造成Vue前后端分离会更香。不过作为毕设或者课程设计,这个完整度已经能吊打一堆只会写CRUD的系统了。部署文档写得详细,从导入SQL到配置Tomcat端口都有截图,对新手友好。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐