Java课程设计项目-servlet+jsp美食系统、菜品管理系统

文章目录

  • Java课程设计项目-servlet+jsp美食系统
    • 一、项目介绍
    • 二、技术介绍
      • 2.1 环境需要
      • 2.2 技术栈
    • 环境需要
    • 三、功能实现
      • 3.1登录注册
      • 3.2首页菜品展示、轮播图
      • 3.3美食菜品分类、查询
      • 3.4作品动态、个人简介、菜品收藏
      • 3.5创建菜谱、添加步骤
    • 四、系统代码展示
      • 4.1项目架构(MVC)
      • 4.2部分代码展示
  • 获取源码

Java课程设计项目-servlet+jsp美食系统

一、项目介绍

项目功能包含:

  1. 用户登录、注册
  2. 首页菜品展示、轮播图
  3. 美食菜品分类、查询
  4. 作品动态、个人简介、菜品收藏
  5. 创建菜谱、添加步骤

二、技术介绍

2.1 环境需要

  • 运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
  • IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
  • tomcat环境:Tomcat 7.x,8.x,9.x版本均可
  • 硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
  • 数据库:MySql 5.7版本;
  • 是否Maven项目:否;

2.2 技术栈

环境需要

  • Serverlet+JSP+CSS+JavaScript+mysql

三、功能实现

3.1登录注册

在这里插入图片描述

3.2首页菜品展示、轮播图

在这里插入图片描述

3.3美食菜品分类、查询

在这里插入图片描述

3.4作品动态、个人简介、菜品收藏

在这里插入图片描述

3.5创建菜谱、添加步骤

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

四、系统代码展示

4.1项目架构(MVC)

在这里插入图片描述

4.2部分代码展示

RecipeServiceImpl

