基于javaweb和mysql的springboot网上家具商城平台设计和实现(java+springboot+mysql+jpa+thymeleaf+html+maven)
基于javaweb和mysql的springboot网上家具商城平台设计和实现(java+springboot+mysql+jpa+thymeleaf+html+maven)
私信源码获取及调试交流
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
前台用户
后台管理员
基于javaweb的SpringBoot网上家具商城平台设计和实现(java+springboot+mysql+jpa+thymeleaf+html+maven)
主要技术:springmvc springboot mybatis mysql jquery layui 等技术
具体功能模块:
(1) 用户注册和登录登录功能:
①用户的注册功能 : 访问网站的人根据网站的提示注册自己的账户
②用户的登录功能 : 用户可以输入用户名和密码进行登录操作,当没有该账户的时 候,提示错误,用户必须通过注册完成或者从数据库中获取才能进行会员权限级别的操 作。登录成功之后可以购买商品,查询订单的详细信息
(2) 、个人信息的管理:
①用户信息的修改操作,其中包括会员名、密码、性别、联系方式 e-mail 和个人介 绍等用户信息的修改操作。但是会员邮箱是绑定账号的,会员邮箱不能进行更改操作。
②订单管理操作:订单只能查询和删除操作,不能有修改操作,修改操作是属于管理员的权限。
③用户退出操作:当点击用户退出时,就会退出当前用户的登录状态,恢复到游客 状态。
(3) 、商品的操作:
①搜索商品操作: 当在 Search 栏输入想搜索的家居用品时, 会使用模糊查询, 搜索 出客户想到查询的家居用品。
②商品列表展示:
③商品详细信息展示:
(4) 、购物车的管理操作:
①显示商品信息:当我们一进入购物车页面,就会显示出商品的详细信息,以及购 物车界面的功能信息。
②修改商品的数量:用户可以自己输入不同数量的商品,当商品的数量变动时,商 品的库存就会相应的减少,也会根据商品的数量得到购买这一种商品的金额小计。
③删除购物车中的商品:
④购物流程变动:
(5) 、订单管理操作:
①订单生成:进入结算中心,会提示用户已经登录成功并来到结算中心,然后在提 交订单的时候生成了一份订单,会显示在确认订单页面。
②确认订单:当点击确认订单的时候会进入支付页面,那里会真正的付款操作。
③订单查询:在我的订单页面会显示订单的详细信息,我们可以查询我们想要的订 单信息。
④订单管理:在我的订单页面会显示所有订单的信息,可以在那里删除订单,查询 订单等。
后台管理员主要设计:
系统的后台是专门为管理家居商城系统的人员设计的,功能如下:
(1) 、超级管理员:拥有管理该系统的最大权限,他有两个特有的功能
①数据字典:可以对后台的不同分类的分类列表具有增删改查的操作。
②角色管理:将拥有不同权限的管理员分成不同的角色,每个不同角色有自己的权限,不能执行越权操作
(2) 、商品分类的管理:
①添加编辑分类:点击添加按钮,会跳转到分类添加页面,需要编写分类名称,分类描述信息。
2.删除分类:当点击删除按钮时,会弹出一个提醒框,当点击确定,删除分类,点击取消,保持原来不变。
(3) 、商品管理功能:
①查询商品 : 查询所有商品列表, 还有通过商品的名称、 商品的类别和价格区间查询
②添加修改商品 : 点击添加商品会转到添加商品页面, 需要提供商品名称、 商品图片、商 5 6 品类别、商品价格、库存数量、商品描述等内容。
④删除商品:删除商品。
给大家截一部分效果图吧
系统客户端首页:
登录注册以及后台用户管理:
后台商品信息管理:
功能选择:
用户信息管理修改:
return new ResultBean<>(users);
}
@ResponseBody
@RequestMapping("/getTotal.do")
public ResultBean<Integer> geTotal() {
Pageable pageable = new PageRequest(1, 15, null);
int total = (int) userService.findAll(pageable).getTotalElements();
return new ResultBean<>(total);
}
@ResponseBody
@RequestMapping("/del.do")
public ResultBean<Boolean> del(int id) {
userService.delById(id);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/update.do")
public ResultBean<Boolean> update(int id,String username,
String password,String name,
String phone,String email,
String addr) {
// 更新前先查询
User user = userService.findById(id);
user.setId(id);
user.setName(name);
user.setUsername(username);
user.setPassword(password);
user.setAddr(addr);
user.setEmail(email);
user.setPhone(phone);
userService.update(user);
return new ResultBean<>(true);
}
}
throw new LoginException("请登录!");
User loginUser = (User) user;
Order order = new Order();
order.setName(name);
order.setPhone(phone);
order.setAddr(addr);
order.setOrderTime(new Date());
order.setUserId(loginUser.getId());
order.setState(STATE_NO_PAY);
List<OrderItem> orderItems = shopCartService.listCart(request);
Double total = 0.0;
order.setTotal(total);
order = orderDao.save(order);
for (OrderItem orderItem : orderItems) {
orderItem.setOrderId(order.getId());
total += orderItem.getSubTotal();
orderItemDao.save(orderItem);
}
order.setTotal(total);
orderDao.save(order);
//重定向到订单列表页面
response.sendRedirect("/mall/order/toList.html");
}
/**
* 确认收货
*
* @param orderId
*/
@Override
public void receive(int orderId) {
Order order = orderDao.findOne(orderId);
if (order == null)
throw new RuntimeException("订单不存在");
orderDao.updateState(STATE_COMPLETE,order.getId());
}
}
*
* @param request
* @return
*/
@Override
public List<OrderItem> listCart(HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
// key: productId value:OrderItem
Map<Integer, OrderItem> productMap = new HashMap<>();
if (productIds == null){
return new ArrayList<>();
}
// 遍历List中的商品id,每个商品Id对应一个OrderItem
for (Integer productId : productIds) {
if (productMap.get(productId) == null) {
Product product = productService.findById(productId);
OrderItem orderItem = new OrderItem();
orderItem.setProduct(product);
orderItem.setProductId(productId);
orderItem.setCount(1);
orderItem.setSubTotal(product.getShopPrice());
productMap.put(productId, orderItem);
} else {
OrderItem orderItem = productMap.get(productId);
int count = orderItem.getCount();
orderItem.setCount(++count);
Double subTotal = orderItem.getSubTotal();
orderItem.setSubTotal(orderItem.getSubTotal()+subTotal);
productMap.put(productId, orderItem);
}
}
List<OrderItem> orderItems = new ArrayList<>(productMap.values());
return orderItems;
}
}
*/
@RequestMapping("/toList.html")
public String toList() {
return "admin/user/list";
}
/**
* 打开编辑页面
* @param id
* @param map
* @return
*/
@RequestMapping("/toEdit.html")
public String toEdit(int id, Map<String, Object> map) {
User user = userService.findById(id);
map.put("user", user);
return "admin/user/edit";
}
/**
* 获取所有用户列表
*
* @param pageindex
* @return
*/
@ResponseBody
@RequestMapping("/list.do")
public ResultBean<List<User>> findAllUser(int pageindex,
@RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
List<User> users = userService.findAll(pageable).getContent();
return new ResultBean<>(users);
}
@ResponseBody
@RequestMapping("/getTotal.do")
public ResultBean<Integer> geTotal() {
Pageable pageable = new PageRequest(1, 15, null);
int total = (int) userService.findAll(pageable).getTotalElements();
return new ResultBean<>(total);
}
@ResponseBody
@RequestMapping("/del.do")
public ResultBean<Boolean> del(int id) {
userService.delById(id);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/update.do")
}
/**
* 验证用户名是否唯一
* @param username
* @return
*/
@ResponseBody
@RequestMapping("/checkUsername.do")
public ResultBean<Boolean> checkUsername(String username){
List<User> users = userService.findByUsername(username);
if (users==null||users.isEmpty()){
return new ResultBean<>(true);
}
return new ResultBean<>(false);
}
/**
* 如发生错误 转发到这页面
*
* @param response
* @param request
* @return
*/
@RequestMapping("/error.html")
public String error(HttpServletResponse response, HttpServletRequest request) {
return "error";
}
}
@Controller
while (iterator.hasNext()) {
if (productId == iterator.next()) {
iterator.remove();
}
}
}
/**
* 查看购物车
*
* 查询出session的List中所有的商品Id,并封装成List<OrderItem>返回
*
* @param request
* @return
*/
@Override
public List<OrderItem> listCart(HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
// key: productId value:OrderItem
Map<Integer, OrderItem> productMap = new HashMap<>();
if (productIds == null){
return new ArrayList<>();
}
// 遍历List中的商品id,每个商品Id对应一个OrderItem
for (Integer productId : productIds) {
if (productMap.get(productId) == null) {
Product product = productService.findById(productId);
OrderItem orderItem = new OrderItem();
orderItem.setProduct(product);
orderItem.setProductId(productId);
orderItem.setCount(1);
orderItem.setSubTotal(product.getShopPrice());
productMap.put(productId, orderItem);
} else {
OrderItem orderItem = productMap.get(productId);
int count = orderItem.getCount();
orderItem.setCount(++count);
Double subTotal = orderItem.getSubTotal();
orderItem.setSubTotal(orderItem.getSubTotal()+subTotal);
productMap.put(productId, orderItem);
}
}
classification.setParentId(parentId);
classification.setType(type);
classificationService.update(classification);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping("/del.do")
public ResultBean<Boolean> del(int id) {
classificationService.delById(id);
return new ResultBean<>(true);
}
@RequestMapping("/list.do")
@ResponseBody
public ResultBean<List<Classification>> findAll(int type,
int pageindex, @RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
List<Classification> list = new ArrayList<>();
if (pageindex == -1)
list = classificationService.findAll(type);
else {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
list = classificationService.findAll(type, pageable).getContent();
}
return new ResultBean<>(list);
}
@ResponseBody
@RequestMapping("/getTotal.do")
public ResultBean<Integer> getTotal(int type) {
Pageable pageable = new PageRequest(1, 15, null);
int count = (int) classificationService.findAll(type, pageable).getTotalElements();
return new ResultBean<>(count);
}
}
@Override
public Order findById(int id) {
return orderDao.getOne(id);
}
@Override
public Page<Order> findAll(Pageable pageable) {
return orderDao.findAll(pageable);
}
@Override
public List<Order> findAllExample(Example<Order> example) {
return orderDao.findAll(example);
}
@Override
public void update(Order order) {
orderDao.save(order);
}
@Override
public int create(Order order) {
Order order1 = orderDao.save(order);
return order1.getId();
}
@Override
public void delById(int id) {
orderDao.delete(id);
}
/**
* 查询订单项详情
* @param orderId
* @return
*/
@Override
public List<OrderItem> findItems(int orderId) {
List<OrderItem> list = orderItemDao.findByOrderId(orderId);
for (OrderItem orderItem : list) {
Product product = productDao.findOne(orderItem.getProductId());
orderItem.setProduct(product);
}
return list;
}
/**
* 更改订单状态
map.put("user", user);
return "admin/user/edit";
}
/**
* 获取所有用户列表
*
* @param pageindex
* @return
*/
@ResponseBody
@RequestMapping("/list.do")
public ResultBean<List<User>> findAllUser(int pageindex,
@RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
List<User> users = userService.findAll(pageable).getContent();
return new ResultBean<>(users);
}
@ResponseBody
@RequestMapping("/getTotal.do")
public ResultBean<Integer> geTotal() {
Pageable pageable = new PageRequest(1, 15, null);
int total = (int) userService.findAll(pageable).getTotalElements();
return new ResultBean<>(total);
}
@ResponseBody
@RequestMapping("/del.do")
public ResultBean<Boolean> del(int id) {
userService.delById(id);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/update.do")
public ResultBean<Boolean> update(int id,String username,
String password,String name,
String phone,String email,
String addr) {
// 更新前先查询
User user = userService.findById(id);
user.setId(id);
user.setName(name);
user.setUsername(username);
user.setPassword(password);
user.setAddr(addr);
user.setEmail(email);
user.setPhone(phone);
public class AuthorizationFilter implements Filter {
public AuthorizationFilter() {
}
private static final Logger LOGGER = LoggerFactory.getLogger(AuthorizationFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
// 支持跨域访问
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,X-Custom-Header");
response.setHeader("X-Powered-By", "SpringBoot");
if ("option".equalsIgnoreCase(request.getMethod())) {
responseJSON(response, new HashMap<>());
return;
}
//除了拦截login.html 其他html都拦截
StringBuffer url = request.getRequestURL();
//System.out.println(url);
String path = url.toString();
// 只拦截这些类型请求
if (path.endsWith(".do") || path.endsWith(".html")) {
// 登录,图片不拦截
if (path.endsWith("toLogin.html")
|| path.endsWith("toRegister.html")
|| path.endsWith("register.do")
|| path.endsWith("login.do")
|| path.endsWith("logout.do")
|| path.endsWith("error.html")
|| path.endsWith("checkUsername.do")
|| path.indexOf("/mall/admin/product/img/") != -1
|| path.endsWith("index.html")
|| path.endsWith("classification/list.do")
|| path.indexOf("product") != -1) {
chain.doFilter(request, response);
} else {
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@Autowired
private ClassificationService classificationService;
@Autowired
private ShopCartService shopCartService;
/**
* 获取商品信息
*
* @param id
* @return
*/
@RequestMapping("/get.do")
public ResultBean<Product> getProduct(int id) {
Product product = productService.findById(id);
return new ResultBean<>(product);
}
/**
* 打开商品详情页面
*
* @param id
* @param map
* @return
*/
@RequestMapping("/get.html")
public String toProductPage(int id, Map<String, Object> map) {
Product product = productService.findById(id);
map.put("product", product);
return "mall/product/info";
}
/**
* 查找热门商品
*
* @return
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = ConstraintViolationException.class)
@ResponseBody
public ResultBean<String> validationExceptionHandler(HttpServletRequest req, ConstraintViolationException e) throws Exception {
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
StringBuilder strBuilder = new StringBuilder();
for (ConstraintViolation<?> violation : violations) {
strBuilder.append(violation.getMessage() + ",");
}
LOGGER.error(strBuilder.toString(), e);
ResultBean<String> r = new ResultBean(strBuilder.toString());
r.setData(req.getRequestURI());
return r;
}
}
@Controller
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
/**
* 打开订单列表页面
*
* @return
*/
@RequestMapping("/toList.html")
*/
@ResponseBody
@RequestMapping("/delCart.do")
public ResultBean<Boolean> delToCart(int productId, HttpServletRequest request) throws Exception {
shopCartService.remove(productId, request);
return new ResultBean<>(true);
}
/**
* 查看购物车商品
*
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/listCart.do")
public ResultBean<List<OrderItem>> listCart(HttpServletRequest request) throws Exception {
List<OrderItem> orderItems = shopCartService.listCart(request);
return new ResultBean<>(orderItems);
}
}
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
map.put("product", product);
return "mall/product/info";
}
/**
* 查找热门商品
*
* @return
*/
@ResponseBody
@RequestMapping("/hot.do")
public ResultBean<List<Product>> getHotProduct(String title) {
List<Product> products = productService.findHotProduct();
products = products.stream().filter(o -> title == null || title.equals("null") || o.getTitle().contains(title)).collect(Collectors.toList());
return new ResultBean<>(products);
}
/**
* 查找最新商品
*
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/new.do")
public ResultBean<List<Product>> getNewProduct(int pageNo, int pageSize, String title) {
Pageable pageable = new PageRequest(pageNo, pageSize);
List<Product> products = productService.findNewProduct(pageable);
products = products.stream().filter(o -> title == null || title.equals("null")|| o.getTitle().contains(title)).collect(Collectors.toList());
return new ResultBean<>(products);
}
/**
* 打开分类查看商品页面
*
* @return
*/
@RequestMapping("/category.html")
public String toCatePage(int cid, Map<String, Object> map) {
Classification classification = classificationService.findById(cid);
map.put("category", classification);
return "mall/product/category";
}
request.setAttribute("message", "更新失败!");
}
response.sendRedirect("toList.html");
}
@RequestMapping(method = RequestMethod.GET, value = "/img/{filename:.+}")
public void getImage(@PathVariable(name = "filename", required = true) String filename,
HttpServletResponse res) throws IOException {
File file = new File("file/" + filename);
if (file != null && file.exists()) {
res.setHeader("content-type", "application/octet-stream");
res.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
res.setContentLengthLong(file.length());
Files.copy(Paths.get(file.toURI()), res.getOutputStream());
}
}
}
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@Autowired
private ClassificationService classificationService;
@Autowired
private ShopCartService shopCartService;
/**
* 查找用户的订单列表
*
* @param request
* @return
*/
List<Order> findUserOrder(HttpServletRequest request);
/**
* 支付
* @param orderId
*/
void pay(int orderId);
/**
* 提交订单
* @param name
* @param phone
* @param addr
* @param request
* @param response
*/
void submit(String name, String phone, String addr, HttpServletRequest request, HttpServletResponse response) throws Exception;
/**
* 确认收货
* @param orderId
*/
void receive(int orderId);
}
HttpServletRequest request,
HttpServletResponse response) throws IOException {
User user = userService.checkLogin(username, password);
if (user != null) {
//登录成功 重定向到首页
request.getSession().setAttribute("user", user);
response.sendRedirect("/mall/index.html");
} else {
throw new LoginException("登录失败! 用户名或者密码错误");
}
}
/**
* 注册
*/
@RequestMapping("/register.do")
public void register(String username,
String password,
String name,
String phone,
String email,
String addr,
HttpServletResponse response) throws IOException {
User user = new User();
user.setUsername(username);
user.setPhone(phone);
user.setPassword(password);
user.setName(name);
user.setEmail(email);
user.setAddr(addr);
userService.create(user);
// 注册完成后重定向到登录页面
response.sendRedirect("/mall/user/toLogin.html");
}
/**
* 登出
*/
@RequestMapping("/logout.do")
Classification classification = new Classification();
classification.setCname(cname);
classification.setParentId(parentId);
classification.setType(type);
classificationService.create(classification);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/update.do")
public ResultBean<Boolean> update(int id, String cname, int parentId, int type) {
Classification classification = classificationService.findById(id);
classification.setCname(cname);
classification.setParentId(parentId);
classification.setType(type);
classificationService.update(classification);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping("/del.do")
public ResultBean<Boolean> del(int id) {
classificationService.delById(id);
return new ResultBean<>(true);
}
@RequestMapping("/list.do")
@ResponseBody
public ResultBean<List<Classification>> findAll(int type,
int pageindex, @RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
List<Classification> list = new ArrayList<>();
if (pageindex == -1)
list = classificationService.findAll(type);
else {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
list = classificationService.findAll(type, pageable).getContent();
}
return new ResultBean<>(list);
}
@ResponseBody
@RequestMapping("/getTotal.do")








更多推荐


所有评论(0)