美食分享|基于Springboot+Vue实现美食分享网站

简介: 美食分享|基于Springboot+Vue实现美食分享网站

项目编号:BS-PT-111

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术:Springboot+Vue

二,项目简介

本项目基于Springboot+Vue实现了一个前后端分离美食分享平台系统。系统用户分为三类:前端注册用户、注册认证的厨师、平台系统管理员。普通用户和厨师可以在线进行注册,厨师注册后需要平台管理员进行审核其厨师证。

用户功能:浏览菜谱、厨师信息,浏览新闻,在线讨论。点赞、收藏、评论到动操作。对厨师可以打赏,并进行在线咨询做菜的相关事宜,同时提供用户个人中心对这些信息进行管理操作。

厨师功能:浏览菜谱、厨师信息,浏览新闻,在线讨论。点赞、收藏、评论到动操作。对用户的咨询信息进行回复。

管理员功能:主要进行基本信息的管理,用户管理、菜谱分类和菜谱管理,话题管理,新闻资讯管理,对用户互动的操作信息管理,轮播图管理等。

三,系统展示

系统首页

菜谱查询

厨师查看

话题交流

新闻查看

普通用户个人中心

厨师用户个人中心

管理员后台管理功能

管理员管理

厨师管理

用户管理

菜谱管理

话题管理

新闻查询

系统管理

四,核心代码展示

package com.spring.controller;
import com.jntoo.db.*;
import com.jntoo.db.utils.*;
import com.spring.dao.*;
import com.spring.entity.*;
import com.spring.service.*;
import com.spring.util.*;
import com.spring.util.Info;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import tk.mybatis.mapper.entity.Example;
/**
 * 管理员 */
@Controller
public class AdminsController extends BaseController {
    @Autowired
    private AdminsMapper dao;
    @Autowired
    private AdminsService service;
    /**
     *  后台列表页
     *
     */
    @RequestMapping("/admins_list")
    public String list() {
        // 检测是否有登录,没登录则跳转到登录页面
        if (!checkLogin()) {
            return showError("尚未登录", "./login.do");
        }
        String order = Request.get("order", "id"); // 获取前台提交的URL参数 order  如果没有则设置为id
        String sort = Request.get("sort", "desc"); // 获取前台提交的URL参数 sort  如果没有则设置为desc
        int pagesize = Request.getInt("pagesize", 12); // 获取前台一页多少行数据
        Example example = new Example(Admins.class); //  创建一个扩展搜索类
        Example.Criteria criteria = example.createCriteria(); // 创建一个扩展搜索条件类
        String where = " 1=1 "; // 创建初始条件为:1=1
        where += getWhere(); // 从方法中获取url 上的参数,并写成 sql条件语句
        criteria.andCondition(where); // 将条件写进上面的扩展条件类中
        if (sort.equals("desc")) { // 判断前台提交的sort 参数是否等于  desc倒序  是则使用倒序,否则使用正序
            example.orderBy(order).desc(); // 把sql 语句设置成倒序
        } else {
            example.orderBy(order).asc(); // 把 sql 设置成正序
        }
        int page = request.getParameter("page") == null ? 1 : Integer.valueOf(request.getParameter("page")); // 获取前台提交的URL参数 page  如果没有则设置为1
        page = Math.max(1, page); // 取两个数的最大值,防止page 小于1
        List<Admins> list = service.selectPageExample(example, page, pagesize); // 获取当前页的行数
        // 将列表写给界面使用
        assign("totalCount", request.getAttribute("totalCount"));
        assign("list", list);
        assign("orderby", order); // 把当前排序结果写进前台
        assign("sort", sort); // 把当前排序结果写进前台
        return json(); // 将数据写给前端
    }
    public String getWhere() {
        _var = new LinkedHashMap(); // 重置数据
        String where = " ";
        // 以下也是一样的操作,判断是否符合条件,符合则写入sql 语句
        if (!Request.get("username").equals("")) {
            where += " AND username LIKE '%" + Request.get("username") + "%' ";
        }
        return where;
    }
    @RequestMapping("/admins_add")
    public String add() {
        _var = new LinkedHashMap(); // 重置数据
        return json(); // 将数据写给前端
    }
    @RequestMapping("/admins_updt")
    public String updt() {
        _var = new LinkedHashMap(); // 重置数据
        int id = Request.getInt("id");
        // 获取行数据,并赋值给前台jsp页面
        Admins mmm = service.find(id);
        assign("mmm", mmm);
        assign("updtself", 0);
        return json(); // 将数据写给前端
    }
    @RequestMapping("/admins_updtself")
    public String updtself() {
        _var = new LinkedHashMap(); // 重置数据
        // 更新个人资料
        int id = (int) request.getSession().getAttribute("id");
        Admins mmm = service.find(id);
        assign("mmm", mmm);
        assign("updtself", 1);
        return json(); // 将数据写给前端
    }
    /**
     * 添加内容
     * @return
     */
    @RequestMapping("/adminsinsert")
    public String insert() {
        _var = new LinkedHashMap(); // 重置数据
        String tmp = "";
        Admins post = new Admins(); // 创建实体类
        // 设置前台提交上来的数据到实体类中
        post.setUsername(Request.get("username"));
        post.setPwd(Request.get("pwd"));
        service.insert(post); // 插入数据
        int charuid = post.getId().intValue();
        if (isAjax()) {
            return jsonResult(post);
        }
        return showSuccess("保存成功", Request.get("referer").equals("") ? request.getHeader("referer") : Request.get("referer"));
    }
    /**
     * 更新内容
     * @return
     */
    @RequestMapping("/adminsupdate")
    public String update() {
        _var = new LinkedHashMap(); // 重置数据
        // 创建实体类
        Admins post = new Admins();
        // 将前台表单数据填充到实体类
        if (!Request.get("username").equals("")) post.setUsername(Request.get("username"));
        if (!Request.get("pwd").equals("")) post.setPwd(Request.get("pwd"));
        post.setId(Request.getInt("id"));
        service.update(post); // 更新数据
        int charuid = post.getId().intValue();
        if (isAjax()) {
            return jsonResult(post);
        }
        if (Request.getInt("updtself") == 1) {
            return showSuccess("保存成功", "admins_updtself.do");
        }
        return showSuccess("保存成功", Request.get("referer")); // 弹出保存成功,并跳转到前台提交的 referer 页面
    }
    /**
     *  删除
     */
    @RequestMapping("/admins_delete")
    public String delete() {
        _var = new LinkedHashMap(); // 重置数据
        if (!checkLogin()) {
            return showError("尚未登录");
        }
        int id = Request.getInt("id"); // 根据id 删除某行数据
        Map map = Query.make("admins").find(id);
        service.delete(id); // 根据id 删除某行数据
        return showSuccess("删除成功", request.getHeader("referer")); //弹出删除成功,并跳回上一页
    }
}
package com.spring.controller;
import com.alibaba.fastjson.JSON;
import com.spring.util.JsonResult;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
/**
 * 控制器基类
 */