package yjf.psyd.service.impl;import java.io.File;
import java.util.List;import yjf.psyd.bean.Recipe;
import yjf.psyd.bean.RecipeStep;
import yjf.psyd.bean.User;
import yjf.psyd.dao.RecipeDao;
import yjf.psyd.dao.impl.RecipeDaoImpl;
import yjf.psyd.service.RecipeService;public class RecipeServiceImpl implements RecipeService {// 声明Dao层对象,多态RecipeDao rd = new RecipeDaoImpl();// 创建菜谱@Overridepublic int createRecipeService(String createDate, String title, String info, String material,List<String> stepInfos, List<String> categorys, String coverFilePath, List<String> stepFilesPath, User user) {return rd.createRecipeDao(createDate, title, info, material, stepInfos, categorys, coverFilePath, stepFilesPath,user);}// 菜谱详情@Overridepublic Recipe recipeDetailService(String recipeId,User user) {return rd.recipeDetailDao(recipeId,user);}// 菜谱步骤详情@Overridepublic RecipeStep recipeStepDetailService(String recipeId) {return rd.recipeStepDetailDao(recipeId);}// 删除菜谱@Overridepublic int DeleteRecipeService(String recipeId) {return rd.DeleteRecipeDao(recipeId);}// 插入收藏菜谱@Overridepublic int insertCollectionRecipe(String recipeId,User user) {return rd.insertCollectionRecipeDao(recipeId,user);}// 删除收藏菜谱@Overridepublic int deleteCollectionRecipe(String recipeId, User user) {return rd.deleteCollectionRecipeDao(recipeId,user);}}

PageDaoImpl

package yjf.psyd.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;import yjf.psyd.bean.CategoryPage;
import yjf.psyd.bean.CategoryPageDetail;
import yjf.psyd.bean.HomePage;
import yjf.psyd.bean.HomePageDetail;
import yjf.psyd.bean.Page;
import yjf.psyd.bean.PageDetail;
import yjf.psyd.bean.SearchPage;
import yjf.psyd.bean.SearchPageDetail;
import yjf.psyd.bean.User;
import yjf.psyd.dao.PageDao;
import yjf.psyd.util.DbConnection;public class PageDaoImpl implements PageDao {// 请求首页PopRecipe数据@Overridepublic Page indexPopRecipeDao(int index) {// 声明jdbc变量Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;// 声明对象、变量Page p = new Page();int count = -1;List<PageDetail> pageDetail = new ArrayList<>();try {// 获取链接conn = DbConnection.getConnection();// 创建sql命令String sql = "select count(1) from recipe";String sql1 = "SELECT * FROM recipe,user_createrecipe  WHERE recipe.id=user_createrecipe.createRecipe ORDER BY recipe.id DESC limit ?,10;";// 创建sql命令对象ps = conn.prepareStatement(sql);// 执行sql语句rs = ps.executeQuery();if (rs != null) {while (rs.next()) {p.setTotleCount(rs.getInt(1));}}ps = conn.prepareStatement(sql1);// 给占位符赋值ps.setInt(1, index);rs = ps.executeQuery();if (rs != null) {while (rs.next()) {PageDetail pd = new PageDetail(rs.getInt("id"), rs.getString("title"), rs.getString("coverPath"),rs.getInt("userId"), rs.getString("username"));pageDetail.add(pd);p.setPageDetail(pageDetail);}}} catch (Exception e) {e.printStackTrace();} finally {// 关闭链接DbConnection.closeDB(conn, ps, rs);}// 返回结果return p;}// 请求homepage分页数据@Overridepublic HomePage homePageDao(String userId, int createCp, int collectionCp) {// 声明jdbc变量Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;// 声明对象、变量HomePage hp = new HomePage();List<HomePageDetail> createDetail = new ArrayList<>();List<HomePageDetail> collectionDetail = new ArrayList<>();try {// 获取链接conn = DbConnection.getConnection();// 创建sql命令String sql = "SELECT count(1) FROM user,user_createrecipe,recipe where user.id=user_createrecipe.userId and recipe.id = user_createrecipe.createRecipe and user.id = ?;";String sql1 = "SELECT * FROM user,user_createrecipe,recipe where user.id=user_createrecipe.userId and recipe.id = user_createrecipe.createRecipe and user.id = ? ORDER BY recipe.id DESC limit ?,6;";String sql2 = "SELECT count(1) FROM user,user_collection,recipe where user.id=user_collection.userId and recipe.id = user_collection.collection and user.id = ?;";String sql3 = "SELECT * FROM user,user_collection,recipe where user.id=user_collection.userId and recipe.id = user_collection.collection and user.id = ? ORDER BY recipe.id DESC limit ?,6;";String sql4 = "SELECT * FROM user WHERE id = ?;";// 创建sql命令对象ps = conn.prepareStatement(sql);// 给占位符赋值ps.setString(1, userId);// 执行sql语句rs = ps.executeQuery();if (rs != null) {while (rs.next()) {hp.setCreateTotleCount(rs.getInt(1));}}ps = conn.prepareStatement(sql1);// 给占位符赋值ps.setString(1, userId);ps.setInt(2, (createCp - 1) * 6);// 执行sql语句rs = ps.executeQuery();if (rs != null) {while (rs.next()) {HomePageDetail hpd = new HomePageDetail(rs.getInt("recipe.id"), rs.getString("title"),rs.getString("coverPath"));createDetail.add(hpd);hp.setCreateDetail(createDetail);}}ps = conn.prepareStatement(sql2);// 给占位符赋值ps.setString(1, userId);// 执行sql语句rs = ps.executeQuery();if (rs != null) {while (rs.next()) {hp.setCollectionTotleCount(rs.getInt(1));}}ps = conn.prepareStatement(sql3);// 给占位符赋值ps.setString(1, userId);ps.setInt(2, (collectionCp - 1) * 6);// 执行sql语句rs = ps.executeQuery();if (rs != null) {while (rs.next()) {HomePageDetail hpd1 = new HomePageDetail(rs.getInt("recipe.id"), rs.getString("title"),rs.getString("coverPath"));collectionDetail.add(hpd1);hp.setCollectionDetail(collectionDetail);}}ps = conn.prepareStatement(sql4);// 给占位符赋值ps.setString(1, userId);// 执行sql语句rs = ps.executeQuery();if (rs != null) {while (rs.next()) {hp.setUsername(rs.getString("username"));hp.setCreateDate(rs.getString("createDate"));}}} catch (Exception e) {e.printStackTrace();} finally {// 关闭链接DbConnection.closeDB(conn, ps, rs);}// 返回结果return hp;}// 请求category分页数据@Overridepublic CategoryPage categoryPageDao(String item, int categoryCp) {// 声明jdbc变量Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;// 声明对象、变量CategoryPage cp = new CategoryPage();List<CategoryPageDetail> categoryPageDetail = new ArrayList<>();try {// 获取链接conn = DbConnection.getConnection();// 创建sql命令String sql = "SELECT count(*) FROM recipe,recipe_category,category WHERE recipe.id = recipe_category.recipeId and recipe_category.category = category.id and category.id = ?";String sql1 = "SELECT * FROM recipe,user_createrecipe,recipe_category,category WHERE recipe.id = recipe_category.recipeId and recipe_category.category = category.id and recipe.id = user_createrecipe.createRecipe and category.id = ? ORDER BY recipeId DESC LIMIT ?,8";// 创建sql命令对象ps = conn.prepareStatement(sql);// 给占位符赋值ps.setString(1, item);// 执行sql语句rs = ps.executeQuery();if (rs != null) {while (rs.next()) {cp.setTotleCount(rs.getInt(1));}}ps = conn.prepareStatement(sql1);// 给占位符赋值ps.setString(1, item);ps.setInt(2, (categoryCp - 1) * 8);rs = ps.executeQuery();if (rs != null) {while (rs.next()) {CategoryPageDetail cpd = new CategoryPageDetail(rs.getInt("recipeId"), rs.getString("title"),rs.getString("coverPath"), rs.getInt("userId"), rs.getString("username"));categoryPageDetail.add(cpd);cp.setCategoryPageDetail(categoryPageDetail);}}} catch (Exception e) {e.printStackTrace();} finally {// 关闭链接DbConnection.closeDB(conn, ps, rs);}// 返回结果return cp;}// 请求搜索分页@Overridepublic SearchPage searchPageDao(int searchCp,String searchKeyword) {// 声明jdbc变量Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;// 声明对象、变量SearchPage sp = new SearchPage();List<SearchPageDetail> searchPageDetail = new ArrayList<>();try {// 获取链接conn = DbConnection.getConnection();// 创建sql命令String sql = "SELECT count(1) FROM recipe,user_createrecipe WHERE title LIKE '%"+searchKeyword+"%' AND recipe.id = user_createrecipe.createRecipe";String sql1 = "SELECT * FROM recipe,user_createrecipe WHERE title LIKE '%"+searchKeyword+"%' AND recipe.id = user_createrecipe.createRecipe ORDER BY recipe.id DESC LIMIT ?,8"; // 创建sql命令对象ps = conn.prepareStatement(sql);// 执行sql语句rs = ps.executeQuery();if (rs != null) {while (rs.next()) {sp.setTotleCount(rs.getInt(1));}}ps = conn.prepareStatement(sql1);// 给占位符赋值ps.setInt(1, (searchCp - 1) * 8);rs = ps.executeQuery();if (rs != null) {while (rs.next()) {SearchPageDetail spd = new SearchPageDetail(rs.getInt("recipe.id"), rs.getString("title"),rs.getString("coverPath"), rs.getInt("userId"), rs.getString("username"));searchPageDetail.add(spd);sp.setSearchPageDetail(searchPageDetail);}}} catch (Exception e) {e.printStackTrace();} finally {// 关闭链接DbConnection.closeDB(conn, ps, rs);}// 返回结果return sp;}
}

RecipeCollectionServlet

package yjf.psyd.servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.mysql.cj.Session;import yjf.psyd.bean.User;
import yjf.psyd.service.RecipeService;
import yjf.psyd.service.impl.RecipeServiceImpl;@WebServlet("/recipeCollection")
public class RecipeCollectionServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public RecipeCollectionServlet() {super();}// 处理菜谱收藏功能protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 1、获取请求信息String status = req.getParameter("status");String RecipeId = req.getParameter("RecipeId");// 获取session对象HttpSession hs = req.getSession();// 把session中的值传到user对象中User user = (User) hs.getAttribute("user");RecipeService rs = new RecipeServiceImpl();// 2、判断status状态if (status.equals("false")) {// 3、处理请求结果;插入收藏菜谱int index = rs.insertCollectionRecipe(RecipeId, user);if(index>0) {resp.getWriter().write("{\"index\":" + index + "}");}} else {// 3、处理请求结果:删除收藏菜谱int index = rs.deleteCollectionRecipe(RecipeId, user);if(index>0) {resp.getWriter().write("{\"index\":" + index + "}");}}}}

获取源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/485002.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Unity脚本模拟绳索、布料(碰撞)

效果演示&#xff1a; 脚本如下&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;namespace PhysicsLab {public class RopeSolver : MonoBehaviour {public Transform ParticlePrefab;public int Count 3;public int Space 1;…

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo)

Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 目录 Python 【图像分类】之 PyTorch 进行猫狗分类功能的实现(Swanlab训练可视化/ Gradio 实现猫狗分类 Demo) 一、简单介绍 二、PyTorch 三、CNN 1、神经网络 2、卷…

