Java中如何实现网上电子书城
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关Java中如何实现网上电子书城,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。项目描述: spring mvc +jsp实现的简单书城项目
千家信息网最后更新 2026年11月02日Java中如何实现网上电子书城
这篇文章将为大家详细讲解有关Java中如何实现网上电子书城,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
项目描述: spring mvc +jsp实现的简单书城项目,可以在支付宝沙箱内实现支付
运行环境: jdk8+tomcat9+mysql+IntelliJ IDEA
项目技术: spring+spring mvc+mybatis+jsp+maven


后台管理员图书管理代码:
@Controller@RequestMapping("/admin/book")@RequiresPermissions("book-manage")public class AdminBookController { @Autowired private IBookInfoService bookInfoService; @Autowired private BookDescMapper bookDescMapper; @Autowired private IStoreService storeService; @Value("${image.url.prefix}") private String urlPrefix; @RequestMapping("toAddition") @RequiresPermissions("book-add") public String toAddition() { return "admin/book/add"; } /** * 添加书籍 * */ @RequestMapping("/addition") @RequiresPermissions("book-add") public String addBook(BookInfo bookInfo, String bookDesc, MultipartFile pictureFile, HttpServletRequest request) throws Exception { uploadPicture(bookInfo, pictureFile, request); bookInfoService.saveBook(bookInfo, bookDesc); return "redirect:/admin/book/list"; } /** * 书籍列表 * */ @RequestMapping(value = "/list") @RequiresPermissions("book-query") public String bookList(@RequestParam(defaultValue = "", required = false) String keywords, @RequestParam(value = "page", defaultValue = "1", required = false) int page, HttpSession session, Model model) { keywords = keywords.trim(); Store store = (Store) session.getAttribute("loginStore"); if (store != null) { PageInfo books = bookInfoService.findBookListByCondition(keywords, 0, page, 10, store.getStoreId()); model.addAttribute("bookPageInfo", books); model.addAttribute("keywords", keywords); } else { model.addAttribute("exception", "您请求的资源不存在"); return "exception"; } return "admin/book/list"; } /** * 更新页面回显 * * @param bookId * @param model * @return * @throws Exception */ @RequestMapping("/echo") @RequiresPermissions("book-edit") public String echo(int bookId, Model model) throws BSException { BookInfo bookInfo = bookInfoService.adminFindById(bookId); BookDesc bookDesc = bookDescMapper.selectByPrimaryKey(bookInfo.getBookId()); model.addAttribute("bookInfo", bookInfo); model.addAttribute("bookDesc", bookDesc); return "admin/book/edit"; } @RequestMapping("/update") @RequiresPermissions("book-edit") public String updateBook(BookInfo bookInfo, String bookDesc, String keywords, MultipartFile pictureFile, HttpServletRequest request, RedirectAttributes ra) throws Exception { uploadPicture(bookInfo, pictureFile, request); BookInfo originBook = bookInfoService.findById(bookInfo.getBookId()); bookInfoService.updateBook(bookInfo, bookDesc); //更新图片后,删除原来的图片 String realPath = request.getServletContext().getRealPath("/"); File uploadPic = new File(realPath + originBook.getImageUrl()); uploadPic.delete(); //重定向到书籍列表 ra.addAttribute("keywords", keywords); return "redirect:/admin/book/list"; } @RequestMapping("/deletion/{bookId}") @RequiresPermissions("book-delete") public String deletion(@PathVariable("bookId") int bookId, String keywords, RedirectAttributes ra, HttpServletRequest request) throws BSException { BookInfo bookInfo = bookInfoService.findById(bookId); String realPath = request.getServletContext().getRealPath("/"); File uploadPic = new File(realPath + bookInfo.getImageUrl()); uploadPic.delete(); bookInfoService.deleteBook(bookId); ra.addAttribute("keywords", keywords); return "redirect:/admin/book/list"; } @RequestMapping("/shelf") @RequiresPermissions("book-shelf") public String bookOffShelf(int bookId, int isShelf, String keywords, RedirectAttributes ra) { bookInfoService.changeShelfStatus(bookId, isShelf); ra.addAttribute("keywords", keywords); return "redirect:/admin/book/list"; } private void uploadPicture(BookInfo bookInfo, MultipartFile pictureFile, HttpServletRequest request) throws IOException { if (pictureFile != null) { if (!StringUtils.isEmpty(pictureFile.getOriginalFilename())) { String realPath = request.getServletContext().getRealPath("/" + urlPrefix); //原始文件名称 String pictureFileName = pictureFile.getOriginalFilename(); //新文件名称 String newFileName = IDUtils.genShortUUID() + pictureFileName.substring(pictureFileName.lastIndexOf(".")); //上传图片 File uploadPic = new File(realPath + File.separator + newFileName); //向磁盘写文件 pictureFile.transferTo(uploadPic); bookInfo.setImageUrl(urlPrefix + File.separator + newFileName); } } } } 书信息控制层:
@Controller@RequestMapping("/book")public class BookInfoController { @Autowired private IBookInfoService bookInfoService; @Autowired private BookDescMapper bookDescMapper; /** * 查询某一本书籍详情 * * @param bookId * @param model * @return */ @RequestMapping("/info/{bookId}") public String bookInfo(@PathVariable("bookId") Integer bookId, Model model) throws BSException { //查询书籍 BookInfo bookInfo = bookInfoService.findById(bookId); //查询书籍推荐列表 List recommendBookList = bookInfoService.findBookListByCateId(bookInfo.getBookCategoryId(), 1, 5); //查询书籍详情 BookDesc bookDesc = bookDescMapper.selectByPrimaryKey(bookId); //增加访问量 bookInfoService.addLookMount(bookInfo); Collections.shuffle(recommendBookList); model.addAttribute("bookInfo", bookInfo); model.addAttribute("bookDesc", bookDesc); model.addAttribute("recommendBookList", recommendBookList); return "book_info"; } /** * 通过关键字和书籍分类搜索书籍列表 * * @param keywords * @return */ @RequestMapping("/list") public String bookSearchList(@RequestParam(defaultValue = "", required = false) String keywords, @RequestParam(defaultValue = "0", required = false) int cateId,//分类Id,默认为0,即不按照分类Id查 @RequestParam(defaultValue = "1", required = false) int page, @RequestParam(defaultValue = "6", required = false) int pageSize, Model model) { keywords = keywords.trim(); PageInfo bookPageInfo = bookInfoService.findBookListByCondition(keywords, cateId, page, pageSize,0);//storeId为0,不按照商店Id查询 model.addAttribute("bookPageInfo", bookPageInfo); model.addAttribute("keywords", keywords); model.addAttribute("cateId", cateId); return "book_list"; } } 用户管理控制层:
@Controller@RequestMapping("/user")public class UserController { @Autowired private IUserService userService; @Autowired private IMailService mailService; @Autowired private IStoreService storeService; @Value("${mail.fromMail.addr}") private String from; @Value("${my.ip}") private String ip; private final String USERNAME_PASSWORD_NOT_MATCH = "用户名或密码错误"; private final String USERNAME_CANNOT_NULL = "用户名不能为空"; @RequestMapping("/login") public String login(@RequestParam(value = "username", required = false) String username, @RequestParam(value = "password", required = false) String password, HttpServletRequest request, Model model) { if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) { return "login"; } //未认证的用户 Subject userSubject = SecurityUtils.getSubject(); if (!userSubject.isAuthenticated()) { UsernamePasswordToken token = new UsernamePasswordToken(username, password); token.setRememberMe(false);//禁止记住我功能 try { //登录成功 userSubject.login(token); User loginUser = (User) userSubject.getPrincipal(); request.getSession().setAttribute("loginUser", loginUser); Store store = storeService.findStoreByUserId(loginUser.getUserId()); request.getSession().setAttribute("loginStore", store); SavedRequest savedRequest = WebUtils.getSavedRequest(request); String url = "/"; if (savedRequest != null) { url = savedRequest.getRequestUrl(); if(url.contains(request.getContextPath())){ url = url.replace(request.getContextPath(),""); } } if(StringUtils.isEmpty(url) || url.equals("/favicon.ico")){ url = "/"; } return "redirect:" + url; } catch (UnknownAccountException | IncorrectCredentialsException uae) { model.addAttribute("loginMsg", USERNAME_PASSWORD_NOT_MATCH); return "login"; } catch (LockedAccountException lae) { model.addAttribute("loginMsg", "账户已被冻结!"); return "login"; } catch (AuthenticationException ae) { model.addAttribute("loginMsg", "登录失败!"); return "login"; } } else { //用户已经登录 return "redirect:/index"; } } @RequestMapping("/info") public String personInfo(){ return "user_info"; } /* @RequestMapping("/login1") public String login1(@RequestParam(value = "username", required = false) String username, @RequestParam(value = "password", required = false) String password, Model model, HttpServletRequest request) { if (StringUtils.isEmpty(username)) { model.addAttribute("loginMsg", USERNAME_CANNOT_NULL); return "login"; } if (StringUtils.isEmpty(password)) { model.addAttribute("loginMsg", "密码不能为空"); return "login"; } BSResult bsResult = userService.login(username, password); //登录校验失败 if (bsResult.getData() == null) { model.addAttribute("loginMsg", bsResult.getMessage()); return "login"; } //登录校验成功,重定向到首页 User user = bsResult.getData(); //置密码为空 user.setPassword(""); request.getSession().setAttribute("user", user); return "redirect:/"; } */ //shiro框架帮我们注销 @RequestMapping("/logout") @CacheEvict(cacheNames="authorizationCache",allEntries = true) public String logout() { SecurityUtils.getSubject().logout(); return "redirect:/page/login"; } /** * 注册 检验用户名是否存在 * * @param username * @return */ @RequestMapping("/checkUserExist") @ResponseBody public BSResult checkUserExist(String username) { if (StringUtils.isEmpty(username)) { return BSResultUtil.build(200, USERNAME_CANNOT_NULL, false); } return userService.checkUserExistByUsername(username); } /** * 注册,发激活邮箱 * * @param user * @return */ @RequestMapping("/register") public String register(User user, Model model) { BSResult isExist = checkUserExist(user.getUsername()); //尽管前台页面已经用ajax判断用户名是否存在, // 为了防止用户不是点击前台按钮提交表单造成的错误,后台也需要判断 if ((Boolean) isExist.getData()) { user.setActive("1"); BSResult bsResult = userService.saveUser(user); //获得未激活的用户 User userNotActive = (User) bsResult.getData(); /* try { mailService.sendHtmlMail(user.getEmail(), "---用户激活---", "亲爱的" + user.getUsername() + ",请您点击此链接前往激活"); } catch (Exception e) { e.printStackTrace(); model.addAttribute("registerError", "发送邮件异常!请检查您输入的邮箱地址是否正确。"); return "fail"; }*/ model.addAttribute("username", user.getUsername()); return "register_success"; } else { //用户名已经存在,不能注册 model.addAttribute("registerError", isExist.getMessage()); return "register"; } } @RequestMapping("/active") public String activeUser(String activeCode, Model model) { BSResult bsResult = userService.activeUser(activeCode); if (!StringUtils.isEmpty(bsResult.getData())) { model.addAttribute("username", bsResult.getData()); return "active_success"; } else { model.addAttribute("failMessage", bsResult.getMessage()); return "fail"; } } @RequestMapping("/update") @ResponseBody public BSResult updateUser(User user, HttpSession session){ User loginUser = (User) session.getAttribute("loginUser"); loginUser.setNickname(user.getNickname()); loginUser.setLocation(user.getLocation()); loginUser.setDetailAddress(user.getDetailAddress()); loginUser.setGender(user.getGender()); loginUser.setUpdated(new Date()); loginUser.setPhone(user.getPhone()); loginUser.setIdentity(user.getIdentity()); loginUser.setPhone(user.getPhone()); BSResult bsResult = userService.updateUser(loginUser); session.setAttribute("loginUser", loginUser); return bsResult; } @RequestMapping("/password/{userId}") @ResponseBody public BSResult changePassword(@PathVariable("userId") int userId,String oldPassword,String newPassword){ if(StringUtils.isEmpty(oldPassword) || StringUtils.isEmpty(newPassword)){ return BSResultUtil.build(400, "密码不能为空"); } return userService.compareAndChange(userId,oldPassword,newPassword); } } 关于"Java中如何实现网上电子书城"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
用户
书籍
用户名
查询
登录
密码
激活
书城
图片
文件
篇文章
项目
分类
管理
电子
成功
前台
后台
更多
详情
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云南咖啡
互联网科技战争
腾讯阿里互联网科技
上海互联网科技有限公司
嘟嘟瓜互联网科技
万易互联网科技有限公司
互联网科技革命
华中科技大学互联网
智慧科技互联网
新浪科技互联网
汉立互联网科技有限公司联系电话
群盈汇互联网科技有限公司
上海科技产业互联网平台
怎样加入科技互联网
黑科技 体验场景 互联网大会
城市宝互联网科技有限公司
郑州欣桑互联网科技有限公司
保山互联网科技靠谱吗
科技互联网公司两年变化
互联网领先科技成果宣传视频
河南云网互联网络科技有限公司
麻工互联网科技
北京互联网络科技有限公司
宜安科技 互联网金融
温州喔噻互联网科技有限公司
成都互联网科技公司100强
千方科技属于互联网企业吗
宜昌元轩互联网科技有限公司
互联网安防科技感
恒生科技互联网指数十大成分股