Java项目:SSM网上外卖订餐管理系统

news2024/11/23 19:38:17

作者主页:源码空间站2022

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

项目介绍

该项目为前后台项目,分为普通用户与管理员两种角色,前台普通用户登录,后台管理员登录;

普通用户主要功能包括:
登录注册,查看商品,提交订单,然后留言,查看购物车,购买商品等等。

管理员主要功能包括:
添加商品,管理用户,添加类目,管理留言等等。

环境需要

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

5.数据库:MySql 5.7版本;

6.是否Maven项目:否;

技术栈

1. 后端:Spring+SpringMVC+Mybatis

2. 前端:JSP+jQuery+Ajax

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置;

4. 运行项目,输入localhost:8080/ 登录

用户账号/密码: user/123456
管理员账号/密码:admin/admin

运行截图

前台界面

 后台界面

相关代码

登录控制器

package com.shop.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.shop.exception.zdyException;
import com.shop.po.Adminuser;
import com.shop.po.User;
import com.shop.service.UserService;

@Controller
public class loginController {

	@Autowired
	private UserService userService;

	@RequestMapping("login")
	public String login() {
		return "login";
	}

	// 用户登录
	@RequestMapping("/userLogin")
	public String userLogin(HttpServletRequest request,
			@RequestParam String checkImg, User user, Model model)
			throws zdyException, Exception {
		String sessionCode = (String) request.getSession().getAttribute(
				"checkcode");
		if (!sessionCode.equalsIgnoreCase(checkImg)) {
			 //model.addAttribute("message", "验证码输入错误请重新注册");
			//throw new zdyException("验证码输入错误请重新注册");
			request.getSession().setAttribute("message", "验证码输入错误请重新注册");
			 return "redirect:login.action";
		}
		User loginUser = userService.loginFindByUnameAndPwd(user.getUsername(),
				user.getPassword());
		if (loginUser == null) {
			 //model.addAttribute("message", "密码输入错误请重新登陆");
			 request.getSession().setAttribute("message", "密码输入错误请重新登陆");
			//throw new zdyException("密码输入错误请重新登陆");
			 return "redirect:login.action";
		}
		request.getSession().setAttribute("loginUser", loginUser);
		request.getSession().removeAttribute("message");
		return "redirect:index.action";
	}

	// 用户退出
	@RequestMapping("userLogout")
	public String userLogout(HttpServletRequest request,
			HttpServletResponse response, Model model) {
		request.getSession().removeAttribute("loginUser");
		response.setHeader("content-type", "text/html;charset=UTF-8");
		response.setHeader("refresh", "5;url=/shop/index.action");
		model.addAttribute("message", "退出成功,系统将在5秒之后跳转到首页......");
		return "msg";
	}

	//进入管理员页面
	@RequestMapping("/admin")
	public String AdminIndex(){
		return "admin/index";
	}
	//admin/adminUser_login.action
    //adminUser_login管理员登录
	@RequestMapping("/admin/adminUser_login")
	public String adminUser_login(HttpServletRequest request,Model model,@RequestParam String username,@RequestParam String password) throws Exception{
		Adminuser adminuserLogin = userService.adminUser_login(username,password);
		System.out.println(username);
		System.out.println(password);
		if(adminuserLogin == null){
			model.addAttribute("message", "改用户未被授予管理员身份!");
			return "admin/index";
		}
		request.getSession().setAttribute("adminuserLogin", adminuserLogin);
//		model.addAttribute("adminuserLogin", adminuserLogin);
		return "admin/home";
	}
	
}

产品模块

package com.shop.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.shop.po.Product;
import com.shop.service.ProductService;

@Controller
public class ProductController {
	@Autowired
	private ProductService prodcutService;

	@RequestMapping("/productFindByPid")
	public String productFindByPid(@RequestParam int pid,Model model) throws Exception {
			Product product = prodcutService.productFindByPid(pid);
			model.addAttribute("product", product);
		return "product";
	}
}

注册控制器

package com.shop.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.shop.exception.zdyException;
import com.shop.po.User;
import com.shop.service.UserService;