【Python网络爬虫笔记】8- (BeautifulSoup)抓取电影天堂2024年最新电影,并保存所有电影名称和链接

目录 一. BeautifulSoup的作用二. 核心方法介绍2.1 构造函数2.2 find()方法2.3 find_all()方法2.4 select()方法 三. 网络爬虫中使用BeautifulSoup四、案例爬取结果 一. BeautifulSoup的作用 解析HTML/XML文档&#xff1a;它可以将复杂的HTML或XML文本转换为易于操作的树形结构…

ZLMediaKit+wvp (ffmpeg+obs)推拉流测试

这里使用了两种方式: ffmpeg命令和 OBS OBS推流在网上找了些基本没有说明白的, 在ZLMediaKit的issues中看到了一个好大哥的提问在此记录一下 使用OBS推流&#xff0c;rtmp&#xff0c;报鉴权失败 推流 1. ffmpeg命令推流 官方说明文档地址: 推流规则 rtsp://192.168.1.4:10554…

Linux入门攻坚——40、Linux集群系统入门-lvs(1)

Cluster&#xff0c;集群&#xff0c;为了解决某个特定问题将多台计算机组合起来形成的单个系统。 这个单个集群系统可以扩展&#xff0c;系统扩展的方式&#xff1a;scale up&#xff0c;向上扩展&#xff0c;更换更好的主机&#xff1b;scale out&#xff0c;向外扩展&…

