Java项目:体育用品商城(java+SpringBoot+jsp+html+maven+mysql)

article/2025/10/19 13:44:39

源码获取:博客首页 "资源" 里下载!

项目介绍

本项目为前后台管理系统,包括管理员与普通用户两种角色;
管理员角色包含以下功能:
管理员登录,用户管理,商品类型管理,商品管理,订单信息管理,用户留言管理,资讯管理等功能。

用户角色包含以下功能:
用户首页,用户登录,商品推荐,资讯信息,留言板,查看商品,提交订单,查看订单信息,个人资料管理等功能。

ps:推荐模块用了协同过滤推荐算法,下订单模块用的是百度地图api。本商城可以修改为任意商城不止是体育商城。

环境需要

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. 后端:SpringBoot

2. 前端:HTML+JSP+CSS+JavaScript+jQuery

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中application.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,在浏览器中输入http://localhost:8110/ 登录
管理员账号/密码:admin/admin
用户账号/密码: user/123456

 

 

 

 

 

用户相关接口:

/*** 用户相关接口*/
@Controller
@RequestMapping("/index")
public class UserController{@Resourceprivate UserService userService;@Resourceprivate GoodService goodService;@Resourceprivate OrderService orderService;@Resourceprivate CartService cartService;/*** 用户注册* @return*/@GetMapping("/register")public String reg() {return "/index/register.jsp";}/*** 用户注册* @return*/@PostMapping("/register")public String register(Users user, HttpServletRequest request){if (user.getUsername().isEmpty()) {request.setAttribute("msg", "用户名不能为空!");}else if (Objects.nonNull(userService.getByUsername(user.getUsername()))) {request.setAttribute("msg", "用户名已存在!");}else {userService.add(user);request.setAttribute("msg", "注册成功 可以去登录了!");return "/index/login.jsp";}return "/index/register.jsp";}/*** 用户登录* @return*/@GetMapping("/login")public String log() {return "/index/login.jsp";}/*** 用户登录* @return*/@PostMapping("/login")public String login(Users user, HttpServletRequest request, HttpSession session) {Users loginUser = userService.getByUsernameAndPassword(user.getUsername(), user.getPassword());if (Objects.isNull(loginUser)) {request.setAttribute("msg", "用户名或密码错误");return "/index/login.jsp";}session.setAttribute("user", loginUser);// 还原购物车session.setAttribute("cartCount", cartService.getCount(loginUser.getId()));String referer = request.getHeader("referer"); // 来源页面System.out.println(referer); //TODOreturn "redirect:index";}/*** 注销登录* @return*/@GetMapping("/logout")public String logout(HttpSession session) {session.removeAttribute("user");session.removeAttribute("cartCount");return "/index/login.jsp";}/*** 查看积分*/@GetMapping("/mypoint")public String mypoint() {return "/index/mypoint.jsp";}//积分充值@RequestMapping("/addPoint")public String addPoint(double point,HttpSession session,HttpServletRequest request){Users users = (Users)session.getAttribute("user");BigDecimal bigDecimal = new BigDecimal(Double.toString(point)).add(new BigDecimal(Double.toString(users.getPoint())));users.setPoint(bigDecimal.doubleValue());int count = userService.updatePoint(users);if(count > 0){session.setAttribute("user",users);request.setAttribute("msg","充值成功!");}else{request.setAttribute("msg","充值失败!");}return "/index/mypoint.jsp";}/*** 查看购物车* @return*/@GetMapping("/cart")public String cart(HttpServletRequest request, HttpSession session) {Users user = (Users) session.getAttribute("user");request.setAttribute("cartList", cartService.getList(user.getId()));request.setAttribute("cartCount", cartService.getCount(user.getId()));request.setAttribute("cartTotal", cartService.getTotal(user.getId()));return "/index/cart.jsp";}/*** 购物车总金额* @return*/@GetMapping("/cartTotal")public @ResponseBody int cartTotal(HttpSession session){Users user = (Users) session.getAttribute("user");return cartService.getTotal(user.getId());}/*** 加入购物车* @return*/@PostMapping("/cartBuy")public @ResponseBody boolean cartBuy(int goodId, HttpSession session){Users user = (Users) session.getAttribute("user");return cartService.save(goodId, user.getId());}/*** 添加数量*/@PostMapping("/cartAdd")public @ResponseBody boolean cartAdd(int id){return cartService.add(id);}/*** 减少数量*/@PostMapping("/cartLess")public @ResponseBody boolean cartLess(int id){return cartService.less(id);}/*** 删除*/@PostMapping("/cartDelete")public @ResponseBody boolean cartDelete(int id){return cartService.delete(id);}/*** 查看订单* @return* @throws UnsupportedEncodingException */@GetMapping("/order")public String order(HttpServletRequest request, HttpSession session,@RequestParam(required=false, defaultValue="1")int page, @RequestParam(required=false, defaultValue="6")int size) throws UnsupportedEncodingException{Users user = (Users) session.getAttribute("user");request.setAttribute("orderList", orderService.getListByUserid(user.getId(), page, size));request.setAttribute("pageHtml", PageUtil.getPageHtml(request, orderService.getCountByUserid(user.getId()), page, size));return "/index/order.jsp";}/*** 直接购买* @return* @throws MyException */@PostMapping("/orderAdd")public String orderAdd(int goodId, HttpSession session) throws MyException{Users user = (Users) session.getAttribute("user");int orderId = orderService.add(goodId, user.getId());return "redirect:orderPay?id="+orderId; // 跳转支付}/*** 购物车结算* @return* @throws MyException */@GetMapping("/orderSave")public String orderSave(ServletRequest request, HttpSession session) throws MyException{Users user = (Users) session.getAttribute("user");int orderId = orderService.save(user.getId());session.removeAttribute("cartCount"); // 清理购物车sessionreturn "redirect:orderPay?id="+orderId; // 跳转支付}/*** 支付页面* @return*/@GetMapping("/orderPay")public String orderPay(int id, ServletRequest request) {request.setAttribute("order", orderService.get(id));return "/index/pay.jsp";}/*** 支付(模拟)* @return*/@PostMapping("/orderPay")@ResponseBodypublic int orderPay(Orders order,HttpSession session) {Users users = (Users) session.getAttribute("user");BigDecimal bigDecimal = new BigDecimal(0);if(order.getPaytype() == Orders.PAYTYPE_OFFLINE){//为积分支付时double d1 = order.getTotal();//商品总价if(users.getPoint().compareTo(d1) < 0){return -1;}else{//总积分 = 用户积分 - 抵扣积分bigDecimal = new BigDecimal(Double.toString(users.getPoint())).subtract(new BigDecimal(Double.toString(d1)));}}else{double d2 = order.getTotal()/100;//购买商品获取的积分//总积分 = 用户积分 + 获取的bigDecimal = new BigDecimal(Double.toString(users.getPoint())).add(new BigDecimal(Double.toString(d2)));}users.setPoint(bigDecimal.doubleValue());//保存积分int count = userService.updatePoint(users);if(count > 0){session.setAttribute("user",users);//更新用户积分}orderService.pay(order);return 1;}/*** 收货地址* @return*/@GetMapping("/address")public String address(){ // 使用session中的数据return "/index/address.jsp";}/*** 修改信息* @return*/@PostMapping("/addressUpdate")public String addressUpdate(String name, String phone, String address, HttpServletRequest request, HttpSession session){Users user = (Users) session.getAttribute("user");userService.update(user.getId(), name, phone, address);  // 更新数据库session.setAttribute("user", userService.get(user.getId())); // 更新sessionrequest.setAttribute("msg", "信息修改成功!");return "/index/address.jsp";}/*** 收货地址* @return*/@GetMapping("/password")public String password(){ // 使用session中的数据return "/index/password.jsp";}/*** 修改密码* @return*/@PostMapping("/passwordUpdate")public String passwordUpdate(String password, String passwordNew, HttpServletRequest request, HttpSession session){Users user = (Users) session.getAttribute("user");user = userService.get(user.getId());if(!user.getPassword().equals(SafeUtil.encode(password))) {request.setAttribute("msg", "原密码错误!");}else {userService.updatePassword(user.getId(), passwordNew);request.setAttribute("msg", "密码修改成功!");}return "/index/password.jsp";}/** 用戶確認收貨*/@RequestMapping("/userfinish")public String userFinish(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.finish(id);return "redirect:order?page="+page;}
}

后台管理接口:

/*** 后台管理接口*/
@Controller
@RequestMapping("/admin")
public class AdminController {@Autowiredprivate AdminService adminService;@Autowiredprivate OrderService orderService;@Autowiredprivate UserService userService;@Autowiredprivate GoodService goodService;@Autowiredprivate TopService topService;@Autowiredprivate TypeService typeService;/*** 管理员登录 (逻辑判断)* @return*/@GetMapping("/login")public String log() {return "/admin/login.jsp";}/*** 管理员登录* @return*/@PostMapping("/login")public String login(String username, String password, HttpServletRequest request, HttpSession session) {Admins admin = adminService.getByUsernameAndPassword(username, password);if (Objects.nonNull(admin)) {session.setAttribute("admin", admin);return "redirect:index";}request.setAttribute("msg", "用户名或密码错误!");return "/admin/login.jsp";}/*** 退出* @return*/@GetMapping("/logout")public String logout(HttpSession session) {session.removeAttribute("admin");return "/admin/login.jsp";}/*** 后台首页* @return*/@GetMapping("/index")public String index(HttpServletRequest request) {request.setAttribute("msg", "恭喜你! 登录成功了");return "/admin/index.jsp";}/*** 类目列表* @return*/@GetMapping("/typeList")public String typeList(HttpServletRequest request) {request.setAttribute("flag", 1);request.setAttribute("typeList", typeService.getList());return "/admin/type_list.jsp";}/*** 类目添加* @return*/@GetMapping("/typeAdd")public String typeAdd(HttpServletRequest request) {request.setAttribute("flag", 1);return "/admin/type_add.jsp";}/*** 类目添加* @return* @throws Exception */@PostMapping("/typeSave")public String typeSave(Types type) throws Exception {typeService.add(type);return "redirect:typeList?flag=1";}/*** 类目更新* @return*/@GetMapping("/typeEdit")public String typeEdit(int id, HttpServletRequest request) {request.setAttribute("flag", 1);request.setAttribute("type", typeService.get(id));return "/admin/type_edit.jsp";}/*** 类目更新* @return* @throws Exception */@PostMapping("/typeUpdate")public String typeUpdate(Types type) throws Exception {typeService.update(type);return "redirect:typeList?flag=1";}/*** 类目删除* @return*/@GetMapping("/typeDelete")public String typeDelete(int id) {typeService.delete(id);return "redirect:typeList?flag=1";}/*** 产品列表* @return*/@GetMapping("/goodList")public String goodList(HttpServletRequest request, @RequestParam(required=false, defaultValue="0") byte type,@RequestParam(required=false, defaultValue="1") int page,@RequestParam(required=false, defaultValue="10") int size) {request.setAttribute("flag", 2);request.setAttribute("page", page);request.setAttribute("type", type);if(type > 0) {String goodIds = topService.getGoodIdsByType(type);request.setAttribute("goodList", goodService.getListByIds(goodIds, page, size));request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getCountByIds(goodIds), page, size));}else {request.setAttribute("goodList", goodService.getList(page, size));request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getCount(), page, size));}return "/admin/good_list.jsp";}/*** 产品添加* @return*/@GetMapping("/goodAdd")public String goodAdd(HttpServletRequest request) {request.setAttribute("flag", 2);request.setAttribute("typeList", typeService.getList());return "/admin/good_add.jsp";}/*** 产品添加* @return* @throws Exception */@PostMapping("/goodSave")public String goodSave(Goods good, MultipartFile file,@RequestParam(required=false, defaultValue="1") int page) throws Exception {good.setCover(UploadUtil.upload(file));goodService.add(good);return "redirect:goodList?flag=2&page="+page;}/*** 产品更新* @return*/@GetMapping("/goodEdit")public String goodEdit(int id, HttpServletRequest request) {request.setAttribute("flag", 2);request.setAttribute("typeList", typeService.getList());request.setAttribute("good", goodService.get(id));return "/admin/good_edit.jsp";}/*** 产品更新* @return* @throws Exception */@PostMapping("/goodUpdate")public String goodUpdate(Goods good, MultipartFile file, @RequestParam(required=false, defaultValue="1") int page) throws Exception {if (Objects.nonNull(file) && !file.isEmpty()) {good.setCover(UploadUtil.upload(file));}goodService.update(good);return "redirect:goodList?flag=2&page="+page;}/*** 产品删除* @return*/@GetMapping("/goodDelete")public String goodDelete(int id, @RequestParam(required=false, defaultValue="1") int page) {goodService.delete(id);return "redirect:goodList?flag=2&page="+page;}/*** 添加推荐* @return*/@PostMapping("/topSave")public @ResponseBody String topSave(int goodId, byte type) {return topService.add(goodId, type) ? "ok" : null;}/*** 删除推荐* @return*/@PostMapping("/topDelete")public @ResponseBody String topDelete(int goodId, byte type) {return topService.delete(goodId, type) ? "ok" : null;}/*** 订单列表* @return*/@GetMapping("/orderList")public String orderList(HttpServletRequest request,@RequestParam(required=false, defaultValue="0")byte status, @RequestParam(required=false, defaultValue="1") int page, @RequestParam(required=false, defaultValue="10") int size) {request.setAttribute("flag", 3);request.setAttribute("status", status);request.setAttribute("orderList", orderService.getList(status, page, size));request.setAttribute("pageTool", PageUtil.getPageTool(request, orderService.getCount(status), page, size));return "/admin/order_list.jsp";}/*** 订单发货* @return*/@GetMapping("/orderSend")public String orderSend(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.send(id);return "redirect:orderList?flag=3&status="+status+"&page="+page;}/*** 订单完成* @return*/@GetMapping("/orderFinish")public String orderFinish(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.finish(id);return "redirect:orderList?flag=3&status="+status+"&page="+page;}/*** 订单删除* @return*/@GetMapping("/orderDelete")public String orderDelete(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.delete(id);return "redirect:orderList?flag=3&status="+status+"&page="+page;}/*** 顾客管理* @return*/@GetMapping("/userList")public String userList(HttpServletRequest request,@RequestParam(required=false, defaultValue="1") int page, @RequestParam(required=false, defaultValue="10") int size) {request.setAttribute("flag", 4);request.setAttribute("userList", userService.getList(page, size));request.setAttribute("pageTool", PageUtil.getPageTool(request, userService.getCount(), page, size));return "/admin/user_list.jsp";}/*** 顾客添加* @return*/@GetMapping("/userAdd")public String userAdd(HttpServletRequest request) {request.setAttribute("flag", 4);return "/admin/user_add.jsp";}/*** 顾客添加* @return*/@PostMapping("/userSave")public String userSave(Users user, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {if (Objects.nonNull(userService.getByUsername(user.getUsername()))) {request.setAttribute("msg", "用户名已存在!");return "/admin/user_add.jsp";}userService.add(user);return "redirect:userList?flag=4&page="+page;}/*** 顾客密码重置页面* @return*/@GetMapping("/userRe")public String userRe(int id, HttpServletRequest request) {request.setAttribute("flag", 4);request.setAttribute("user", userService.get(id));return "/admin/user_reset.jsp";}/*** 顾客密码重置* @return*/@PostMapping("/userReset")public String userReset(int id, String password, @RequestParam(required=false, defaultValue="1") int page) {userService.updatePassword(id, password);return "redirect:userList?page="+page;}/*** 顾客更新* @return*/@GetMapping("/userEdit")public String userEdit(int id, HttpServletRequest request) {request.setAttribute("flag", 4);request.setAttribute("user", userService.get(id));return "/admin/user_edit.jsp";}/*** 顾客更新* @return*/@PostMapping("/userUpdate")public String userUpdate(int id, String name, String phone, String address, @RequestParam(required=false, defaultValue="1") int page) {userService.update(id, name, phone, address);return "redirect:userList?flag=4&page="+page;}/*** 顾客删除* @return*/@GetMapping("/userDelete")public String userDelete(int id, @RequestParam(required=false, defaultValue="1") int page) {userService.delete(id);return "redirect:userList?flag=4&page="+page;}/*** 管理员列表* @return*/@GetMapping("/adminList")public String adminList(HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page, @RequestParam(required=false, defaultValue="10") int size) {request.setAttribute("flag", 5);request.setAttribute("adminList", adminService.getList(page, size));request.setAttribute("pageTool", PageUtil.getPageTool(request, adminService.getCount(), page, size));return "/admin/admin_list.jsp";}/*** 管理员添加* @return*/@GetMapping("/adminAdd")public String adminAdd(HttpServletRequest request) {request.setAttribute("flag", 5);return "/admin/admin_add.jsp";}/*** 管理员密码重置* @return*/@GetMapping("/adminRe")public String adminRe(int id, HttpServletRequest request) {request.setAttribute("flag", 5);request.setAttribute("admin", adminService.get(id));return "/admin/admin_reset.jsp";}/*** 管理员密码重置* @return*/@PostMapping("/adminReset")public String adminReset(int id, String password, HttpServletRequest request,@RequestParam(required=false, defaultValue="1") int page) {adminService.update(id, password);return "redirect:adminList?page="+page;}/*** 管理员添加* @return*/@PostMapping("/adminSave")public String adminSave(Admins admin, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {if (Objects.nonNull(adminService.getByUsername(admin.getUsername()))) {request.setAttribute("msg", "用户名已存在!");return "/admin/admin_add.jsp";}adminService.add(admin);return "redirect:adminList?flag=5&page="+page;}/*** 管理员删除* @return*/@GetMapping("/adminDelete")public String adminDelete(int id, @RequestParam(required=false, defaultValue="1") int page) {adminService.delete(id);return "redirect:adminList?flag=5&page="+page;}/*** 图片上传* @throws Exception */@PostMapping("upload")public @ResponseBody Map<String, Object> upload(MultipartFile imgFile) throws Exception {Map<String, Object> map = new HashMap<>();if (Objects.nonNull(imgFile) && !imgFile.isEmpty()) {map.put("error", 0);map.put("url", UploadUtil.upload(imgFile));return map;}else {map.put("error", 1);map.put("message", "上传出错啦");}return map;}/*** 订单导出*/@RequestMapping("orderExportExcel")public void orderExportExcel(HttpServletResponse response){//导出所有订单List<Orders> orderList = orderService.getAllList();for(Orders orders : orderList){if(orders.getAddress() != null && !"".equals(orders.getAddress())){StringBuffer buf=new StringBuffer();buf.append(orders.getName()+"\n"+orders.getPhone()+"\n"+orders.getAddress());orders.setAddress(buf.toString());}if(orders.getStatus() == Orders.STATUS_UNPAY){orders.setName("未付款");}else if(orders.getStatus() == Orders.STATUS_PAYED){orders.setName("已付款");}else if(orders.getStatus() == Orders.PAYTYPE_OFFLINE){orders.setName("配送中");}else{orders.setName("已完成");}if(orders.getPaytype() == Orders.PAYTYPE_WECHAT){orders.setPhone("微信");}else if(orders.getPaytype() == Orders.PAYTYPE_ALIPAY){orders.setPhone("支付宝");}else{orders.setPhone("积分");}StringBuffer buf1=new StringBuffer();orders.setUsername(orders.getUser().getName());for(Items items : orders.getItemList()){buf1.append(items.getGood().getName() + " *" + items.getAmount() + "\n");}orders.setDingdanInfo(buf1.toString());}SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try {String export="订单编号#id,订单金额#total,商品详情#dingdanInfo,收货信息#address,订单状态#name,支付方式#phone,购买用户#username";//此处为标题,excel首行的title,按照此格式即可,格式无需改动,但是可以增加或者减少项目。String[] excelHeader = export.split(",");String fileName="订单" + sdf.format(new Date()); //className:生成的excel默认文件名和sheet页ExcelUtils.export(response, fileName, excelHeader, orderList);//调用封装好的导出方法,具体方法在下面} catch (Exception e) {e.printStackTrace();}}}

前台相关接口: 

/*** 前台相关接口*/
@Controller
@RequestMapping("/index")
public class IndexController{@Autowiredprivate GoodService goodService;@Autowiredprivate TypeService typeService;/*** 首页* @return*/@GetMapping("/index")public String index(HttpServletRequest request){request.setAttribute("flag", 1);// 今日推荐List<Goods> todayList = goodService.getListByTopType(Tops.TYPE_TODAY, 1, 6); // 取前6个request.setAttribute("todayList", todayList);// 热销排行List<Goods> hotList = goodService.getListOrderSales(1, 10); // 取前10个request.setAttribute("hotList", hotList);// 类目列表List<Types> typeList = typeService.getList();List<Map<String, Object>> dataList = new ArrayList<>();for(Types type : typeList) {Map<String, Object> map = new HashMap<>();map.put("type", type);map.put("goodList", goodService.getListByType(type.getId(), 1, 15)); // 取前15个dataList.add(map);}request.setAttribute("dataList", dataList);return "/index/index.jsp";}/*** 商品分类* @return* @throws UnsupportedEncodingException */@GetMapping("/type")public String type(HttpServletRequest request, @RequestParam(required=false, defaultValue="0")int id, @RequestParam(required=false, defaultValue="1")int page, @RequestParam(required=false, defaultValue="10")int size) throws UnsupportedEncodingException {request.setAttribute("type", typeService.get(id));request.setAttribute("goodList", goodService.getListByType(id, page, size));request.setAttribute("pageHtml", PageUtil.getPageHtml(request, goodService.getCountByType(id), page, size));return "/index/goods.jsp";}/*** 今日推荐* @return* @throws UnsupportedEncodingException */@GetMapping("/today")public String today(HttpServletRequest request, @RequestParam(required=false, defaultValue="1")int page, @RequestParam(required=false, defaultValue="10")int size) throws UnsupportedEncodingException {request.setAttribute("flag", 2);request.setAttribute("goodList", goodService.getListByTopType(Tops.TYPE_TODAY, page, size));request.setAttribute("pageHtml", PageUtil.getPageHtml(request, goodService.getCountByTopType(Tops.TYPE_TODAY), page, size));return "/index/goods.jsp";}/*** 热销推荐* @return* @throws UnsupportedEncodingException */@GetMapping("/hot")public String hot(HttpServletRequest request, @RequestParam(required=false, defaultValue="1")int page, @RequestParam(required=false, defaultValue="10")int size) throws UnsupportedEncodingException{request.setAttribute("flag", 3);request.setAttribute("goodList", goodService.getListOrderSales(page, size));request.setAttribute("pageHtml", PageUtil.getPageHtml(request, goodService.getCount(), page, size));return "/index/goods.jsp";}/*** 新品上市* @return* @throws UnsupportedEncodingException */@GetMapping("/new")public String news(HttpServletRequest request, @RequestParam(required=false, defaultValue="1")int page, @RequestParam(required=false, defaultValue="10")int size) throws UnsupportedEncodingException{request.setAttribute("flag", 4);request.setAttribute("goodList", goodService.getList(page, size));request.setAttribute("pageHtml", PageUtil.getPageHtml(request, goodService.getCount(), page, size));return "/index/goods.jsp";}/*** 搜索* @return*/@GetMapping("/search")public String search(String search, HttpServletRequest request, @RequestParam(required=false, defaultValue="1")int page, @RequestParam(required=false, defaultValue="10")int size) throws UnsupportedEncodingException {search = new String(search.getBytes("ISO8859-1"),"utf-8");request.setAttribute("search", search);System.out.println(search);if (Objects.nonNull(search) && !search.trim().isEmpty()) {request.setAttribute("goodList", goodService.getListByName(search, page, size));request.setAttribute("pageHtml", PageUtil.getPageHtml(request, goodService.getTotalByName(search), page, size));}return "/index/goods.jsp";}/*** 商品详情* @return*/@GetMapping("/detail")public String detail(int id, HttpServletRequest request){request.setAttribute("good", goodService.get(id));// 今日推荐前两个 在详情页显示request.setAttribute("todayList", goodService.getListByTopType(Tops.TYPE_TODAY, 1, 2));return "/index/detail.jsp";}}

 源码获取:博客首页 "资源" 里下载!


http://chatgpt.dhexx.cn/article/s1VVS13W.shtml

相关文章

Java项目:网上商城系统(java+jsp+servlert+mysql+ajax)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述&#xff08;需求文档PPT&#xff09; 功能&#xff1a; 主页显示热销商品&#xff1b;所有商品展示&#xff0c;可进行商品搜索&#xff1b;点 击商品进入商品详情页&#xff0c;显示库存&…

基于Java的商城购物系统

源码编号&#xff1a;F-A14 项目类型&#xff1a;Java SE项目&#xff08;GUI图形界面&#xff09; 项目名称&#xff1a;商城购物系统&#xff0c;开源免费 用户类型&#xff1a;双角色&#xff08;会员、管理员&#xff09; 主要技术&#xff1a;java、awt、swing、等技术…

《Java程序设计》实验报告——Java的基本程序设计结构

浙江理工大学 《Java程序设计》 实验报告 20 19&#xff5e;20 20学年第 1学期 学 院 信息学院 班 级 计算机科学技术18&#xff08;3&#xff09; 姓 名 申屠志刚 学 号 2018329621200 任课教师 任祝 &#xff08; 第4周 周二 345节&#xff09; 计算机科…

软件工程课程设计报告

本人的软件工程课程设计报告&#xff0c;可以作以参考&#xff0c;望读者不要全部照抄&#xff0c;仅为大家提供参考&#xff0c;感谢大家的支持&#xff01;&#xff01;&#xff01; 目录 1. 相关文档1.1 文档介绍1.2 文档范围1.3 读者对象 2. 需求分析报告2.1 需求分析背景…

汇编语言程序设计实验报告

运行环境masmplus 链接&#xff1a;https://pan.baidu.com/s/1jWoLfvxBxQgxd6wq21GK0w 提取码&#xff1a;ih43 目录 实验1 汇编语言源程序的输入实验目的实验原理实验仪器实验步骤实验要求 实验2 数据的建立与传送程序实验目的实验原理实验仪器实验步骤实验要求 实验3 分支程序…

C高级语言程序设计实验报告之选择结构程序设计

文章目录 实验目的题目代码题一题二题三题四 实验目的 1、了解C语言表示辑量的方法&#xff08;以0代表“假”&#xff0c;以非0代表“真”&#xff09; 2、学会正确使用遷辑运算符和遷辑表达式 3、熟掌握if语句的使用&#xff08;包括if语句的嵌套&#xff09; 4、熟掌握多分…

给你一份满分的程序设计报告(附源码)

ATM业务模拟系统功能要求 客户端&#xff1a; 定义用户数据对象&#xff0c;并以此为参数生成用户操作对象&#xff1b; 存款操作&#xff1a;生成一条新的业务信息&#xff08;业务对象&#xff09;&#xff0c;追加到交易记录中&#xff0c;并修改账号余额&#xff1b; 取款…

C++ 会议信息管理系统 程序设计报告

C 会议信息管理系统 C 会议信息管理系统 程序设计报告 会议记录管理系统 问题描述: 定义会议信息类class Conference 会议信息包括:会议编号&#xff0c;会议名称、部门名称、会议地点&#xff0c;会议日期&#xff0c;会议主会议记录人&#xff0c;出席人员&#xff0c;会…

Java高级程序设计课程设计报告

一、基于OBE模式的实验目的和要求 要求复习课件中理论知识&#xff1b;练习课堂所讲的例子&#xff1b;编写程序完成以下实验目标并上交实验报告&#xff08;包括电子文档与纸质文档&#xff09;。 能够根据Java集合框架&#xff0c;利用迭代方法编程实现对集合的遍历操作。能…

Java面向对象程序设计实验报告(实验三 继承的练习)

✨作者&#xff1a;命运之光 ✨ 专栏&#xff1a;Java面向对象程序设计实验报告 ​ 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录&#xff1a;源程序代码&#xff08;带注释&#xff09; demo3类 Person类 Student类 …

《程序设计基础课程设计》实验报告

《程序设计基础课程设计》实验报告 班 级&#xff1a; 学 号&#xff1a; 姓 名&#xff1a; 完成题目&#xff1a;1、2、3、4、5、6 概述 此次六道题目里面第四题是参考某博主的文章后实现的&#xff0c;有一些地方仍然不是特别理解&#xff0c;但是原文章里面存在一些小错…

Java面向对象程序设计实验报告(实验五 接口的练习)

✨作者&#xff1a;命运之光 ✨专栏&#xff1a;Java面向对象程序设计实验报告 ​ 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录&#xff1a;源程序代码&#xff08;带注释&#xff09; demo5类 Instrument类 Piano类 …

Python程序设计实验报告【合集】

课堂作业 1、词频统计&#xff1a;输入一个文件&#xff0c;程序读取文件&#xff0c;文件内容是英文内容&#xff0c;不少于500个单词的内容&#xff0c;统计每个单词在该短文内出现的次数。 https://www.jb51.net/article/144405.htm https://www.cnblogs.com/Eudemines/p/9…

Java面向对象程序设计实验报告(实验一 面向对象基础练习)

✨作者&#xff1a;命运之光 ✨ 专栏&#xff1a;Java面向对象程序设计实验报告 目录 ✨一、需求分析 ✨二、概要设计 ✨三、详细设计 ✨四、调试分析 ✨附录&#xff1a;源代码&#xff08;带注释&#xff09; 实验一 面向对象基础练习 实验环境&#xff1a;EclipseJDK …

《C语言程序设计》课程总结报告

《C语言程序设计》课程总结报告 一、我学到的内容 二、我的收获&#xff08;包括我完成的所有作业的链接收获&#xff09; 1.PTA作业 22年秋-第1周基础作业 https://pintia.cn/problem-sets/1575138141596397568 22年秋-第2周课后作业 https://pintia.cn/problem-sets/1…

(软件工程)-- 总体设计报告

1引言 1.1编写目的 本阶段完成系统的大致设计并说明系统的数据结构与软件结构&#xff0c;本概要设计说明书的目的就是进一步细化软件设计阶段得出的软件概貌&#xff0c;把它加工成程序细节上非常接近与源程序开发的软件标识。 预期读者&#xff1a;软件测试人员、程序开发员…

程序设计报告模板

一、问题及代码 /* * 文件名称&#xff1a;Ex1-1.cpp * 作 者&#xff1a;曾辉 * 完成日期&#xff1a;2015 年 1 月 1 日 * 版 本 号&#xff1a;v1.0 * 对任务及求解方法的描述部分: * 输入描述&#xff1a;无 * 问题描述&#xff1a;我的第一个C程序&#xff0c;熟…

C语言程序设计期末大作业—教师工资管理系统(附程序设计报告)

C语言大作业——教师工资管理系统 主要的难点在于文件读取 数据结构用的是链表 源码放上&#xff0c;直接粘贴复制就可以&#xff0c;我的C程大作业 具体的问题不懂的可以评论和私信&#xff0c;总之还是简单的 放张图片 程序设计报告可以私信我 #include<stdio.h> …

C语言程序设计 课程设计报告

C语言程序设计课程设计报告 一、 系统简介 学生成绩管理系统简介&#xff1a;一个简易的学生成绩管理系统&#xff0c;它包括并可以实现&#xff1a;“录入并保存学生信息、打印学生信息、读取学生信息、查找学生信息、删除学生信息、修改学生信息、排序学生信息、退出系统 ”…

程序设计基础实训报告

一、实训目的 程序设计基础是程序设计C语言和C语言的入门课程&#xff0c;该课程兼顾基础理论和编程实践。通过学习该课程的理论知识和编程实战&#xff0c;培养学生的专业实践技能&#xff0c;学校设有专用实训周&#xff0c;帮助学生全面牢固地掌握课堂教学内容、提升实际动手…