这个基于SpringBoot+Vue+MyBatis+MySQL技术栈的计算机基础网络教学系统,是专门为高校计算机基础教育设计的全功能解决方案。我在开发过程中发现,传统教学系统往往存在界面陈旧、交互体验差、扩展性不足等问题,而这个采用前后端分离架构的系统正好能解决这些痛点。
系统主要包含三大核心模块:课程管理模块实现教学资源的数字化管理,在线学习模块支持视频播放、文档浏览和代码练习,评测系统则提供自动批改和学情分析功能。特别值得一提的是,我们针对计算机基础课程的特点,专门开发了编程题自动评测功能,学生提交的代码可以直接在沙箱环境中运行并获取实时反馈。
采用前后端分离架构是这个项目最重要的技术决策。前端使用Vue.js框架构建SPA应用,后端采用SpringBoot提供RESTful API,两者通过JSON格式数据进行通信。这种架构带来了几个显著优势:
在实际部署时,我们将前端静态资源部署在Nginx服务器上,后端服务则运行在Tomcat容器中,通过Nginx反向代理实现前后端的无缝衔接。
后端采用SpringBoot 2.7.x版本,主要依赖包括:
数据库设计遵循第三范式,主要表结构包括:
sql复制CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(100) NOT NULL,
`role` enum('student','teacher','admin') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
前端使用Vue 3组合式API开发,主要技术选型:
特别针对教学场景,我们开发了几个定制组件:
课程管理模块采用树形结构组织教学内容,支持:
后端接口示例:
java复制@RestController
@RequestMapping("/api/course")
public class CourseController {
@Autowired
private CourseService courseService;
@GetMapping("/{courseId}")
public Result getCourseDetail(@PathVariable Integer courseId) {
return Result.success(courseService.getCourseDetail(courseId));
}
}
评测系统是这个项目的技术难点,我们实现了:
评测流程:
利用ECharts实现的学习数据看板可以展示:
数据分析SQL示例:
sql复制SELECT
DATE_FORMAT(login_time, '%Y-%m-%d') AS day,
COUNT(DISTINCT user_id) AS active_users
FROM
user_login_log
GROUP BY
day
ORDER BY
day DESC
LIMIT 7;
初始化数据库:
bash复制mysql -u root -p < schema.sql
推荐使用Docker Compose编排服务:
yaml复制version: '3'
services:
backend:
image: openjdk:8-jre
ports:
- "8080:8080"
volumes:
- ./app.jar:/app.jar
command: java -jar /app.jar
frontend:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./dist:/usr/share/nginx/html
开发环境下常见的跨域问题可以通过以下配置解决:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
SpringBoot默认文件上传大小为1MB,需要调整配置:
properties复制spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB
在Nginx配置中添加:
nginx复制location / {
try_files $uri $uri/ /index.html;
}
在实际使用中,我发现这个系统还可以进一步扩展:
对于想要二次开发的同行,建议先从这几个方面入手: