基于java ssm springboot实现选课推荐交流平台系统

作者:java李阳勇 时间:2023-06-30 08:22:25 

夏天到了、小雪来给大家降降温

基于java ssm springboot实现选课推荐交流平台系统

话不多说、直接进入主题

主要功能模块设计:

登录注册、首页信息浏览、选课分类查看、选课详情查看、评论交流、收藏、浏览量、以及后台数据管理、用户管理、选课类别管理、选课信息详情管理、评论交流和回复管理、以及公告信息管理等

主要技术:

Java、springmvc、mybatis、mysql、tomcat、jquery、layui、JavaScript、html、css、jsp、log4j等一些常见的基本技术。

主要功能实现前端:

选课平台首页:

输入http://localhost/访问选课推荐交流平台首页、可以查看轮播图以及各类信息、点击进入详情页面

基于java ssm springboot实现选课推荐交流平台系统

基于java ssm springboot实现选课推荐交流平台系统

登录注册管理:

基于java ssm springboot实现选课推荐交流平台系统

选课推荐分类:

点击查看分类课程推荐信息、按照类别查看课程信息、管理员可以在后台添加课程分类信息

以及根据访问量来进行点击排行、

基于java ssm springboot实现选课推荐交流平台系统

课程详情信息:

课程详情可以查看课程详情信息以及作者信息和浏览量等具体数据、也可以进行评论和收藏等操作

基于java ssm springboot实现选课推荐交流平台系统

基于java ssm springboot实现选课推荐交流平台系统

我的个人中心:

包括我的个人信息和收藏夹信息、

基于java ssm springboot实现选课推荐交流平台系统

主要功能实现后台:

系统主页设计:

主要功能模块有首页的信息统计、选课类型管理、选课详情管理、用户管理、评论和公告管理等数据维护。

基于java ssm springboot实现选课推荐交流平台系统

选课类型管理:

基于java ssm springboot实现选课推荐交流平台系统

选课信息详情管理:

列表信息查看添加修改删除以及检索等操作

基于java ssm springboot实现选课推荐交流平台系统

详情信息

基于java ssm springboot实现选课推荐交流平台系统

通知公告信息:

数据列表查看和添加修改删除等操作

基于java ssm springboot实现选课推荐交流平台系统

用户信息管理:

基于java ssm springboot实现选课推荐交流平台系统

评论交流回复管理:

评论和回复的数据管理

基于java ssm springboot实现选课推荐交流平台系统

部分关键代码展示:

登录模块:


package com.longwang.controller;

import com.longwang.entity.Article;
import com.longwang.entity.Classify;
import com.longwang.entity.User;
import com.longwang.service.ArticleService;
import com.longwang.service.ClassifyService;
import com.longwang.service.NoticeService;
import com.longwang.service.UserService;
import com.longwang.util.DateUtil;
import com.longwang.util.StringUtil;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.util.*;

/**
* 根路径以及其他请求处理
*
* @author 李杨勇
*
*/
@Controller
public class IndexController {

@Value("${imageFilePath}")
 private String imageFilePath; // 文件路径

@Resource
 private NoticeService noticeService;

@Resource
 private UserService userService;

@Resource
 private ArticleService articleService;
 @Resource
 private ClassifyService classifyService;

@RequestMapping("/")
 public String index(HttpSession session) {

// 查询公告
   session.setAttribute("noticeList", noticeService.list(0, 5));
   return "index";// 跳转到index.html
 }

@RequestMapping("/delete")
 public Map<String, Object> delete(Integer userId) {
   Map<String, Object> resultMap = new HashMap<String, Object>();
   userService.delete(userId);
   resultMap.put("errorNo", 0);
   return resultMap;
 }
 /**
  * 登录页面
  *
  * @return
  */
 @RequestMapping("/login")
 public String login() {
   return "login";
 }

/**
  * 前台登录页面
  *
  * @return
  */
 @RequestMapping("/webLogin")
 public String webLogin() {
   return "webLogin";
 }

/**
  * 注册
  *
  * @return
  */
 @RequestMapping("/regist")
 public String regist() {
   return "regist";
 }

/**
  * 保存注册信息
  *
  * @param user
  * @return
  */
 @RequestMapping("/saveUser")
 public String saveUser(User user) {
     List<Article> randomArticle = articleService.getRandomArticle(3);
     String ids="";
     for (int i = 0; i < randomArticle.size(); i++) {
         Integer articleId = randomArticle.get(i).getArticleId();
         ids+=articleId+",";
     }
     ids = ids.substring(0, ids.length() -1);
     user.setArticleIds(ids);
     userService.save(user);

return "webLogin";
 }

/**
  * 退出登录
  *
  * @param request
  * @return
  */
 @RequestMapping("/quit")
 public String quit(HttpServletRequest request) {
   HttpSession session = request.getSession();
   session.removeAttribute("user");
   return "index";
 }

/**
  * 退出登录
  *
  * @param request
  * @return
  */
 @RequestMapping("/quitAdmin")
 public String quitAdmin(HttpServletRequest request) {
   HttpSession session = request.getSession();
   session.removeAttribute("user");
   return "login";
 }

/**
  * 验证登录
  *
  * @param user
  * @param request
  * @return
  */
 @RequestMapping("/checkLogin")
 public ModelAndView checkLogin(User user, HttpServletRequest request) {
   ModelAndView mav = new ModelAndView();
   HttpSession session = request.getSession();
   User u = userService.findByUsernameAndPassword(user.getUsername(), user.getPassword());
   if (u == null) {
     mav.addObject("user", user);
     mav.addObject("errorInfo", "用户名或者密码错误!");
     mav.setViewName("webLogin");
   } else {
     u.setLatelyLoginTime(new Date());
     userService.save(u);
     session.setAttribute("user", u);
     mav.addObject("username", u.getUsername());
     mav.addObject("user", u);
     mav.addObject("success", true);
     mav.setViewName("/index");
   }
   return mav;
 }

/**
  * 查看个人信息
  *
  * @return
  */
 @RequestMapping("viewPerson")
 public ModelAndView viewPerson(HttpServletRequest request) {
   User user = (User) request.getSession().getAttribute("user");
   ModelAndView mav = new ModelAndView();
   User u = userService.findById(user.getUserId());
   mav.addObject("user", u);
   mav.setViewName("/viewPerson");
   return mav;
 }

/**
  * 查看个人课程收藏夹
  *
  * @return
  */
 @RequestMapping("viewCollection")
 public ModelAndView viewCollection(HttpServletRequest request, HttpSession session) {
   User user = (User) request.getSession().getAttribute("user");
   ModelAndView mav = new ModelAndView();
   User u = userService.findById(user.getUserId());
   String artIds = u.getArticleIds();
   List<String> result = new ArrayList<>();
   if (StringUtils.isNotBlank(artIds)) {
     result = Arrays.asList(StringUtils.split(artIds, ","));
   }
   List<Integer> retIds = new ArrayList<>();
   for (String temp : result) {
     retIds.add(Integer.valueOf(temp).intValue());
   }
   List<Article> retArt = articleService.findByListId(retIds);
   session.setAttribute("noticeList", noticeService.list(0, 5));
   mav.addObject("retArt", retArt);
   mav.addObject("user", u);
   mav.setViewName("/viewCollection");
   return mav;
 }

/**
  * 查看个人关注用户
  *
  * @return
  */
 @RequestMapping("viewFocusUser")
 public ModelAndView viewFocusUser(HttpServletRequest request, HttpSession session) {
   User user = (User) request.getSession().getAttribute("user");
   ModelAndView mav = new ModelAndView();
   User u = userService.findById(user.getUserId());
   String userIds = u.getUserIds();
   List<String> result = new ArrayList<>();
   if (StringUtils.isNotBlank(userIds)) {
     result = Arrays.asList(StringUtils.split(userIds, ","));
   }
   List<Integer> retIds = new ArrayList<>();
   for (String temp : result) {
     retIds.add(Integer.valueOf(temp).intValue());
   }
   List<User> retArt = userService.findByListId(retIds);
   session.setAttribute("noticeList", noticeService.list(0, 5));
   mav.addObject("retArt", retArt);
   mav.addObject("user", u);
   mav.setViewName("/viewFocusUser");
   return mav;
 }

/**
  * 保存用户信息
  *
  * @param user
  * @return
  */
 @RequestMapping("/save")
 public ModelAndView save(User user) {
   ModelAndView mav = new ModelAndView();
   userService.save(user);
   mav.setViewName("/index");
   return mav;
 }

/**
  * 写笔记页面
  *
  * @param request
  * @return
  */
 // @RequestMapping("notePage")
 // public String notePage(HttpServletRequest request, Model model) {
 // User user = (User) request.getSession().getAttribute("user");
 // if (user == null) {
 // return "webLogin";
 // }
 // List<Classify> list = classifyService.findAll();
 // model.addAttribute("list", list);
 // return "one";
 // }

@RequestMapping("notePage")
 public ModelAndView notePage(HttpServletRequest request) {
   ModelAndView mav = new ModelAndView();
   User user = (User) request.getSession().getAttribute("user");
   if (user == null) {
     mav.setViewName("/webLogin");
     return mav;
   }
   List<Classify> list = classifyService.findAll();
   mav.addObject("list", list);
   mav.setViewName("/one");
   return mav;
 }

/**
  * 保存笔记
  *
  * @param article
  * @param request
  * @return
  */
 @RequestMapping("addNote")
 public ModelAndView addNote(Article article, HttpServletRequest request) {
   ModelAndView mav = new ModelAndView();
   // 获取当前用户信息
   User user = (User) request.getSession().getAttribute("user");
   article.setUserId(user.getUserId());
   article.setPublishDate(new Date());
   article.setClick(0);
   article.setCommentNum(0);
   article.setContentNoTag(StringUtil.Html2Text(article.getContent()));
   articleService.save(article);
   mav.setViewName("/index");
   return mav;
 }

@RequestMapping("saveNote")
 public ModelAndView saveNote(Article article, HttpServletRequest request) {
   ModelAndView mav = new ModelAndView();
   Article a = articleService.findById(article.getArticleId());
   article.setPublishDate(a.getPublishDate());
   // 获取当前用户信息
   articleService.save(article);
   mav.setViewName("/index");
   return mav;
 }

/**
  * 查看笔记
  *
  * @return
  */
 @RequestMapping("viewNote")
 public String viewNote(HttpSession session) {
   session.setAttribute("noticeList", noticeService.list(0, 5));
   return "mylist";
 }

@RequestMapping("/delete/{id}")
 public String delete(@PathVariable(value = "id") String id) throws Exception {
   articleService.delete(Integer.parseInt(id));
   return "mylist";
 }

/**
  * 查看个人笔记加载数据列表
  *
  * @param article
  * @param publishDates
  * @param page
  * @param pageSize
  * @return
  */
 @RequestMapping("/mylist")
 public Map<String, Object> list(Article article,
     @RequestParam(value = "publishDates", required = false) String publishDates,
     @RequestParam(value = "page", required = false) Integer page,
     @RequestParam(value = "pageSize", required = false) Integer pageSize, HttpServletRequest request) {
   Map<String, Object> resultMap = new HashMap<String, Object>();
   // User user = (User) request.getSession().getAttribute("user");
   // article.setUserId(user.getUserId());
   String s_bPublishDate = null; // 开始时间
   String s_ePublishDate = null; // 结束时间
   if (StringUtil.isNotEmpty(publishDates)) {
     String[] strs = publishDates.split(" - "); // 拆分时间段
     s_bPublishDate = strs[0];
     s_ePublishDate = strs[1];
   }
   Long total = articleService.getCount(article, s_bPublishDate, s_ePublishDate);
   int totalPage = (int) (total % pageSize == 0 ? total / pageSize : total / pageSize + 1); // 总页数
   resultMap.put("totalPage", totalPage);
   resultMap.put("errorNo", 0);
   resultMap.put("data", articleService.list(article, s_bPublishDate, s_ePublishDate, page - 1, pageSize));
   resultMap.put("total", total);
   return resultMap;
 }

/**
  * 后台默认首页
  *
  * @return
  */
 @RequestMapping("/index")
 public String root() {
   return "/common/index";
 }

/**
  * 博主信息页面
  *
  * @return
  */
 @RequestMapping("/blogger")
 public String blogger() {
   return "/blogger/index";
 }

/**
  * 图片上传处理 @Title: ckeditorUpload @param file 图片文件 @return 参数说明 @return
  * Map<String,Object> 返回类型 @throws
  */
 @ResponseBody
 @RequestMapping("/upload")
 public Map<String, Object> ckeditorUpload(@RequestParam("file") MultipartFile file) {
   Map<String, Object> resultMap = new HashMap<String, Object>();
   Map<String, Object> resultMap1 = new HashMap<String, Object>();
   String fileName = file.getOriginalFilename(); // 获取文件名
   String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 获取文件的后缀
   String newFileName = "";
   try {
     newFileName = DateUtil.getCurrentDateStr() + suffixName; // 新文件名
     FileUtils.copyInputStreamToFile(file.getInputStream(), new File(imageFilePath + newFileName)); // 上传
   } catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   }
   resultMap.put("code", 0);
   resultMap1.put("filePath", newFileName);
   resultMap.put("data", resultMap1);
   return resultMap;
 }

}

