基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
目录
- 基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
-
- 一、项目介绍
- 二、演示视频
- 三、技术栈
- 四、系统角色与功能模块
-
- [4.1 系统角色](#4.1 系统角色)
- [4.2 功能结构图](#4.2 功能结构图)
- 五、数据库设计
-
- [5.1 数据库概述](#5.1 数据库概述)
- [5.2 核心数据表](#5.2 核心数据表)
- 六、项目结构
- 七、核心代码展示
-
- [7.1 学生登录接口](#7.1 学生登录接口)
- [7.2 专业报名接口](#7.2 专业报名接口)
- [7.3 Spring整合MyBatis配置(Druid连接池)](#7.3 Spring整合MyBatis配置(Druid连接池))
- [7.4 前台导航配置(config.js)](#7.4 前台导航配置(config.js))
- 八、环境要求与运行步骤
-
- [8.1 环境要求](#8.1 环境要求)
- [8.2 运行步骤](#8.2 运行步骤)
- 九、系统特点与亮点
- 十、项目总结
一、项目介绍
本系统是一个基于 SSM(Spring + SpringMVC + MyBatis-Plus)+ JSP 架构开发的 高校专业信息管理系统,旨在为高校提供一站式的专业信息展示与管理平台。系统涵盖了学校概况展示、招生政策发布、专业信息管理、课程管理、在线问答、新闻资讯、学生报名、客服聊天等核心功能,实现了前台展示与后台管理的完整闭环。
系统分为 管理员 和 学生 两种角色,不同角色拥有不同的操作权限,满足高校日常信息化管理需求。
二、演示视频
📺 项目完整演示视频如下:
| 【学习交流分】ssm001高校专业信息管理系统设计与实现录像 |
三、技术栈
| 类别 | 技术 |
|---|---|
| 后端框架 | Spring 5.0 + SpringMVC + MyBatis-Plus 2.3 |
| 前端技术 | JSP + Vue.js + Layui + ElementUI + Bootstrap |
| 数据库 | MySQL 5.7 |
| 连接池 | Druid 1.1.0 |
| 项目构建 | Maven |
| 服务器 | Tomcat |
| 开发工具 | IDEA / Eclipse |
| 其他 | Hutool工具包、FastJSON、百度AI SDK、TinyMCE富文本编辑器 |
四、系统角色与功能模块
4.1 系统角色
系统包含两种角色:
- 管理员:拥有系统全部管理权限
- 学生:拥有个人信息管理、专业报名、在线问答等权限
4.2 功能结构图
高校专业信息管理系统
├── 前台展示模块
│ ├── 首页(轮播图 + 信息展示)
│ ├── 学校概况
│ ├── 招生政策
│ ├── 专业信息列表 + 详情
│ ├── 课程信息列表 + 详情
│ ├── 在线问答(留言 + 回复)
│ ├── 新闻资讯列表 + 详情
│ ├── 客服在线聊天
│ ├── 学生注册 / 登录
│ └── 个人中心
│
└── 后台管理模块
├── 管理员功能
│ ├── 学生管理(修改、删除)
│ ├── 课程管理(增删改查)
│ ├── 专业管理(增删改)
│ ├── 报名管理(查看、删除)
│ ├── 学校概况管理(修改)
│ ├── 招生政策管理(修改)
│ ├── 在线问答管理(增删改)
│ ├── 客服管理
│ ├── 轮播图管理
│ └── 新闻资讯管理(增删改)
│
└── 学生功能
├── 个人信息管理(查看、修改)
├── 课程信息查看
├── 专业信息查看 + 报名
├── 在线问答(提问)
└── 报名管理(查看、删除)
五、数据库设计
5.1 数据库概述
数据库名为 gz-ssmj,共包含 12 张数据表,使用 MySQL 5.7,字符集为 UTF-8。
5.2 核心数据表
| 表名 | 说明 | 核心字段 |
|---|---|---|
users |
用户表(管理员) | 用户名、密码、角色 |
xueshengxinxi |
学生信息表 | 用户名、账号、密码、头像、性别、身份 |
zhuanye |
专业信息表 | 专业名称、培养目标、就业前景、专业图片、专业介绍 |
kecheng |
课程信息表 | 课程名称、所属专业、课程图片、课程描述 |
baoming |
报名信息表 | 学生ID、专业ID、专业图片、报名时间 |
xuexiaogaikuang |
学校概况表 | 学校概况内容、修改时间 |
zhaoshengzhengce |
招生政策表 | 招生政策内容、修改时间 |
liuyanxinxi |
留言信息表(在线问答) | 留言内容、留言人、留言时间、回复、回复人、回复时间 |
news |
新闻资讯表 | 标题、图片、内容 |
chat |
客服聊天表 | 用户ID、管理员ID、提问、回复、是否回复 |
config |
配置文件表 | 轮播图配置 |
dictionary |
字典表 | 字段编码、编码名字 |
token |
Token表 | 用户ID、用户名、Token、过期时间 |
六、项目结构
gz-ssmj/
├── pom.xml # Maven配置文件
├── src/main/
│ ├── java/com/
│ │ ├── annotation/ # 自定义注解
│ │ │ ├── IgnoreAuth.java # 忽略鉴权注解
│ │ │ └── LoginUser.java # 登录用户注解
│ │ ├── config/ # 配置类
│ │ │ └── MyMetaObjectHandler.java # MyBatis-Plus自动填充处理器
│ │ ├── controller/ # 控制器层
│ │ │ ├── UserController.java # 管理员控制器
│ │ │ ├── XueshengxinxiController.java # 学生信息控制器(含登录/注册)
│ │ │ ├── ZhuanyeController.java # 专业信息控制器
│ │ │ ├── KechengController.java # 课程信息控制器
│ │ │ ├── BaomingController.java # 报名控制器
│ │ │ ├── LiuyanxinxiController.java # 留言信息控制器
│ │ │ ├── NewsController.java # 新闻资讯控制器
│ │ │ ├── ChatController.java # 客服聊天控制器
│ │ │ ├── CommonController.java # 通用控制器
│ │ │ └── ... # 其他控制器
│ │ ├── dao/ # 数据访问层(DAO)
│ │ ├── entity/ # 实体类
│ │ ├── interceptor/ # 拦截器
│ │ ├── model/ # 模型类
│ │ ├── service/ # 服务层
│ │ └── utils/ # 工具类
│ ├── resources/
│ │ ├── config.properties # 数据库连接配置
│ │ ├── mapper/ # MyBatis XML映射文件
│ │ ├── mybatis/ # MyBatis全局配置
│ │ └── spring/ # Spring配置文件
│ │ ├── spring.xml # Spring核心配置
│ │ ├── spring-mvc.xml # SpringMVC配置
│ │ └── spring-mybatis.xml # Spring整合MyBatis配置
│ └── webapp/
│ ├── index.jsp # 后台入口页面
│ ├── front/ # 前台页面
│ │ ├── index.jsp # 前台首页
│ │ ├── pages/ # 各功能页面
│ │ │ ├── home/ # 首页
│ │ │ ├── login/ # 登录页
│ │ │ ├── zhuanye/ # 专业信息
│ │ │ ├── kecheng/ # 课程信息
│ │ │ ├── zaixianwenda/ # 在线问答
│ │ │ ├── news/ # 新闻资讯
│ │ │ ├── chat/ # 客服聊天
│ │ │ └── ...
│ │ ├── js/ # JavaScript文件
│ │ │ ├── config.js # 系统配置(菜单、导航等)
│ │ │ └── vue.js # Vue.js框架
│ │ └── layui/ # Layui UI框架
│ ├── jsp/ # 后台JSP页面
│ └── upload/ # 文件上传目录
└── db.sql # 数据库初始化脚本
七、核心代码展示
7.1 学生登录接口
java
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String role, HttpServletRequest request) {
XueshengxinxiEntity user = xueshengxinxiService.selectOne(
new EntityWrapper<XueshengxinxiEntity>().eq("account", username));
if(user != null){
if(!user.getRole().equals(role)){
return R.error("权限不正常");
}
if(user == null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(
user.getId(), user.getName(), "users", user.getRole());
return R.ok().put("token", token);
}else{
return R.error("账号或密码或权限不对");
}
}
7.2 专业报名接口
java
@RequestMapping("/apply")
public R apply(Integer id, HttpServletRequest request){
ZhuanyeEntity zhuanye = zhuanyeService.selectById(id);
if(zhuanye != null){
BaomingEntity baoming = new BaomingEntity();
baoming.setXsTypes((Integer) request.getSession().getAttribute("userId"));
baoming.setZyPhoto(zhuanye.getZyPhoto());
baoming.setZyTypes(zhuanye.getId());
baoming.setCreateTime(new Date());
// 检查是否已报名
Wrapper<BaomingEntity> queryWrapper = new EntityWrapper<BaomingEntity>()
.eq("xs_types", baoming.getXsTypes());
BaomingEntity baomingEntity = baomingService.selectOne(queryWrapper);
if(baomingEntity == null){
baomingService.insert(baoming);
return R.ok();
}else {
return R.error(511, "每次只能报名一个专业,不能重复报名!!!");
}
}else{
return R.error();
}
}
7.3 Spring整合MyBatis配置(Druid连接池)
xml
<!-- 配置数据源 -->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_username}"/>
<property name="password" value="${jdbc_password}"/>
<property name="initialSize" value="0"/>
<property name="maxActive" value="20"/>
<property name="maxWait" value="60000"/>
<property name="validationQuery" value="${validationQuery}"/>
<property name="testWhileIdle" value="true"/>
</bean>
<!-- Spring整合MyBatis-Plus -->
<bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
<property name="plugins">
<array>
<bean id="paginationInterceptor"
class="com.baomidou.mybatisplus.plugins.PaginationInterceptor"/>
</array>
</property>
</bean>
7.4 前台导航配置(config.js)
javascript
var projectName = '高校专业信息管理系统';
var indexNav = [
{ name: '学校概况', url: './pages/xuexiaogaokuang/detail.jsp' },
{ name: '招生政策', url: './pages/zhaoshengzhengce/detail.jsp' },
{ name: '专业信息', url: './pages/zhuanye/list.jsp' },
{ name: '课程信息', url: './pages/kecheng/list.jsp' },
{ name: '在线问答', url: './pages/zaixianwenda/list.jsp' },
{ name: '新闻资讯', url: './pages/news/list.jsp' },
];
八、环境要求与运行步骤
8.1 环境要求
| 环境 | 版本要求 |
|---|---|
| JDK | 1.7 及以上 |
| MySQL | 5.7+ |
| Maven | 3.x |
| Tomcat | 8.x / 9.x |
| IDE | IDEA / Eclipse |
8.2 运行步骤
1️⃣ 导入数据库
- 创建数据库
gz-ssmj(UTF-8编码) - 导入项目根目录下的
db.sql文件
2️⃣ 修改数据库配置
修改 src/main/resources/config.properties 文件:
properties
jdbc_url=jdbc:mysql://127.0.0.1:3306/gz-ssmj?useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false
jdbc_username=root # 修改为你的数据库用户名
jdbc_password=123456 # 修改为你的数据库密码
3️⃣ 部署运行
- 使用 IDEA / Eclipse 导入 Maven 项目
- 等待 Maven 下载依赖
- 配置 Tomcat 服务器
- 启动项目
4️⃣ 访问系统
| 端 | 访问地址 |
|---|---|
| 后台管理 | http://localhost:8080/gz-ssmj/index.jsp |
| 前台首页 | http://localhost:8080/gz-ssmj/front/index.jsp |
5️⃣ 默认账号
| 角色 | 账号 | 密码 |
|---|---|---|
| 管理员 | admin | admin |
| 学生 | 111 | 111 |
九、系统特点与亮点
- 前后台分离设计:前台面向学生用户展示信息,后台面向管理员进行数据管理,职责清晰
- 基于角色的权限控制 :通过
config.js中的菜单配置和后端拦截器实现细粒度的权限控制 - Token鉴权机制:用户登录后生成 Token,通过拦截器校验 Token 实现接口安全访问
- MyBatis-Plus 简化开发:使用 MyBatis-Plus 的通用 CRUD、条件构造器、分页插件,减少大量重复代码
- Druid 数据库连接池:使用阿里巴巴 Druid 连接池,支持连接池监控和 SQL 防火墙
- 在线客服系统:内置客服聊天功能,学生可以在线向管理员咨询问题
- 在线报名功能:学生可以直接在线进行专业报名,系统自动校验防止重复报名
- 富文本编辑:集成 TinyMCE 富文本编辑器,支持新闻资讯的图文混排编辑
- 响应式前端:使用 Layui + Vue.js 框架,支持不同设备的自适应展示
十、项目总结
本项目是一个功能完善的高校专业信息管理系统,采用经典的 SSM 框架进行开发,非常适合作为 Java Web 开发的学习项目。通过本项目可以学习到:
- SSM 框架的整合与配置
- MyBatis-Plus 的使用(通用 CRUD、条件构造器、分页)
- Token 鉴权与权限控制的实现
- 前后台分离的设计思路
- JSP + Vue.js + Layui 的混合使用
- Druid 连接池的配置
- 文件上传功能的实现
- 在线聊天功能的设计
📌 本项目仅供学习参考,如有问题欢迎在评论区留言交流!
🔗 如果本文对你有帮助,请点赞 👍 收藏 ⭐ 关注 🔔 支持一下!你的支持是我创作的最大动力!