当前位置: 首页 > article >正文

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();

	// 创建菜谱
	@Override
	public 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);
	}

	// 菜谱详情
	@Override
	public Recipe recipeDetailService(String recipeId,User user) {
		return rd.recipeDetailDao(recipeId,user);
	}

	// 菜谱步骤详情
	@Override
	public RecipeStep recipeStepDetailService(String recipeId) {
		return rd.recipeStepDetailDao(recipeId);
	}

	// 删除菜谱
	@Override
	public int DeleteRecipeService(String recipeId) {
		return rd.DeleteRecipeDao(recipeId);
	}

	// 插入收藏菜谱
	@Override
	public int insertCollectionRecipe(String recipeId,User user) {
		return rd.insertCollectionRecipeDao(recipeId,user);
	}

	// 删除收藏菜谱
	@Override
	public 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数据
	@Override
	public 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分页数据
	@Override
	public 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分页数据
	@Override
	public 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;
	}

	// 请求搜索分页
	@Override
	public 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.kler.cn/a/427840.html

相关文章:

  • 实验一---典型环节及其阶跃响应---自动控制原理实验课
  • Java小白入门教程:三种注释+快捷方式
  • 【Java异步编程】CompletableFuture基础(1):创建不同线程的子任务、子任务链式调用与异常处理
  • 图论——最小生成树
  • 单链表专题(中)
  • socket实现HTTP请求,参考HttpURLConnection源码解析
  • 数据结构代码归纳
  • THENA大涨将对整个DeFi市场产生怎样的影响?
  • QT 左右 上下,拉伸 分配窗口大小
  • [Python | CS基础 ]Python多线程`threading`和多进程`multiprocessing`
  • 相机动态/在线标定
  • 【深度学习】分类问题代码实战之初始手写数据集
  • Qt复习学习
  • ASP.NET Core SignalR 入门
  • FastAPI中创建一个多App架构
  • 超详细!关于在Docker里安装Hadoop的详细操作(部署单点集群)
  • Python 中的魔法方法有哪些?
  • el-table expand-row-keys默认展开,数据更新后默认展开的问题
  • 如何使用apache部署若依前后端分离项目
  • AWS Fargate + Cloud Map + Prometheus 实现 JVM 监控方案详解
  • 控制访问权限
  • 【QT】一个简单的串口通信小工具(QSerialPort实现)
  • C/C++基础知识复习(40)
  • 响应式布局:登录界面
  • Qt Window应用程序去掉控制台窗口
  • K8S对接ceph的RBD块存储