配置模块:


server:
 port: 80
 servlet:
   context-path: /

spring:
 datasource:
   driver-class-name: com.mysql.jdbc.Driver
   url: jdbc:mysql://localhost:3306/choosing_courses?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
   username: root
   password: 123456
 jpa:
   hibernate:
     ddl-auto: update
   show-sql: true
   database-platform: org.hibernate.dialect.MySQLDialect
 thymeleaf:
   cache: false

thymeleaf:
   prefix: classpath:/templates/

MD5Salt: longwang

imageFilePath: C:\\Users\\Administrator\\Desktop\\choosingCourses\\src\\main\\webapp\\static\\images\\
downloadImagePath:  C:\\Users\\Administrator\\Desktop\\choosingCourses\\src\\main\\webapp
lucenePath: C:\\Users\\Administrator\\Desktop\\choosingCourses\\lucene

主要表设计:

用户表:


CREATE TABLE `NewTable` (
`user_id`  int(11) NOT NULL AUTO_INCREMENT ,
`head_portrait`  varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`lately_login_time`  datetime NULL DEFAULT NULL ,
`nickname`  varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`registration_date`  datetime NULL DEFAULT NULL ,
`sex`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`open_id`  varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`password`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`username`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`article_ids`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`birthday`  date NULL DEFAULT NULL ,
`momo`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`phone`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`user_ids`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`user_id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=20
ROW_FORMAT=COMPACT
;

选课类型表:


CREATE TABLE `NewTable` (
`classify_id`  int(11) NOT NULL AUTO_INCREMENT ,
`classify_name`  varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL ,
PRIMARY KEY (`classify_id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
AUTO_INCREMENT=27
ROW_FORMAT=COMPACT
;

选课详情表:


CREATE TABLE `NewTable` (
`article_id`  int(11) NOT NULL AUTO_INCREMENT ,
`author`  varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL ,
`click`  int(11) NULL DEFAULT NULL ,
`comment_num`  int(11) NULL DEFAULT NULL ,
`content`  text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL ,
`image_name`  varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`is_original`  int(11) NULL DEFAULT NULL ,
`is_top`  int(11) NULL DEFAULT NULL ,
`publish_date`  datetime NULL DEFAULT NULL ,
`title`  varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL ,
`classify_id`  int(11) NULL DEFAULT NULL ,
`user_id`  int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`article_id`),
FOREIGN KEY (`classify_id`) REFERENCES `t_classify` (`classify_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
INDEX `FKo4fros4yfq1m9ay7sgtlcvbc4` (`classify_id`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
AUTO_INCREMENT=58
ROW_FORMAT=COMPACT
;

评论交流表:


CREATE TABLE `NewTable` (
`comment_id`  int(11) NOT NULL AUTO_INCREMENT ,
`comment_date`  datetime NULL DEFAULT NULL ,
`content`  varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`article_id`  int(11) NULL DEFAULT NULL ,
`user_id`  int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`comment_id`),
FOREIGN KEY (`article_id`) REFERENCES `t_article` (`article_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
FOREIGN KEY (`user_id`) REFERENCES `t_user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
INDEX `FKlsvvc2ob8lxg2m9qqry15ru0y` (`article_id`) USING BTREE ,
INDEX `FKtamaoacctq4qpko6bvtv0ke1p` (`user_id`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
AUTO_INCREMENT=15
ROW_FORMAT=COMPACT
;

回复信息表:


CREATE TABLE `NewTable` (
`reply_id`  int(11) NOT NULL AUTO_INCREMENT ,
`content`  varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`reply_date`  datetime NULL DEFAULT NULL ,
`comment_id`  int(11) NULL DEFAULT NULL ,
`user_id`  int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`reply_id`),
FOREIGN KEY (`comment_id`) REFERENCES `t_comment` (`comment_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
FOREIGN KEY (`user_id`) REFERENCES `t_user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
INDEX `FKk4ydp71wampdbnguly8iks4rf` (`comment_id`) USING BTREE ,
INDEX `FKslt6r79iw1p9cbxns09erjv6v` (`user_id`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
AUTO_INCREMENT=6
ROW_FORMAT=COMPACT
;

来源:https://lyyong.blog.csdn.net/article/details/118344279

标签:java,交流平台系统,springboot
0
投稿

猜你喜欢

  • Android集成Flutter

    2023-07-06 13:07:33
  • 详解Android中Intent的使用方法

    2023-08-02 04:40:29
  • Java编程将汉字转Unicode码代码示例

    2023-11-09 17:33:39
  • Android编程实现google消息通知功能示例

    2023-02-02 20:00:27
  • Android开发中如何模拟输入

    2022-03-02 02:07:18
  • C#实现打印与打印预览功能的思路及代码

    2021-09-17 02:51:06
  • mybatisplus之Wrappers.ne踩坑记录解决

    2021-08-28 10:13:13
  • Android编程实现Toast只显示最后一条的方法

    2023-12-13 11:54:49
  • Java Git Commit Message使用规范

    2023-03-15 07:50:43
  • C# winform实现右下角弹出窗口结果的方法

    2023-02-05 14:22:57
  • Java Objects工具类原理及用法详解

    2022-10-15 01:40:35
  • 解析Android横竖屏切换的问题

    2021-07-20 11:37:58
  • java 数据类型有哪些取值范围多少

    2023-01-18 06:13:44
  • Spring Security前后分离校验token的实现方法

    2023-06-26 17:00:30
  • 结合线程池实现apache kafka消费者组的误区及解决方法

    2023-08-06 15:40:31
  • C#多线程及同步示例简析

    2022-02-25 22:12:43
  • Java中方法的重写与成员变量的隐藏

    2023-06-01 01:35:55
  • Android波纹扩散效果之仿支付宝咻一咻功能实现波纹扩散特效

    2023-07-06 17:22:01
  • 关于C#中的Invoke示例详解

    2023-06-20 10:17:14
  • 通过Java带你了解网络IO模型

    2022-12-25 10:59:22
  • asp之家 软件编程 m.aspxhome.com