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

文章目录

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

java 复制代码
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

java 复制代码
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

java 复制代码
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 + "}");
			}
		}
	}

}

获取源码

相关推荐
杨DaB15 分钟前
【SpringBoot】Swagger 接口工具
java·spring boot·后端·restful·swagger
YA33315 分钟前
java基础(九)sql基础及索引
java·开发语言·sql
桦说编程35 分钟前
方法一定要有返回值 \ o /
java·后端·函数式编程
小李是个程序1 小时前
登录与登录校验:Web安全核心解析
java·spring·web安全·jwt·cookie
David爱编程1 小时前
Java 创建线程的4种姿势,哪种才是企业级项目的最佳实践?
java·后端
hrrrrb2 小时前
【Java Web 快速入门】十一、Spring Boot 原理
java·前端·spring boot
Java微观世界2 小时前
Object核心类深度剖析
java·后端
MrSYJ2 小时前
为什么HttpSecurity会初始化创建两次
java·后端·程序员
hinotoyk2 小时前
TimeUnit源码分享
java
AAA修煤气灶刘哥3 小时前
Java+AI 驱动的体检报告智能解析:从 PDF 提取到数据落地全指南
java·人工智能·后端