@Controller
public class registController {
	@Autowired
	private UserService userService;

	@RequestMapping("regist")
	public String regist() {
		return "regist";
	}

	@RequestMapping("/userRegist")
	public String userRegist(Model model, HttpServletRequest request,
			@Validated User user, BindingResult bindingResult,
			@RequestParam String checkImg) throws Exception {
		if (bindingResult.hasErrors()) {
			List<ObjectError> errors =bindingResult.getAllErrors();
			List<String> list = new ArrayList<>();
			for (ObjectError objectError : errors) {
				String str = new String(objectError.getDefaultMessage()
						.getBytes("ISO-8859-1"), "gbk");
				list.add(str);
			}
			model.addAttribute("errors", list);
			return "regist";
		}
		// 查看验证码
		String sessionCode = (String) request.getSession().getAttribute(
				"checkcode");
//		System.out.println("adadadad" + sessionCode);
		if (!sessionCode.equalsIgnoreCase(checkImg)) {
//			model.addAttribute("message", "验证码错误请重新注册");
			throw new zdyException("验证码错误请重新注册");
		}
		// 开始写入数据库
		userService.saveUser(user);
		//model.addAttribute("message", "注册成功请去邮箱激活");
		model.addAttribute("message", "注册成功请登录");
		return "msg";
	}

	@RequestMapping("/activeUser")
	public String activeUser(@RequestParam String code,Model model) throws zdyException,Exception  {
		/*
		 * 根据传递激活码进行用户查询. 如果用户不为空: 修改用户状态 改为1 如果用户为空: 激活码被篡改了.
		 */
			User activeUser = userService.findByCode(code);
			if(activeUser==null){
//				model.addAttribute("message", "激活码被篡改了,请重新注册");
				throw new zdyException("激活码被篡改了,请重新注册");
			}
			activeUser.setState(1);
			activeUser.setCode(null);
			userService.activeUser(activeUser);
			model.addAttribute("message", "激活码成功");
		return "msg";
	}
}

购物车

package com.shop.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.shop.po.Cart;
import com.shop.po.CartItem;
import com.shop.po.Product;
import com.shop.po.User;
import com.shop.service.ProductService;


@Controller
public class cartController {
	@Autowired
	private ProductService productService;
//	添加到购物车
	@RequestMapping("/addCart")
	public String addCart(HttpServletRequest request,@RequestParam int pid,@RequestParam int count ,Model model){
		Product product = productService.finbProductByPid(pid);
//		存进一个购物项
		CartItem cartItem = new CartItem();
		cartItem.setCount(count);
		cartItem.setProduct(product);
		cartItem.setSubtotle(count*product.getShopPrice());
//		存进购物车
		Cart cart=getCart(request);
		cart.addCart(cartItem);
		return "cart";
	}
//	查看我的购物车
	@RequestMapping("/myCart")
	public String myCart(HttpServletRequest request,Model model){
		User loginUser = (User) request.getSession().getAttribute("loginUser");
		if (loginUser == null) {
			model.addAttribute("message","您还没有登录!");
			return "msg";
		}
		return "cart";
	}
	
//	清空购物车
	@RequestMapping("/clearCart")
	public String clearCart(HttpServletRequest request){
		Cart cart=getCart(request);
		cart.clearCart();
		return "redirect:myCart.action";
	}
//	删除某个购物项
	@RequestMapping("/delProFromCart")
	public String delProFromCart(@RequestParam int pid,HttpServletRequest request){
		Cart cart=getCart(request);
		cart.delProFromCart(pid);
		return "redirect:myCart.action";
	}
	public Cart getCart(HttpServletRequest request) {
		Cart cart = (Cart) request.getSession().getAttribute("cart");
		if (cart == null) {
			cart = new Cart();
			request.getSession().setAttribute("cart", cart);
		}
		return cart;
	}
}

二级分类

package com.shop.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.shop.Utils.PageBean;
import com.shop.po.Product;
import com.shop.service.ProductService;

