Web实验--基于动态Web工程框架的标准化考试系统的设计

实验博客:基于动态Web工程框架的标准化考试系统设计

本次Web编程技术课程实验,我们小组四人围绕基于动态Web工程框架的标准化考试系统设计主题,采用Spring MVC框架完成了C语言单选题在线考试与自动评分系统的开发。实验聚焦动态Web交互核心技术,将理论知识转化为实际工程能力,下面从实验概述、实现过程、小组分工、实验总结四方面记录本次实验过程。

一、实验概述

1. 实验目的

本次实验旨在深入理解动态Web开发核心原理,掌握Request、Response内置对象的交互机制;熟练搭建Spring MVC动态Web工程框架,熟悉控制器、视图解析器等核心组件的配置与应用;通过小组协作,实现标准化考试系统的答题、判分、成绩展示全流程,提升Web开发与团队协作能力。

2. 实验内容

设计并实现两个核心JSP页面与Spring MVC控制逻辑:一是考试页面,展示5道C语言单选题,提供单选答题选项,通过表单提交答题数据;二是评分页面,通过Request对象获取答题信息,与标准答案比对后自动计算得分,最终展示考试成绩。实验全程依托Spring MVC框架,实现客户端与服务器的动态数据交互。

3. 实验环境

  • 操作系统:Microsoft Windows 10
  • 开发工具:Eclipse Developer for JavaEE、DreamWeaver CS5
  • 核心环境:JDK1.8、Tomcat 8
  • 技术栈:Spring MVC、JSP、Maven

二、实验实现过程

1. 工程框架搭建

首先通过Maven创建Web项目,在pom.xml中引入Spring MVC、Servlet、JSP核心依赖,确保框架运行所需组件齐全。配置web.xml文件,注册Spring MVC核心控制器DispatcherServlet,关联框架配置文件,设置项目欢迎页为考试页面,简化项目访问入口。

随后编写springmvc-servlet.xml核心配置文件,开启组件扫描功能,指定控制器所在包路径;启用注解驱动,支持Spring MVC注解开发;配置视图解析器,统一JSP视图的前缀与后缀,实现控制器与视图页面的快速跳转,完成Spring MVC框架基础搭建。

2. 核心页面开发

(1)考试页面(exam.jsp)

页面标题为“C语言标准化测试”,依次展示5道C语言基础单选题,每道题设置A、B、C、D四个单选选项。页面设计简洁清晰,通过HTML表单包裹所有答题选项,表单提交方式为POST,提交地址映射至控制器处理路径,确保答题数据能准确发送至服务器。

点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>标准化考试系统 - Spring MVC</title>
    <style>
        body { font-family: 微软雅黑; margin: 30px; }
        .question { margin-bottom: 25px; }
        .btn { margin-top: 20px; }
    </style>
</head>
<body>

<h2>📝 Web编程技术 —— 单选题标准化考试(Spring MVC版)</h2>
<form action="${pageContext.request.contextPath}/submitExam" method="post">

    <div class="question">
        <b>1. 在 Java Web 中,用于获取客户端请求数据的对象是?</b><br>
        <input type="radio" name="q1" value="A"> A. response<br>
        <input type="radio" name="q1" value="B"> B. request<br>
        <input type="radio" name="q1" value="C"> C. session<br>
        <input type="radio" name="q1" value="D"> D. application<br>
    </div>

    <div class="question">
        <b>2. Spring MVC 中,接收请求并返回数据的组件是?</b><br>
        <input type="radio" name="q2" value="A"> A. Model<br>
        <input type="radio" name="q2" value="B"> B. View<br>
        <input type="radio" name="q2" value="C"> C. Controller<br>
        <input type="radio" name="q2" value="D"> D. DispatcherServlet<br>
    </div>

    <div class="question">
        <b>3. JSP 中,哪个指令用于导入 Java 包?</b><br>
        <input type="radio" name="q3" value="A"> A. &lt;jsp:include&gt;<br>
        <input type="radio" name="q3" value="B"> B. &lt;%@ taglib %&gt;<br>
        <input type="radio" name="q3" value="C"> C. &lt;%@ page import %&gt;<br>
        <input type="radio" name="q3" value="D"> D. &lt;%@ include %&gt;<br>
    </div>

    <div class="question">
        <b>4. Tomcat 默认端口号是?</b><br>
        <input type="radio" name="q4" value="A"> A. 8080<br>
        <input type="radio" name="q4" value="B"> B. 80<br>
        <input type="radio" name="q4" value="C"> C. 443<br>
        <input type="radio" name="q4" value="D"> D. 3306<br>
    </div>

    <div class="question">
        <b>5. HTTP 请求中,POST 方法的数据放在哪里?</b><br>
        <input type="radio" name="q5" value="A"> A. URL 后面<br>
        <input type="radio" name="q5" value="B"> B. 请求体<br>
        <input type="radio" name="q5" value="C"> C. 请求头<br>
        <input type="radio" name="q5" value="D"> D. 响应体<br>
    </div>

    <input type="submit" value="提交试卷" class="btn">
</form>

</body>
</html>

效果展示:
微信图片_20260524113316_189_93

(2)评分页面(score.jsp)

页面用于展示考试结果,通过EL表达式获取控制器传递的成绩数据,以红色醒目字体显示最终得分(满分100分,每题20分)。页面布局简洁,核心突出成绩信息,完成服务器响应数据的客户端展示。