威胁驱动的网络安全方法论

本文主要内容取自洛克希德马丁公司的论文&#xff1a;A Threat-Driven Approach to Cyber Security&#xff0c;想要全面准确了解论文内容的朋友建议阅读原文。希望能够抛砖引玉&#xff0c;为相关领域的相关工作人员带来一点不同的思路或启发&#xff0c;从而更好地维护企业/组…

【Verilog】实验三 数码管实验

目录 一、实验目的&#xff1a; 二、实验内容: 三、实验要求&#xff1a; 四、实验步骤: 一、实验目的&#xff1a; 进一步熟悉Modelsim和VIVADO工具&#xff1b;掌握7段数码管显示译码器&#xff1b;掌握7段数码管数码管动态输出显示的方法。 二、实验内容: 实现按动开关…

Spring Cloud + MyBatis Plus + GraphQL 完整示例

Spring Cloud MyBatis Plus GraphQL 完整示例 1、创建Spring Boot子项目1.1 配置POM&#xff0c;添加必要的依赖1.2 配置MyBatis-Plus 2、集成GraphQL2.1 定义schema.graphqls2.2 添加GraphQL解析器2.3 配置schame文件配置 3、访问测试3.1 查询测试&#xff08;演示&#xff…

MySQL书籍推荐

《高性能MySQL&#xff08;第4版&#xff09;》-西尔维亚博特罗斯 系统层次 Mysql性能优化和高可用架构实践 2020 系统基础 MySQL性能调优与架构设计 系统基础 Mysql技术大全 2021 综合 MySQL数据库应用案例教程 综合实战 从入门到项目实践 综合实战 丰富 超值 MySQ…

MR30分布式IO模块赋能喷水织机