public abstract class BaseController {
    @Autowired
    protected HttpServletRequest request; // 注入
    @Autowired
    protected HttpServletResponse response; // 注入
    @Autowired
    protected HttpSession session; // 注入
    protected ModelAndView mView;
    protected Map<Object, Object> _var;
    /**
     * 控制器
     */
    public BaseController() {
        //request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        //response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
        mView = new ModelAndView();
        _var = new LinkedHashMap();
    }
    /**
     * 往模板中写入数据
     * @param name
     * @param value
     */
    protected void assign(String name, Object value) {
        request.setAttribute(name, value);
        _var.put(name, value);
    }
    /**
     * 弹出框
     * @param message
     * @param code
     * @param jumpUrl
     * @param jumpTime
     * @return
     */
    protected String showMessage(String message, int code, Object data, String jumpUrl, int jumpTime) {
        if (isAjax()) {
            JsonResult jsonResult = new JsonResult(code, message, data);
            return renderString(response, JSON.toJSONString(jsonResult));
        }
        assign("message", message == null ? data : message);
        assign("code", code);
        assign("jumpUrl", jumpUrl);
        assign("jumpTime", jumpTime);
        return "message";
    }
    /**
     * 将写入json写到前端
     * @return
     */
    public String json() {
        return jsonResult(_var);
    }
    public String jsonReturn(String message, int code, Object data) {
        JsonResult result = new JsonResult(code, message, data);
        return renderString(response, JSON.toJSONString(result));
    }
    public String jsonResult(Object data) {
        return jsonReturn(null, 0, data);
    }
    public String jsonError(String msg) {
        return jsonReturn(msg, 1, null);
    }
    public Object getRequestAttributeMap() {
        //Map<Object,Object> map = new LinkedHashMap();
        Enumeration<String> names = request.getAttributeNames();
        while (names.hasMoreElements()) {
            String key = names.nextElement();
            if (!_var.containsKey(key)) {
                // 没有,则写入
                _var.put(key, request.getAttribute(key));
            }
        }
        return _var;
    }
    public String getJson() {
        Map<Object, Object> map = new LinkedHashMap();
        Enumeration<String> names = request.getAttributeNames();
        while (names.hasMoreElements()) {
            String key = names.nextElement();
            Object value = request.getAttribute(key);
            map.put(key, value);
        }
        return renderString(response, JSON.toJSONString(map));
    }
    /**
     * 将字符串渲染到客户端
     *
     * @param response 渲染对象
     * @param string 待渲染的字符串
     * @return null
     */
    public String renderString(HttpServletResponse response, String string) {
        try {
            request.getSession();
            OutputStream stream = response.getOutputStream();
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            stream.write(string.getBytes());
            stream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
    }
    protected boolean isAjax() {
        String accept = request.getHeader("accept");
        if (accept != null && accept.indexOf("application/json") != -1) {
            return true;
        }
        String xRequestedWith = request.getHeader("X-Requested-With");
        if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) {
            return true;
        }
        String ajax = request.getParameter("format");
        if ("json".equalsIgnoreCase(ajax)) {
            return true;
        }
        return false;
    }
    /**
     * 检测是否登录
     * @return
     */
    protected boolean checkLogin() {
        if (request.getSession().getAttribute("username") == null || "".equals(request.getSession().getAttribute("username"))) {
            return false;
        }
        return true;
    }
    /**
     * 弹出错误信息
     * @param message
     * @return
     */
    protected String showError(String message) {
        return showMessage(message, 1, null, "javascript:history(-1);", 2250);
    }
    /**
     *  弹出错误信息
     * @param message
     * @param code
     * @return
     */
    protected String showError(String message, int code) {
        return showMessage(message, code, null, "javascript:history(-1);", 2250);
    }
    /**
     * 弹出错误信息
     * @param message
     * @param url
     * @return
     */
    protected String showError(String message, String url) {
        return showMessage(message, 1, null, url, 2250);
    }
    /**
     * 弹出成功信息
     * @param data
     * @return
     */
    protected String showSuccess(Object data) {
        return showMessage(null, 0, data, request.getHeader("referer"), 2250);
    }
    /**
     * 弹出成功信息
     * @param data
     * @param url
     * @return
     */
    protected String showSuccess(String data, String url) {
        return showMessage(null, 0, data, url, 2250);
    }
}

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

