用jsp簡單實現C語言標準化測試系統

C語言標準化測試系統

在Web編程技術的學習過程中,我們小組為了深入理解相關技術原理,提升實踐能力,開發了一個基于動態Web工程框架的C語言標準化考試系統。現在,就來和大家分享一下我們的項目經歷。

一、實驗目的剖析

這個項目主要是為了搞清楚Request和response對象的工作原理。Request對象負責和客戶端“交流”,收集客戶端傳來的各種數據,像表單信息、Cookies,甚至服務器端的環境變量都能獲取到。客戶端可以通過表單提交數據,也能在網頁地址后面添加參數來傳遞信息。服務器拿到這些數據后,經過邏輯處理,再用Response對象把信息反饋給用戶,這樣就完成了一次動態交互。同時,我們也希望借此掌握基于Servlet的動態Web工程框架搭建,熟練運用Request、Response等內置對象進行JSP編程。

二、系統設計與實現

(一)開發環境搭建

我們選擇的開發環境包括Microsoft Windows 11操作系統,JDK8、TOMCAT 9作為開發工具,再搭配DreamWeaver CS5或Eclipse Developer for JavaEE進行代碼編寫,這些工具為項目的順利推進提供了有力支持。

(二)代碼實現細節

  1. 考試頁面(exam.jsp):考試頁面是考生答題的地方。頁面用JSP編寫,整體風格簡潔明了。它的布局合理,題目排列有序,使用了HTML和CSS進行設計。比如,通過設置body的字體樣式和邊距,讓頁面看起來更加舒適;h1標簽用于顯示頁面標題,突出主題;每個題目都放在div容器中,設置了合適的邊距和內邊距,使題目之間區分明顯。選項部分,使用input type="radio"創建單選框,搭配label標簽關聯選項文本,方便用戶選擇答案。最后,用一個submit按鈕提交試卷,點擊按鈕后,表單數據會發送到GradeServlet進行處理。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>C語言標準化測試</title><style>body { font-family: Arial, sans-serif; margin: 20px; }h1 { color: #333; }.question { margin-bottom: 15px; padding: 10px; }.options { margin-left: 20px; }.submit-btn { padding: 10px 20px; background-color: #4CAF50; color: white; border: none; cursor: pointer; font-size: 16px;}</style>
</head>
<body><h1>C語言標準化測試</h1><form action="GradeServlet" method="post"><!-- 題目內容 --><input type="submit" value="提交試卷" class="submit-btn"></form>
</body>
</html>

效果圖:
在這里插入圖片描述

  1. 評分Servlet(GradeServlet.java):評分模塊是整個系統的核心邏輯部分。它繼承自HttpServlet,通過@WebServlet("/GradeServlet")注解映射到指定的URL。在doPost方法中,首先獲取用戶在考試頁面提交的答案,存放在數組userAnswers中。接著,將用戶答案與預設的正確答案數組ANSWERS進行比對,計算得分。每答對一題得10分,答錯不得分。最后,把得分、答題對錯情況、用戶答案和正確答案等信息通過request.setAttribute方法設置到請求屬性中,再將請求轉發到結果頁面result.jsp
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@WebServlet("/GradeServlet")
public class GradeServlet extends HttpServlet {private static final long serialVersionUID = 1L;// 正確答案private static final String[] ANSWERS = {"C", "A", "C", "D", "C","B","A","C","B","A"};private static final int QUESTIONS_COUNT = 10;private static final int SCORE_PER_QUESTION = 10;protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 獲取用戶答案String[] userAnswers = new String[QUESTIONS_COUNT];for(int i=0;i<QUESTIONS_COUNT;i++) {userAnswers[i] = request.getParameter("q"+(i+1));}// 計算得分int score = 0;boolean[] correct = new boolean[QUESTIONS_COUNT];for (int i = 0; i < QUESTIONS_COUNT; i++) {if (userAnswers[i] != null && userAnswers[i].equals(ANSWERS[i])) {score += SCORE_PER_QUESTION;correct[i] = true;} else {correct[i] = false;}}// 設置結果屬性request.setAttribute("score", score);request.setAttribute("correct", correct);request.setAttribute("userAnswers", userAnswers);request.setAttribute("answers", ANSWERS);// 轉發到結果頁面request.getRequestDispatcher("result.jsp").forward(request, response);}
}
  1. 結果頁面(result.jsp):結果頁面主要用來展示考試成績。頁面同樣是JSP頁面,通過EL表達式(如${score})獲取后端傳遞過來的分數信息,并進行顯示。頁面樣式美觀大方,使用了CSS進行精心設計。比如,通過result-page類設置頁面整體布局,讓內容垂直水平居中顯示;result-container類控制結果容器的樣式,添加了邊框圓角和陰影效果;result類突出顯示分數,設置了較大的字體、綠色的文本顏色和背景色;return-btn類為“返回考試頁面”按鈕添加了樣式和交互效果,鼠標懸停時背景色會發生變化。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>測試結果</title><link rel="stylesheet" href="styles.css">
</head>
<body class="result-page"><div class="container result-container"><h1>您的測試結果</h1><div class="result">您本次C語言測試成績: <strong>${score}</strong> 分 </div><a href="exam.jsp" class="return-btn">返回考試頁面</a></div>
</body>
</html>
.result-page {display: flex;justify-content: center;align-items: center;min-height: 100vh;
}.result-container {text-align: center;padding: 40px 30px;border-radius: 15px;box-shadow: 0 0 20px rgba(0,0,0,0.15);
}.result {font-size: 2.5em;color: #4CAF50;font-weight: bold;margin: 20px 0;padding: 20px;border-radius: 10px;background-color: #e8f5e9;
}.return-btn {display: inline-block;padding: 12px 30px;background-color: #4CAF50;color: white;text-decoration: none;border-radius: 5px;font-size: 1.1em;transition: background-color 0.3s;
}.return-btn:hover {background-color: #45a049;
}

結果界面的效果圖:
在這里插入圖片描述

(三)項目結構圖

在這里插入圖片描述

三、項目測試與優化

在測試過程中,遇到了不少問題。比如,當用戶有題目未作答時,會出現NullPointerException錯誤。我們通過在評分邏輯中增加判空處理,解決了這個問題。還有,將項目部署到云端時,由于本地和云端的JDK版本不同,出現了500錯誤。后來把云端的JDK版本改成和本地一致,重新部署后問題就解決了。經過反復測試和優化,系統在瀏覽器中能夠穩定運行,不管是頁面跳轉,還是不同答案輸入下的評分,都準確無誤。

四、項目成果與收獲

(一)系統功能完善

最終,我們成功完成了基于JSP/Servlet的動態Web考試系統。考試頁面能展示C語言標準化試題,評分模塊可以自動評分,結果頁面也能清晰地顯示得分。這個系統雖然還有一些可以優化的地方,但已經基本滿足了C語言標準化測試的需求。

(二)技術能力提升

通過這次實驗,我們深入理解了JSP/Servlet的核心技術,特別是Request/Response對象在Web交互中的關鍵作用。以前對這些技術的理解停留在理論層面,通過實際項目開發,真正掌握了它們的應用。同時,學會了使用EL表達式簡化JSP頁面開發,這讓我們在開發過程中能夠更高效地獲取和顯示數據。

(三)團隊協作經驗

這次項目是團隊合作的成果。小組四人分工明確,各展所長,在遇到問題時一起討論解決。通過這次合作,我們的團隊協作能力得到了很大提升,也為今后的項目積累了寶貴的經驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79281.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QMK鍵盤固件自定義指南 - 打造你的專屬鍵盤體驗

QMK鍵盤固件自定義指南 - 打造你的專屬鍵盤體驗 &#x1f680; 前言 在機械鍵盤的世界里&#xff0c;QMK固件讓你的鍵盤不再只是簡單的輸入設備&#xff0c;而是可以按照你的意愿定制的強大工具。本文將深入淺出地介紹如何自定義QMK鍵盤的行為&#xff0c;從基礎概念到高級應…

5.9培訓

文件上傳 先找文件上傳的地方&#xff0c;打開代理鏈接BP&#xff0c;它需要一個xls文件 我們創建一個sqzr.xls bp攔截了之后&#xff0c;我們修改請求&#xff0c;把后綴改成php&#xff0c;發送請求 找到我們的靜態資源所在的位置 訪問http://192.168.1.100:81/static/upload…

【FAQ】HarmonyOS SDK 閉源開放能力 — PDF Kit

1.問題描述&#xff1a; 預覽PDF文件&#xff0c;文檔上所描述的loadDocument接口&#xff0c;可以返回文件的狀態&#xff0c;并無法實現PDF的預覽&#xff0c;是否有能預覽PDF相關接口&#xff1f; 解決方案&#xff1a; 1、執行loadDocument進行加載PDF文件后&#xff0c…

AutoDL實現端口映射與遠程連接AutoDL與Pycharm上傳文件到遠程服務器(李沐老師的環境)

文章目錄 以上配置的作用前提AutoDL實現端口映射遠程連接AutoDLPycharm上傳文件到遠程服務器以上配置的作用 使用AutoDL的實例:因本地沒有足夠強的算力,所以需要使用AutoDL AutoDL端口映射:當在實例上安裝深度學習的環境,但因為實例的linux系統問題,無法圖形化顯示d2l中的文件…

【Linux系列】跨平臺安裝與配置 Vim 文本編輯器

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

CountDownLatch 并發編程中的同步利器

CountDownLatch 并發編程中的同步利器 文章目錄 CountDownLatch 并發編程中的同步利器一、CountDownLatch 基礎概念1.1 什么是 CountDownLatch&#xff1f;1.2 CountDownLatch 的核心方法1.3 基本使用示例 二、CountDownLatch 實戰應用2.1 應用場景一&#xff1a;并行任務協調2…

Linux 內核鏈表宏的詳細解釋

&#x1f527; Linux 內核鏈表結構概覽 Linux 內核中的鏈表結構定義在頭文件 <linux/list.h> 中。核心結構是&#xff1a; struct list_head {struct list_head *next, *prev; }; 它表示一個雙向循環鏈表的節點。鏈表的所有操作都圍繞這個結構體展開。 &#x1f9e9; …

分書問題的遞歸枚舉算法

分數問題的遞歸枚舉算法 一、問題引入二、解題步驟1.問題分析思維導圖2.解題步驟 三、代碼實現1.代碼2.復雜度分析 四、個人總結 一、問題引入 分書問題是指&#xff1a;已知 n 個人對 m 本書的喜好&#xff08;n≤m&#xff09;&#xff0c;現要將 m 本書分給 n 個人&#xf…

密碼學--AES

一、實驗目的 1、完成AES算法中1輪加密和解密操作 2、掌握AES的4個基本處理步驟 3、理解對稱加密算法的“對稱”思想 二、實驗內容 1、題目內容描述 &#xff08;1&#xff09;利用C語言實現字節代換和逆向字節代換&#xff0c;字節查S盒代換 &#xff08;2&#xff09;利…

【工具記錄分享】提取bilibili視頻字幕

F12大法 教程很多 但方法比較統一 例快速提取視頻字幕&#xff01;適用B站、AI字幕等等。好用 - 嗶哩嗶哩 無腦小工具 嗶哩嗶哩B站字幕下載_在線字幕解析-飛魚視頻下載助手 把鏈接扔進去就會自動生成srt文件 需要txt可以配合&#xff1a; SRT轉為TXT

使用fdisk 、gdisk管理分區

用 fdisk 管理分區 fdisk 命令工具默認將磁盤劃分為 mbr 格式的分區 命令&#xff1a; fdisk 設備名 fdisk 命令以交互方式進行操作的&#xff0c;在菜單中選擇相應功能鍵即可 [rootlocalhost ~]# fdisk /dev/sda # 對 sda 進行分區 Command (m for help): # 進入 fdis…

【Linux基礎】程序和軟件安裝管理命令

目錄 install命令 which命令 install命令 作用&#xff1a;它是用于安裝或復制文件到指定位置&#xff0c;并且可以同時設置文件的權限、所有者和所屬組等屬性。它通常用于腳本中&#xff0c;用于自動化安裝程序或配置文件的部署。 基本用法&#xff1a; install [選項] 源…

C++模板梳理

目錄 函數模板 類模板 變量模板 模板全特化 模板偏特化 模板顯式實例化解決文件分離問題 折疊表達式 模板的二階段編譯 待決名(dependent name) SFINAE 概念與約束 函數模板 函數模板不是函數&#xff0c;只有實例化的函數模板&#xff0c;編譯器才能生成實際的函數…

數據鏈共享:從印巴空戰到工業控制的跨越性應用

摘要 本文通過對印巴空戰中數據鏈共享發揮關鍵作用的分析&#xff0c;引出數據鏈共享在工業控制領域同樣具有重大價值的觀點。深入闡述 DIOS 工業控制操作系統作為工業數據鏈共享基礎技術的特點、架構及應用優勢&#xff0c;對比空戰場景與工業控制場景下數據鏈共享的相…

巡檢機器人數據處理技術的創新與實踐

摘要 隨著科技的飛速發展&#xff0c;巡檢機器人在各行業中逐漸取代人工巡檢&#xff0c;展現出高效、精準、安全等顯著優勢。當前&#xff0c;巡檢機器人已從單純的數據采集階段邁向對采集數據進行深度分析的新階段。本文探討了巡檢機器人替代人工巡檢的現狀及優勢&#xff0c…

在 Flink + Kafka 實時數倉中,如何確保端到端的 Exactly-Once

在 Flink Kafka 構建實時數倉時&#xff0c;確保端到端的 Exactly-Once&#xff08;精確一次&#xff09; 需要從 數據消費&#xff08;Source&#xff09;、處理&#xff08;Processing&#xff09;、寫入&#xff08;Sink&#xff09; 三個階段協同設計&#xff0c;結合 Fli…

當可視化遇上 CesiumJS:突破傳統,打造前沿生產配套方案

CesiumJS 技術基礎介紹 CesiumJS 是一款基于 JavaScript 的開源庫&#xff0c;專門用于創建動態、交互式的地理空間可視化。它利用 WebGL 技術&#xff0c;能夠在網頁瀏覽器中流暢地渲染高分辨率的三維地球和地圖場景。CesiumJS 支持多種地理空間數據格式&#xff0c;包括但不…

RabbitMQ深入學習

繼續上一節的學習&#xff0c;上一節學習了RabbitMQ的基本內容&#xff0c;本節學習RabbitMQ的高級特性。 RocketMQ的高級特性學習見這篇博客 目錄 1.消息可靠性1.1生產者消息確認1.2消息持久化1.3消費者消息確認1.4消費失敗重試機制1.5消息可靠性保證總結 2.什么是死信交換機…

Linux系統:虛擬文件系統與文件緩沖區(語言級內核級)

本節重點 初步理解一切皆文件理解文件緩沖區的分類用戶級文件緩沖區與內核級文件緩沖區用戶級文件緩沖區的刷新機制兩級緩沖區的分層協作 一、虛擬文件系統 1.1 理解“一切皆文件” 我們都知道操作系統訪問不同的外部設備&#xff08;顯示器、磁盤、鍵盤、鼠標、網卡&#…

在c++中老是碰到string,這是什么意思?

定義一個string類型變量的引用&#xff0c;相當于給現有變量起個別名&#xff0c;與指針還是不一樣的。比如string a;string& ba;這兩句&#xff0c;b與a實際上是一回事&#xff0c;表示的是同一塊內存。 std是系統的一個命名空間(有關命名空間可以參閱namespace_百度百科)…