@Controller
public class CategorySecondController {
	@Autowired
	private ProductService productService;
//根据一级目录查找二级目录下面的商品(使用延迟加载但是这里不知为啥使用起来出错了)
	@RequestMapping("/findCategorySecond")
	public String findCategorySecond(HttpServletRequest request,@RequestParam int cid,Model model,@RequestParam int page) throws Exception {
		request.getSession().setAttribute("cid",cid);
		PageBean<Product> proPageBean = productService.findProductyBycid(cid,page);
		model.addAttribute("pageBean",proPageBean);
		return "category";
	}
	
//	根据csid来分页查询商品
	@RequestMapping("/findCategorySecond1")
	public String findCategorySecond1(@RequestParam int csid,Model model,@RequestParam int page){
		PageBean<Product> proPageBean = productService.finbProductByCsid(csid,page);
		model.addAttribute("pageBean",proPageBean);
		return "category";
	}
}

如果也想学习本系统,下面领取。关注并回复:112ssm 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区分度评估指标-KS

1.背景 KS指标来评估模型的区分度&#xff08;discrimination&#xff09;&#xff0c;风控场景常用指标之一。本文将从区分度的概念、KS的计算方法、业务指导意义、几何解释、数学思想等多个维度展开分析&#xff0c;以期对KS指标有更为深入的理解认知。 Part 1. 直观理解区…

javaee之黑马旅游网2

下面我们来做邮件激活功能 提示邮箱需要登录才能进行账号激活 保证用户填写的邮箱是正确的&#xff0c;可以推广宣传信息到邮箱中 下面分成两部分来做&#xff1a; 第一部分&#xff1a;发送邮件 这个功能就是通过工具类来进行实现的&#xff0c;直接从网上copy的代码 Mai…

痞子衡嵌入式:浅谈i.MXRT1xxx系列MCU时钟相关功能引脚的作用

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1xxx系列MCU时钟相关功能引脚作用。 如果我们从一颗 MCU 芯片的引脚分类来看芯片功能&#xff0c;大概可以分为三大类&#xff1a;电源、时钟、外设功能。作为嵌入式开发者&#…

service 详解

8.3.3 HeadLiness类型的Service 在某些场景中&#xff0c;开发人员可能不想使用Service提供的负载均衡功能&#xff0c;而希望自己来控制负载均衡策略&#xff0c;针对这种情况&#xff0c;kubernetes提供了HeadLiness Service&#xff0c;这类Service不会分配Cluster IP&…

在线表单设计器都有哪些优秀的功能?

当前&#xff0c;在大数据时代的发展背景下&#xff0c;自定义的在线表单设计器是提升办公效率和协作效率的工具。可视化表单工具丰富的组件、简单的操作等优势特点得到了很多客户的喜爱和支持。那么&#xff0c;您知道在线表单设计器的功能都有哪些吗&#xff1f;通过这篇文章…

前端_Vue_1.初识Vue

文章目录一、前言二、开始1. 简介1.1. 什么是Vue&#xff1f;1.2. 渐进式框架1.3. 单文件组件1.4. API风格1.4.1. 选项式API&#xff08;Options API&#xff09;1.4.2. 组合式API&#xff08;Composition API&#xff09;1.4.3. 该选哪个&#xff1f;2. 快速上手&#xff08;学…

导出微信通讯录

不知道什么时候&#xff0c;微信好友已经增加到了几百人&#xff0c;熟悉的、不熟悉的人都淹没在一溜的名字里&#xff0c;今天来整理一下微信通讯录&#xff0c;该删的、该分组的都搞一搞。 首先&#xff0c;导出微信的通讯录 单击微信左下角“菜单”&#xff0c;选择“设置…

为什么我们不支持手工上传镜像

自从我们提供公共镜像库以来&#xff0c;不少同学询问是否支持手工上传镜像到镜像库。答案是&#xff1a;不支持。 今天给大家聊一聊为什么公共镜像库不应该支持手工上传&#xff0c;主要基于以下几个方面的考量&#xff1a; Code First 建木作为一个完整实现GitOps理念的工…