相关文章
|
7月前
|
JavaScript Java 关系型数据库
毕设项目-基于Springboot和Vue实现蛋糕商城系统(一)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
190 0
|
7月前
|
人工智能 JavaScript 前端开发
毕设项目-基于Springboot和Vue实现蛋糕商城系统(三)
毕设项目-基于Springboot和Vue实现蛋糕商城系统
|
4月前
|
Java 关系型数据库 MySQL
水果商城系统 SpringBoot+Vue
这篇文章介绍了一个使用SpringBoot+Vue开发的前台和管理员端的水果商城系统,包括用户功能如登录、注册、商品浏览、购物车、订单处理等,以及管理员功能如用户管理、商品管理、新闻公告管理等。
水果商城系统 SpringBoot+Vue
|
4月前
|
JavaScript Java 关系型数据库
美妆商城系统 SpringBoot + Vue 【毕业设计 资料 + 源码】
这篇文章介绍了一个使用SpringBoot + Vue + Mybatis + Mysql技术栈开发的美妆商城系统,包括系统功能划分、部分页面截图和前后端源码示例,并提供了GitHub上的源码链接。
美妆商城系统 SpringBoot + Vue 【毕业设计 资料 + 源码】
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的厨房达人美食分享平台的详细设计和实现
基于SpringBoot+Vue的厨房达人美食分享平台的详细设计和实现
55 0
基于SpringBoot+Vue的厨房达人美食分享平台的详细设计和实现
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的“力炫”健身馆网站的详细设计和实现
基于SpringBoot+Vue的“力炫”健身馆网站的详细设计和实现
29 0
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue的动漫周边商城的详细设计和实现
基于SpringBoot+Vue的动漫周边商城的详细设计和实现
64 0
|
7月前
|
SQL JavaScript Java
springboot+vue家具网站(源码+文档)
家具网站为用户提供在线购买的服务,前台用户注册后,进行在线购买需要的家具,后台管理员登录后管理家具信息。 会员未登录前,浏览系统上的所有公告信息,查看最新的活动,查看各种通知或者优惠信息。通过家具分类,查看分类对应的家具。家具信息一般包括家具图片,家具描述和价格信息。会员使用本系统前,进行注册,填写个人信息。包括账号和密码,设置地址信息。信息注册后,后台需要对信息进行审核,通过审核的才能进行登录。会员通过搜索查找到家具后,先把家具加入到购物车中,也可以收藏家具,以供下次继续预订。在个人购物车中,可以修改订购的家具数量,或者删除家具。完成购物车的编辑后,提交购物车家具到收银台进行订单结算。订单生
|
7月前
|
JavaScript Java 关系型数据库
springboot+vue校园新闻网站(源码+说明文档)
本文介绍了一个基于SpringBoot的校园新闻网站项目。开发环境包括Java 1.8、SpringBoot、Mybatis、MySQL 5.7+、Navicat11、Eclipse/IDEA和Maven3.6。前端使用了Node.js和Vue。系统架构包括管理员和用户两个模块。管理员可进行用户、新闻类型、新闻、留言板和论坛管理,用户则能访问首页、新闻、论坛、留言和个人中心。网站实现了用户注册登录、新闻查看、个人中心更新、论坛发帖和留言等功能。此外,还提供了一些Java面试相关的学习资源。
|
7月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp微信小程序的美食推荐商城的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的美食推荐商城的详细设计和实现