纺织行业作为我国传统支柱产业&#xff0c;历经数千年的演变&#xff0c;如今仍面临着诸多困境&#xff0c;在纺织行业中&#xff0c;每一次技术的飞跃都是对行业边界的勇敢探索。在纺织行业&#xff0c;喷水织机作为关键生产设备&#xff0c;其性能直接影响到产品质量和产能。…

nodejs循环导出多个word表格文档

文章目录 nodejs循环导出多个word表格文档一、文档模板编辑二、安装依赖三、创建导出工具类exportWord.js四、调用五、效果图nodejs循环导出多个word表格文档 结果案例: 一、文档模板编辑 二、安装依赖 // 实现word下载的主要依赖 npm install docxtemplater pizzip --save/…

LabVIEW中“this VI‘s owning library is missing”错误及解决

问题描述 当加载或打开一个VI时&#xff0c;如果其所属的项目库未加载到内存&#xff0c;LabVIEW将提示错误&#xff1a;“this VIs owning library is missing”&#xff08;该VI的所属库不存在&#xff09;。 该问题通常发生在以下情况下&#xff1a; 项目库文件丢失或路径…

LongVU:用于长视频语言理解的空间时间自适应压缩

晚上闲暇时间看到一种用于长视频语言理解的空间时间自适应压缩机制的研究工作LongVU&#xff0c;主要内容包括&#xff1a; 背景与挑战&#xff1a;多模态大语言模型&#xff08;MLLMs&#xff09;在视频理解和分析方面取得了进展&#xff0c;但处理长视频仍受限于LLM的上下文长…

sphinx基本使用

sphix是一个文档生成工具 本文介绍一些基础技能&#xff0c;如果想深入学习&#xff0c;可以查看官方文档 Sphinx官方文档 1.安装虚拟环境 # ubuntu # 使用 venv 创建 .venv虚拟环境 python3 -m venv .venv# 激活虚拟环境 source .venv/bin/activate# windows # 创建虚拟环境…

爬虫第四篇:Xpath 路径表达式全解析:从网页基础到爬取百度贴吧图片实战

简介&#xff1a;本文围绕 Xpath 路径表达式展开讲解&#xff0c;先是介绍了网页相关基础如 html、css、vue 以及前后端分离的概念与示例&#xff0c;包括各部分的结构、作用及简单代码展示&#xff0c;随后详细阐述了 xml 的节点关系、选取节点、谓语等理论知识&#xff0c;最…

HarmonyOS NEXT开发进阶(一):初识 HarmonyOS NEXT开发

文章目录 一、前言二、HarmonyOS NEXT 开发框架三、HarmonyOS NEXT开发指导3.1 Windows环境准备 四、项目拆解4.1 工程目录4.2 全局配置4.2.1 APP全局配置: AppScope层&#xff08;AppScope/app.json5&#xff09;4.2.3 签名全局配置 4.3 APP代码初始化4.4 APP签名文件配置4.5 …

Chrome控制台 网站性能优化指标一览

打开chrome-》f12/右键查看元素-》NetWrok/网络 ctrlF5 刷新网页&#xff0c;可以看到从输入url到页面资源请求并加载网页&#xff0c;用于查看资源加载&#xff0c;接口请求&#xff0c;评估网页、网站性能等&#xff0c;如下图&#xff1a; request、stransferred、resour…

【C++】入门【六】

本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…

MacOS安装sshfs挂载远程电脑硬盘到本地

文章目录 sshfs简介sshfs安装下载安装macFUSE安装sshfs sshfs使用注意事项 sshfs简介 SSHFS&#xff08;SSH Filesystem&#xff09;是一种基于FUSE&#xff08;用户空间文件系统&#xff09;的文件系统&#xff0c;它允许你通过SSH协议挂载远程文件系统。使用SSHFS&#xff0…

亚马逊云(AWS)使用root用户登录

最近在AWS新开了服务器&#xff08;EC2&#xff09;&#xff0c;用于学习&#xff0c;遇到一个问题就是默认是用ec2-user用户登录&#xff0c;也需要密钥对。 既然是学习用的服务器&#xff0c;还是想直接用root登录&#xff0c;下面开始修改&#xff1a; 操作系统是&#xff1…