基于javaweb+mysql的springboot美食菜谱分享平台系统设计和实现(java+springboot+mysql+ssm+thymeleaf+html+maven)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBoot美食菜谱分享平台系统设计和实现(java+springboot+mysql+ssm+thymeleaf+html+maven)
主要技术实现:spring、 springmvc、 springboot、mybatis 、session、 jquery 、 md5 、bootstarp.js 拦截器等。
具体主要功能模块如下:
1.用户模块管理:用户登录、用户注册、用户的查询、添加、删除操作、 2.美食分享笔记管理:分享笔记列表的展示、添加、修改、删除操作、 3.美食笔记详情管理:美食笔记详情列表的查看、添加、删除等操作、 4.管理员信息管理:管理员信息的查看、修改、 5.公告信息管理:公告信息的查看、添加、修改、删除操作、 6.用户模块管理:用户列表查询、添加、删除、 7.用户评论模块管理:用户评论查询、添加、删除、 8.注销退出登录管理
给大家截一部分效果图吧 系统首页主要功能:
分类查看没事菜谱信息以及智能推荐:
美食分享笔记详情信息查看、用户登录后可以进行评论、浏览量会增加、用户可以收藏当前文档信息、可以点击查看作者信息、可以对作者进行关注等操作:
用户评论操作:
富文本编辑器添加美食分享笔记:
个人中心我的收藏 我的关注等:
关注用户信息以及具体功能操作等:
后台管理主要功能:用户管理、美食菜谱笔记管理、美食菜谱详情发布以及评论等管理
trmpMap.put("publishDate", article.getPublishDate());
trmpMap.put("author", article.getAuthor());
trmpMap.put("classify", article.getClassify().getClassifyId());
trmpMap.put("click", article.getClick());
trmpMap.put("commentNum", article.getCommentNum());
trmpMap.put("isTop", article.getIsTop());
trmpMap.put("isOriginal", article.getIsOriginal());
trmpMap.put("imageName", article.getImageName());
resultMap.put("errorNo", 0);
resultMap.put("data", trmpMap);
return resultMap;
}
/**
* 添加或者修改文章
*
* @param article
* @return
*/
@RequestMapping("/save")
public Map<String, Object> save(Article article, @RequestParam(value = "_mode", required = false) String mode)
throws Exception {
Map<String, Object> resultMap = new HashMap<String, Object>();
if (article.getIsTop() == null) {
article.setIsTop(0);
}
if (article.getIsOriginal() == null) {
article.setIsOriginal(0);
}
if (article.getClick() == null) {
article.setClick(0);
}
if (article.getCommentNum() == null) {
article.setCommentNum(0);
}
if (StringUtil.isEmpty(article.getImageName())) {
article.setImageName("jzytp.JPG");
}
article.setPublishDate(new Date());
article.setContentNoTag(StringUtil.Html2Text(article.getContent()));
articleService.save(article);
if ("add".equals(mode)) {
articleIndex.addIndex(article);
} else if ("edit".equals(mode)) {
if (StringUtil.isEmpty(accessToken)) {
System.out.println("没有获取到响应参数");
}else{
OpenID openIDObj = new OpenID(accessToken);
openID = openIDObj.getUserOpenID();
UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
if(userInfoBean != null && userInfoBean.getRet() == 0 && StringUtil.isEmpty(userInfoBean.getMsg())){
//获取用户成功
User user=userService.findByOpenId(openID);
if(null != user){
//已经注册过,更新用户信息,直接将信息存入session 然后跳转
user.setNickname(userInfoBean.getNickname());
user.setHeadPortrait(userInfoBean.getAvatar().getAvatarURL100());
user.setSex(userInfoBean.getGender());
user.setLatelyLoginTime(new Date());
userService.save(user);
}else{
//该用户第一次登录 先注册
user = new User();
user.setOpenId(openID);
user.setNickname(userInfoBean.getNickname());
user.setHeadPortrait(userInfoBean.getAvatar().getAvatarURL100());
user.setSex(userInfoBean.getGender());
user.setRegistrationDate(new Date());
user.setLatelyLoginTime(new Date());
userService.save(user);
}
//存储用户信息
session.setAttribute("currentUser", user);
}
}
}else{
System.out.println("非法请求");
}
}catch (Exception e) {
e.printStackTrace();
}
return "redirect:/";
}
@RequestMapping("/loginOut")
public String loginOut(HttpSession session,HttpServletResponse response) throws IOException{
session.removeAttribute("currentUser");
return "redirect:/";
}
}
/**
* 添加或者修改时光轴
* @param timeline
* @return
*/
@RequestMapping("/save")
public Map<String, Object> save(Timeline timeline,String timeDate){
Map<String, Object> resultMap=new HashMap<String, Object>();
try {
timeline.setPublishDate(DateUtil.formatString(timeDate, "yyyy-MM-dd HH:mm:ss"));
System.out.println(DateUtil.formatString(timeDate, "yyyy-MM-dd HH:mm:ss"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
timelineService.save(timeline);
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
startupRunner.loadData();
return resultMap;
}
/**
* 批量删除时光轴
* @param ids
* @return
*/
@RequestMapping("/delete")
public Map<String, Object> delete(@RequestParam(value="timelineId")String ids){
Map<String, Object> resultMap=new HashMap<String, Object>();
String []idsStr=ids.split(",");
for(int i=0;i<idsStr.length;i++) {
timelineService.delete(Integer.parseInt(idsStr[i]));
}
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
startupRunner.loadData();
return resultMap;
}
}
/**
* QQ登录控制器
*
*/
@Controller
@RequestMapping("/QQ")
public class QQController {
@Resource
private UserService userService;
/**
* QQ登录跳转
* @param request
* @param response
* @throws IOException
*/
@RequestMapping("/qqLogin")
public void qqLogin(HttpServletRequest request,HttpServletResponse response) throws IOException{
response.setContentType("text/html;charset=utf-8");
try {
response.sendRedirect(new Oauth().getAuthorizeURL(request));
} catch (QQConnectException e) {
// TODO Auto-generated catch block
new QQConnectException("跳转到QQ登录页面异常");
}
}
mav.setViewName("redirect:/viewFocusUser");
return mav;
}
@RequestMapping("/addFocusUser/{userId}")
public ModelAndView addFocusUser(@PathVariable(value = "userId", required = false) Integer userId,
HttpSession session) {
ModelAndView mav = new ModelAndView();
User user = (User) session.getAttribute("user");// 当前登录用户
String userIds = user.getUserIds();
List<String> tempList = new ArrayList<>();
if (userIds != null) {
tempList = Arrays.asList(userIds.split(","));
}
List<String> lineIdList = new ArrayList<>(tempList);
lineIdList.add(userId.toString());
String ret = StringUtils.join(lineIdList, ",");
user.setUserIds(ret);
userService.save(user);
mav.setViewName("redirect:/viewFocusUser");
return mav;
}
/**
* 取消收藏
* @param request
* @param userId
* @return
*/
@RequestMapping("/removeCollection")
public ModelAndView removeCollection(HttpServletRequest request, String artId) {
ModelAndView mav = new ModelAndView();
User user = (User) request.getSession().getAttribute("user");// 当前登录用户
String artIds = user.getArticleIds();
if(artIds == null){
artIds = "";
}
List<String> tempList = Arrays.asList(artIds.split(","));
List<String> lineIdList = new ArrayList<>(tempList);
lineIdList.remove(artId);
String ret = StringUtils.join(lineIdList, ",");
user.setArticleIds(ret);
/**
* 前台页面请求
*
*/
@Controller
@RequestMapping("/foreground")
public class ForegroundController {
@Resource
private ArticleService articleService;
@Resource
private MusicService musicService;
@Resource
private ArticleIndex articleIndex;
@Resource
private UserService userService;
@Resource
private ClassifyService classifyService;
private String downloadImagePath = System.getProperty("user.dir") + "\\src\\main\\webapp"; // 图片下载路径
/**
mav.addObject("flag", flag);
}
} else {
mav.addObject("flag", flag);
}
}
mav.addObject("article", article);
mav.setViewName("/foreground/detail");
return mav;
}
/**
* 文章详情
*
* @return
*/
@RequestMapping("/myDetail/{id}")
public ModelAndView myDetail(@PathVariable(value = "id", required = false) Integer id, HttpSession session) {
ModelAndView mav = new ModelAndView();
articleService.increaseClick(id);
Article article = articleService.findById(id);
Article tempArticle = new Article();
tempArticle.setClassify(article.getClassify());
session.setAttribute("similarityList", articleService.list(tempArticle, null, null, 0, 10));
session.setAttribute("RandomArticleList", articleService.getRandomArticle(10)); // 10条随机文章
// 判断该文章是否收藏
boolean flag = false;
User user = (User) session.getAttribute("user");
if (user != null && user.getArticleIds() != null) {
String artIds = user.getArticleIds();
List<String> idsList = Arrays.asList(artIds.split(","));
if (idsList.contains(id.toString())) {
mav.addObject("flag", true);
} else {
mav.addObject("flag", flag);
}
}
/**
* 用户控制器
*
*/
@RestController
@RequestMapping("/admin/user")
public class UserAdminController {
@Resource
private UserService userService;
@Value("${MD5Salt}")
private String salt; // md5加密盐
/**
* 根据ID查找用户
* @param userId
* @return
*/
@RequestMapping("/findById")
public Map<String, Object> findById(Integer userId) {
Map<String, Object> resultMap = new HashMap<String, Object>();
User user = userService.findById(userId);
datas.add((Map<String, Object>) entry.getValue());
}
resultMap.put("datas", datas);
resultMap.put("result", 1);
}else {
resultMap.put("data", "还没有时光轴数据!");
}
return resultMap;
}
}
/**
* 友情链接控制器
*
*/
@RestController
@RequestMapping("/admin/link")
public class LinkAdminController {
@Resource
private LinkService linkService;
@Resource
private StartupRunner startupRunner;
/**
* 分页查询友情链接
* @param link
* @param page
* @param pageSize
* @return
*/
@RequestMapping("/list")
public Map<String, Object> list(Link link,@RequestParam(value="page",required=false)Integer page,@RequestParam(value="pageSize",required=false)Integer pageSize){
Map<String, Object> resultMap=new HashMap<String, Object>();
resultMap.put("errorNo", 0);
resultMap.put("data", linkService.list(link,page-1, pageSize));
resultMap.put("total", linkService.getCount(link));
return mav;
}
/**
* 收藏
* @param request
* @param userId
* @return
*/
@RequestMapping("/addCollection")
public ModelAndView addCollection(HttpServletRequest request, String artId) {
ModelAndView mav = new ModelAndView();
User user = (User) request.getSession().getAttribute("user");// 当前登录用户
String artIds = user.getArticleIds();
if(artIds == null){
artIds = "";
}
List<String> tempList = Arrays.asList(artIds.split(","));
List<String> lineIdList = new ArrayList<>(tempList);
lineIdList.add(artId);
String ret = StringUtils.join(lineIdList, ",");
user.setArticleIds(ret);
userService.save(user);
mav.setViewName("redirect:/viewCollection");
return mav;
}
}
/**
* QQ登录回调
* @param session
* @return
* @throws QQConnectException
*/
@RequestMapping(value="QQCallBack")
public String qqcallback(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws QQConnectException{
response.setContentType("text/html;charset=utf-8");
AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
String accessToken = null,
openID = null;
try {
String code = request.getParameter("code");
String state = request.getParameter("state");
String session_state= (String) session.getAttribute("qq_connect_state");
if(StringUtil.isNotEmpty(session_state) && session_state.equals(state)){
accessToken = accessTokenObj.getAccessToken();
session.setAttribute("accessToken", accessToken);
if (StringUtil.isEmpty(accessToken)) {
System.out.println("没有获取到响应参数");
}else{
OpenID openIDObj = new OpenID(accessToken);
openID = openIDObj.getUserOpenID();
UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
if(userInfoBean != null && userInfoBean.getRet() == 0 && StringUtil.isEmpty(userInfoBean.getMsg())){
//获取用户成功
User user=userService.findByOpenId(openID);
if(null != user){
//已经注册过,更新用户信息,直接将信息存入session 然后跳转
user.setNickname(userInfoBean.getNickname());
user.setHeadPortrait(userInfoBean.getAvatar().getAvatarURL100());
user.setSex(userInfoBean.getGender());
user.setLatelyLoginTime(new Date());
userService.save(user);
}else{
//该用户第一次登录 先注册
user = new User();
user.setOpenId(openID);
user.setNickname(userInfoBean.getNickname());
//根据网卡取本机配置的IP
InetAddress inet=null;
try {
inet = InetAddress.getLocalHost();
} catch (Exception e) {
e.printStackTrace();
}
ipAddress= inet.getHostAddress();
}
}
//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
if(ipAddress.indexOf(",")>0){
ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
}
}
return ipAddress;
}
/**
* 获取IP信息
* @Title: getAdd
* @param request
* @return 参数说明
* @return String 返回类型
* @throws
*/
public static String getAdd(HttpServletRequest request) {
//淘宝IP地址库:http://ip.taobao.com/instructions.php
String add = null;
String ip = getIpAddr(request);
try {
//URL U = new URL("http://ip.taobao.com/service/getIpInfo.php?ip=114.111.166.72");
URL U = new URL("http://ip.taobao.com/service/getIpInfo.php?ip="+ip);
URLConnection connection = U.openConnection();
connection.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String result = "";
String line;
while ((line = in.readLine())!= null){
result += line;
}
in.close();
JSONObject jsonObject = JSONObject.fromObject(result);
Map<String, Object> map = (Map) jsonObject;
String code = String.valueOf(map.get("code"));//0:成功,1:失败。
if("1".equals(code)){//失败
String data = String.valueOf(map.get("data"));//错误信息
}else if("0".equals(code)){//成功
Map<String, Object> data = (Map<String, Object>) map.get("data");
@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;
}
/**
public void qqLogin(HttpServletRequest request,HttpServletResponse response) throws IOException{
response.setContentType("text/html;charset=utf-8");
try {
response.sendRedirect(new Oauth().getAuthorizeURL(request));
} catch (QQConnectException e) {
// TODO Auto-generated catch block
new QQConnectException("跳转到QQ登录页面异常");
}
}
/**
* QQ登录回调
* @param session
* @return
* @throws QQConnectException
*/
@RequestMapping(value="QQCallBack")
public String qqcallback(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws QQConnectException{
response.setContentType("text/html;charset=utf-8");
AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
String accessToken = null,
openID = null;
try {
String code = request.getParameter("code");
String state = request.getParameter("state");
String session_state= (String) session.getAttribute("qq_connect_state");
if(StringUtil.isNotEmpty(session_state) && session_state.equals(state)){
accessToken = accessTokenObj.getAccessToken();
session.setAttribute("accessToken", accessToken);
if (StringUtil.isEmpty(accessToken)) {
System.out.println("没有获取到响应参数");
}else{
OpenID openIDObj = new OpenID(accessToken);
openID = openIDObj.getUserOpenID();
UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
if(userInfoBean != null && userInfoBean.getRet() == 0 && StringUtil.isEmpty(userInfoBean.getMsg())){
//获取用户成功
User user=userService.findByOpenId(openID);
if(null != user){
//已经注册过,更新用户信息,直接将信息存入session 然后跳转
user.setNickname(userInfoBean.getNickname());
user.setHeadPortrait(userInfoBean.getAvatar().getAvatarURL100());
user.setSex(userInfoBean.getGender());
user.setLatelyLoginTime(new Date());
userService.save(user);
}else{
//该用户第一次登录 先注册
// 查询公告
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);
public ModelAndView viewPerson(HttpServletRequest request) {
Admin admin = (Admin) request.getSession().getAttribute("adminUser");
ModelAndView mav = new ModelAndView();
Admin u = adminService.findById(admin.getAdminId());
mav.addObject("user", u);
mav.setViewName("/admin/adminViewPerson");
return mav;
}
/**
* 保存用户信息
*
* @param user
* @return
*/
@RequestMapping("/save")
public ModelAndView save(Admin user) {
ModelAndView mav = new ModelAndView();
adminService.save(user);
mav.setViewName("/admin/index");
return mav;
}
}
/**
/**
* QQ登录控制器
*
*/
@Controller
@RequestMapping("/QQ")
public class QQController {
@Resource
private UserService userService;
/**
* QQ登录跳转
* @param request
* @param response
* @throws IOException
*/
@RequestMapping("/qqLogin")
public void qqLogin(HttpServletRequest request,HttpServletResponse response) throws IOException{
response.setContentType("text/html;charset=utf-8");
try {
response.sendRedirect(new Oauth().getAuthorizeURL(request));
} catch (QQConnectException e) {
// TODO Auto-generated catch block