点击查看代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>考试成绩 - Spring MVC</title>
    <style>
        body { font-family: 微软雅黑; margin: 30px; }
        .score-box { background: #f0f0f0; padding: 20px; width: 450px; }
        .pass { color: green; }
        .fail { color: red; }
    </style>
</head>
<body>

<h2>📊 考试评分结果</h2>

<%
    Integer scoreObj = (Integer) request.getAttribute("score");
    Integer totalObj = (Integer) request.getAttribute("total");
    String[] userAnswers = (String[]) request.getAttribute("userAnswers");
    
    int score = (scoreObj != null) ? scoreObj : 0;
    int total = (totalObj != null) ? totalObj : 5;
%>

<div class="score-box">
    <p><b>你的得分:<%= score %> / <%= total %></b></p>
    <p><b>百分比:</b> <%= (score * 100 / total) %>%</p>

    <%
        if (score >= 3) {
            out.println("<p class='pass'>✅ 恭喜你,考试通过!</p>");
        } else {
            out.println("<p class='fail'>❌ 很遗憾,未通过,请继续努力。</p>");
        }
    %>

    <hr>
    <h3>📌 题目详情</h3>
    <ul>
        <li>第1题:你的答案 <%= (userAnswers != null && userAnswers[0] != null) ? userAnswers[0] : "未作答" %> | 正确答案 B</li>
        <li>第2题:你的答案 <%= (userAnswers != null && userAnswers[1] != null) ? userAnswers[1] : "未作答" %> | 正确答案 C</li>
        <li>第3题:你的答案 <%= (userAnswers != null && userAnswers[2] != null) ? userAnswers[2] : "未作答" %> | 正确答案 C</li>
        <li>第4题:你的答案 <%= (userAnswers != null && userAnswers[3] != null) ? userAnswers[3] : "未作答" %> | 正确答案 A</li>
        <li>第5题:你的答案 <%= (userAnswers != null && userAnswers[4] != null) ? userAnswers[4] : "未作答" %> | 正确答案 B</li>
    </ul>

    <a href="${pageContext.request.contextPath}/exam">重新考试</a>
</div>

</body>
</html>

效果展示:
微信图片_20260524113317_191_93

微信图片_20260524113318_192_93

微信图片_20260524113319_193_93

3. 控制器逻辑开发

创建ExamController控制器类,使用@Controller与@RequestMapping注解实现请求映射。控制器核心逻辑分为三步:一是通过HttpServletRequest对象获取用户提交的5道题答案;二是预设标准答案数组,逐题比对用户答案与标准答案,统计正确题数并计算总分;三是将总分存入请求域,转发至评分页面,完成业务逻辑处理与视图跳转。

4. 调试与问题解决

开发调试阶段,我们遇到表单数据接收失败、视图跳转异常、分数计算错误等问题。通过逐一排查配置文件路径、核对表单参数与控制器接收参数一致性、逐行调试比对逻辑,最终解决所有问题。例如,因视图解析器路径配置错误导致页面404,修正路径参数后成功实现跳转;因数组下标错误导致分数计算偏差,调整下标逻辑后得到正确成绩,确保系统正常运行。

三、小组分工

本次实验共4人参与,我们合理分配任务,高效协同完成开发:

  • 余思盈:负责Spring MVC框架搭建,完成Maven依赖配置、web.xml与springmvc-servlet.xml编写,搭建基础运行环境;
  • 赵玉娇:负责考试页面(exam.jsp)开发,完成页面布局、题目编写、表单设计与样式调整;
  • 庞希颖:负责评分页面(result.jsp)开发与控制器逻辑编写,实现成绩展示与答案比对、分数计算核心功能;
  • 黄钰云:负责全系统功能测试、bug排查与调试协助,整理实验代码、运行截图,协助完成实验文档与博客撰写。

小组全程保持实时沟通,及时同步开发进度,共同攻克技术难点,高效完成实验任务。

四、实验总结

1. 实验收获

本次实验让我们切实掌握了动态Web工程框架的搭建流程,深入理解了Request、Response对象在客户端与服务器交互中的核心作用,熟练运用Spring MVC框架实现MVC模式开发,清晰认识到控制器、视图、模型的解耦优势。同时,通过实际开发,我们提升了代码编写、调试排错能力,小组协作过程也增强了团队沟通与配合意识,深刻体会到分工协作在项目开发中的重要性。

2. 不足与改进

本次实验设计的考试系统功能较为基础,仅支持单选题测试,缺少用户登录、错题复盘、题型扩展等功能;代码规范性有待提升,未添加完善的异常处理机制,容错性不足。后续将进一步优化系统,扩展多选题、判断题等题型,增加用户身份验证功能,完善异常处理逻辑,优化代码结构,让系统更完整、稳定。

3. 整体感悟

本次基于动态Web工程框架的标准化考试系统设计实验,是理论与实践深度融合的重要实践。从框架搭建到功能实现,从独立开发到团队协作,我们不仅夯实了Web编程技术基础,更培养了工程思维与解决实际问题的能力。未来,我们将把本次实验所学运用到更多Web项目开发中,不断探索动态Web技术的更多应用场景,持续提升自身专业能力。

posted @ 2026-05-24 11:57  西红柿桶装面  阅读(6)  评论(0)    收藏  举报