matlab⾼级绘图时间距离图像

这限制了可能在legend上⼯作以实现⽬标的可能性。 可能的解决⽅案是按照以下步骤创建⾃⼰的基于轴的图例&#xff1a; 使⽤以下语法[lgd,icons,plots,txt] legend(___)创建调⽤legend函数的图例(注意&#xff0c;不建议使⽤此语法&#xff0c;我们将在后续步骤中删除图例&…

2022年HNUCM信息科学与工程学院第五届新生赛——正式赛

2022年HNUCM信息科学与工程学院第五届新生赛——正式赛 A 打卡题&#xff0c;向下取整即可 #include<iostream> using namespace std; int main() {int n;cin >> n;cout << n / 7 << endl;return 0; }B 统计数量&#xff0c;注意要是不能整除需要向…

《痞子衡嵌入式半月刊》 第 62 期

痞子衡嵌入式半月刊&#xff1a; 第 62 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻&#xff0c;农历年分二十四节气&#xff0c;希望在每个交节之日准时发布一期。 本期刊是开源项目&#xff08;GitHub: JayHeng/pzh-mcu-bi-weekly&#xff09;&#xff0c;欢…

JAVA班主任管理系统(源代码+论文)

毕业综合实训报告 班主任管理系统设计与实践 目 录 摘要 ………………………………………………………………………Ⅰ &#xff08;空2行&#xff0c;本页行间距为最小值14磅&#xff09; 目录………………………………………………………………………………… 1 第1章 绪…

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.1 效果演示、技术点

Qt 中绘图用到的类是 QPainter&#xff0c;可以实现点、线、矩形、圆形、多边形、圆弧、饼图、图片等的绘制 什么时候会用到绘图&#xff1f; 需要简单绘制时 比如&#xff0c;绘制温度的曲线时&#xff0c;如下&#xff1a; 自定义控件 绘图最大的一个应用场景就是自定义控…

三 TypeScript变量

流程控制 计算机执行程序的时候是按照从上到下从左到右逐行进行 我们常见的流程&#xff1a; 顺序 分支循环 分支结构 分支结构 单分支 语法结构 if(表达式){代码块}执行逻辑:当程序遇到if结构,首先判断表达式的值,如果表达式的值为真,则执行大括号里面的代码块,如果表达…

Spring - FactoryBean扩展接口

文章目录Preorg.springframework.beans.factory.FactoryBeanFactoryBean中的设计模式----工厂方法模式FactoryBean VS BeanFactory源码解析扩展示例Pre Spring Boot - 扩展接口一览 org.springframework.beans.factory.FactoryBean package org.springframework.beans.factory…

IDEA新建一个spark项目

第一步&#xff1a;新建一个maven工程 第二部&#xff1a;命名工程名 第三步&#xff1a;新建一个文件夹&#xff0c;并设置为sources root 第四步&#xff1a;pom编写 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http:/…

表格数据方法、分页方法及组件的封装和分页组件的复用

请假列表 1、数据获取与显示的通用方法封装 <template><div> <el-table:data"tableData"height"450"borderstyle"width: 100%":default-sort"{ prop: number, order: Ascending }"><!-- <el-table-column pr…

亚像素级精确度的角点

有时我们需要最大精度的角点检测。OpenCV为我们提供了函cv2.cornerSubPix()&#xff0c; 它可以提供亚像素级别的角点检测。下面是一个例子。首先我们要找到 Harris 角点&#xff0c;然后将角点的重心传给这个函数进行修正。Harris 角点用红色像素标出&#xff0c;绿色像素是修…

[附源码]计算机毕业设计社区疫情防控信息管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

jdk11新特性——新加的一些更实用的API

目录一、集合 增强1.1、List集合 of()方法1.2、Set集合 of()方法1.3、Map集合 of()方法1.4、List集合copyOf()方法1.5、of()和copyOf()方法创建集合的注意事项二、Stream 增强2.1、Stream 新增of()方法2.2、Stream 新增ofNullable()方法2.3、Stream 新增takeWhile() 和 dropWhi…