作者主页:夜未央5788

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

文末获取源码

项目介绍

用户角色包含以下功能:
用户登录,查看商品详情,按分类查看,查看我的书架,上传二手书等功能。

由于本程序规模不大,可供课程设计,毕业设计学习演示之用

PS:这个没有管理员角色。

环境需要

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+CSS+JavaScript+jquery

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;

2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;

若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;

3. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置;

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

运行截图

相关代码

图书控制器

package com.daniel.controller;import com.alibaba.fastjson.JSONObject;
import com.daniel.common.Result;
import com.daniel.common.ResultGenerator;
import com.daniel.pojo.Book;
import com.daniel.pojo.BookImage;
import com.daniel.pojo.Category;
import com.daniel.pojo.User;
import com.daniel.service.BookImageService;
import com.daniel.service.BookService;
import com.daniel.service.CategoryService;
import com.daniel.service.UserService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Map;@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate UserService userService;@Autowiredprivate BookService bookService;@Autowiredprivate BookImageService bookImageService;@Autowiredprivate CategoryService categoryService;// 日志文件private static final Logger log = Logger.getLogger(BookController.class);/*** 书本详情页* @param id 图书ID* @return 该ID图书的详情页*/@RequestMapping(value = "/{id}",method = RequestMethod.GET)public ModelAndView getBookDetail(@PathVariable("id") String id) {ModelAndView mav = new ModelAndView("bookDetail");int intId = Integer.parseInt(id);Book curBook = bookService.get(intId);curBook.setBookImage(bookImageService.getByBookId(intId));curBook.setUser(userService.get(bookService.getUserId(intId)));mav.addObject("book",curBook);return mav;}/*** 上传图书* @param request 用于获取当前用户信息* @param book 图书实体类* @param file 图片文件*/@RequestMapping(value = "",method = RequestMethod.POST)public Result uploadSell(HttpServletRequest request,Book book,@RequestParam(value = "image" , required = false) MultipartFile file){// 获取当前用户的信息User user = (User) request.getSession().getAttribute("user");try {if(file != null && book != null){// 写入图书信息SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");long time = System.currentTimeMillis();String timeStr= sdf.format(time);book.setDate(timeStr);book.setUser(user);bookService.add(book);BookImage bookImage = new BookImage();bookImage.setBook(book);bookImageService.add(bookImage);String imageName = bookImage.getId()+".jpg";String imagePath = request.getServletContext().getRealPath("/img/book-list/article/");File filePath = new File(imagePath,imageName);if (!filePath.getParentFile().exists()){filePath.getParentFile().mkdir();}file.transferTo(new File(imagePath + File.separator + imageName));log.info("request: book/upload , book: " + book.toString());return ResultGenerator.genSuccessResult();}else {return ResultGenerator.genFailResult("信息填写不完整或未上传图片!");}} catch (IOException e) {e.printStackTrace();return ResultGenerator.genFailResult("上传失败");}}/*** 更新图书的视图* @param id 图书的ID* @return 该ID的图书的更新界面*/@RequestMapping(value = "/renewal/{id}",method = RequestMethod.GET)public ModelAndView goEditBook(@PathVariable String id){ModelAndView  mav = new ModelAndView("editBook");int bookId = Integer.parseInt(id);Book curBook = bookService.get(bookId);log.info("request: book/update , book: " + curBook.toString());if (curBook != null){curBook.setBookImage(bookImageService.getByBookId(bookId));}mav.addObject("book",curBook);Map<Integer,String> categories = categoryService.listByMap();mav.addObject("categories",categories);return mav;}/*** 根据ID获取书的Category* @param book* 应该使用GET的,但是会产生不合法URI异常,待解决*/@RequestMapping(value = "/categories")public Result getCategory(@RequestBody Book book){JSONObject data = new JSONObject();Category category = bookService.get(book.getId()).getCategory();log.info("request: book/category/get , bookId: " + book.getId()+" , category:"+category.toString());if (category.getId() != 0){data.put("categoryId",category.getId());return ResultGenerator.genSuccessResult(data);}else {return ResultGenerator.genFailResult("无效的Category!");}}/*** 更新图书内容* @param request 用于获取路径* @param book 除图片外其他的图书信息* @param file 图片* @return* 应该使用PUT,可是需要上传图片,表单提交无法用PUT,待解决*/@RequestMapping(value = "/renewal",method = RequestMethod.POST)public Result editBook(HttpServletRequest request, Book book,@RequestParam(value = "image" , required = false) MultipartFile file){try {bookService.update(book);if (file != null) {BookImage bookImage = bookImageService.getByBookId(book.getId());bookImage.setBook(book);bookImageService.update(bookImage);String imageName = bookImage.getId() + ".jpg";String imagePath = request.getServletContext().getRealPath("/img/book-list/article/");File filePath = new File(imagePath, imageName);if (!filePath.getParentFile().exists()) {filePath.getParentFile().mkdir();}else if (filePath.exists()){filePath.delete();}file.transferTo(new File(imagePath + File.separator + imageName));}log.info("request: book/update , book: " + book.toString());return ResultGenerator.genSuccessResult();} catch (IOException e) {e.printStackTrace();return ResultGenerator.genFailResult("修改失败!");}}/*** 删除一本或多本图书* @param request 用于获取路径,删除图片* @param bookIds 要删除的图书ID数组*/@RequestMapping(value = "",method = RequestMethod.DELETE)public Result deleteBook(HttpServletRequest request, @RequestParam(value = "bookIds", required = false) String[] bookIds){if (bookIds != null) {// 遍历每个IDfor (String bookId : bookIds) {int id = Integer.parseInt(bookId);// 获取当前图书的图片名称与存放路径String imageName = bookImageService.getByBookId(id).getId() + ".jpg";String imagePath = request.getServletContext().getRealPath("/img/book-list/article/");File filePath = new File(imagePath, imageName);// 删除图片if (filePath.exists()){filePath.delete();}// 删除数据库中的图书bookImageService.deleteByBookId(id);bookService.delete(id);}log.info("request: book/delete , bookIds: " + Arrays.toString(bookIds));return ResultGenerator.genSuccessResult();}else {return ResultGenerator.genFailResult("删除失败!未选中图书");}}
}

前台控制器

package com.daniel.controller;import com.daniel.pojo.*;
import com.daniel.service.BookImageService;
import com.daniel.service.BookService;
import com.daniel.service.CategoryService;
import com.daniel.service.UserService;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;@Controller
public class ForeController {@Autowiredprivate BookService bookService;@Autowiredprivate CategoryService categoryService;@RequestMapping("/home.do")public ModelAndView goHome() {ModelAndView mav =new ModelAndView("home");Map<Integer, String> categories = categoryService.listByMap();Map<Category,List<Book>> booksMap = bookService.listByCategory();mav.addObject("categories",categories);mav.addObject("booksMap",booksMap);return mav;}@RequestMapping("/myBookshelf.do")public ModelAndView goMyBookshelf(HttpServletRequest request) {ModelAndView mav = new ModelAndView("myBookshelf");User user = (User) request.getSession().getAttribute("user");List<Book> books = bookService.listByUserId(user.getId(),1);List<Book> askBooks = bookService.listByUserId(user.getId(),0);mav.addObject("books",books);mav.addObject("askBooks",askBooks);return mav;}@RequestMapping("/goUpload.do")public ModelAndView upload(Book book){String path = book.getBookType()==1?"uploadSell":"uploadAsk";ModelAndView mav = new ModelAndView(path);Map<Integer,String> categories = categoryService.listByMap();mav.addObject("categories",categories);return mav;}@RequestMapping("/goBookStore.do")public ModelAndView goBookStore(Page page,Category category){ModelAndView mav = new ModelAndView("bookStore");Map<Integer, String> categories = categoryService.listByMap();Category curCategory = category.getId() !=0?categoryService.get(category.getId()):new Category();String categoryName = curCategory.getName() == null?"所有二手书":curCategory.getName();int total = bookService.count();page.calculateEnd(total);if (page.getStart() < 0) {page.setStart(0);}else if (page.getStart() > total){page.setEnd(page.getEnd());}PageHelper.offsetPage(page.getStart(),16);List<Book> books = curCategory.getId() == 0?bookService.listByBookType(1):bookService.listByCategoryId(1,curCategory.getId());mav.addObject("categoryName",categoryName);mav.addObject("books",books);mav.addObject("categories",categories);return mav;}@RequestMapping("/goAskBookStore.do")public ModelAndView goAskBookStore(Page page){ModelAndView mav = new ModelAndView("askBookStore");int total = bookService.count();page.calculateEnd(total);if (page.getStart() < 0) {page.setStart(0);}else if (page.getStart() > total){page.setEnd(page.getEnd());}PageHelper.offsetPage(page.getStart(),16);List<Book> books = bookService.listByBookType(0);mav.addObject("books",books);return mav;}}

搜索控制器

package com.daniel.controller;import com.daniel.pojo.Book;
import com.daniel.service.BookService;
import com.daniel.util.MyIKAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.*;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@Controller
public class SearchController {@Autowiredprivate BookService bookService;@RequestMapping(value = "searchBook.do",method = RequestMethod.POST)public ModelAndView searchBook(Book book) throws IOException, ParseException {ModelAndView mav = new ModelAndView("searchBook");// 关键字String keyword = book.getName();System.out.println(keyword);// 准备中文分词器MyIKAnalyzer analyzer = new MyIKAnalyzer();// 索引Directory index = createIndex(analyzer);// 查询器Query query = new QueryParser("name",analyzer).parse(keyword);// 搜索IndexReader reader = DirectoryReader.open(index);IndexSearcher searcher = new IndexSearcher(reader);int numberPerPage = 10;ScoreDoc[] hits = searcher.search(query,numberPerPage).scoreDocs;List<Book> books = new ArrayList<>();for (int i = 0; i < hits.length; i++) {ScoreDoc scoreDoc = hits[i];int docId = scoreDoc.doc;Document document = searcher.doc(docId);Book tmpBook = bookService.get(Integer.parseInt(document.get("id")));books.add(tmpBook);}mav.addObject("books",books);return mav;}private Directory createIndex(MyIKAnalyzer analyzer) throws IOException {Directory index = new RAMDirectory();IndexWriterConfig config = new IndexWriterConfig(analyzer);IndexWriter writer = new IndexWriter(index,config);List<Book> books = bookService.listByBookType(1);for (Book book : books) {addDoc(writer,book);}writer.close();return index;}private void addDoc(IndexWriter writer,Book book) throws IOException {Document doc = new Document();doc.add(new TextField("id",book.getId()+"",Field.Store.YES));doc.add(new TextField("name",book.getName(),Field.Store.YES));writer.addDocument(doc);}}

用户控制器

package com.daniel.controller;import com.daniel.common.Result;
import com.daniel.common.ResultGenerator;
import com.daniel.pojo.User;
import com.daniel.service.UserService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;// 日志文件private static final Logger log = Logger.getLogger(UserController.class);@RequestMapping("")public ModelAndView login() {return new ModelAndView("login");}/*** 验证登录* @param user 用户输入的学号与密码封装成的User对象* @param request 登录成功时将user存入session当中* @return 登录成功后跳转至首页*/@RequestMapping(value = "/sessions",method = RequestMethod.POST)@ResponseBodypublic Result checkLogin(@RequestBody User user, HttpServletRequest request) {// userService验证是否登录成功boolean flag = userService.checkUser(user);log.info("request: user/login , user: " + user.toString());if (flag) {Map data = new HashMap();data.put("currentUser",user);// 登录成功,将登录信息放入sessionrequest.getSession().setAttribute("user",userService.getByStudentid(user.getStudentid()));return ResultGenerator.genSuccessResult(data);}else {return ResultGenerator.genFailResult("学号或密码输入错误!");}}/*** 登出操作* @param request 用于获取session中的User对象* @return 登出后跳转至登录界面*/@RequestMapping(value = "/sessions",method = RequestMethod.DELETE)public Result logout(HttpServletRequest request) {request.getSession().removeAttribute("user");return ResultGenerator.genSuccessResult();}
}

如果也想学习本系统,下面领取。回复:187ssm

Java项目:SSM在线二手图书交易商城网站平台相关推荐

  1. php交易商城项目源代码,PHP源码交易商城网站整站源码(商业运行版)

    [温馨提示]源码包解压密码:www.youhutong.com 描述说明: 注:请在Linux服务器中使用本程序,WINDOWS中无法使用. 后台地址:admincps 用户名:admins  密码: ...

  2. java毕业设计二手图书回收销售网站Mybatis+系统+数据库+调试部署

    java毕业设计二手图书回收销售网站Mybatis+系统+数据库+调试部署 java毕业设计二手图书回收销售网站Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  3. JAVA计算机毕业设计二手图书回收销售网站Mybatis+系统+数据库+调试部署

    JAVA计算机毕业设计二手图书回收销售网站Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计二手图书回收销售网站Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 ...

  4. (附源码)计算机毕业设计ssm二手图书回收销售网站

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  5. idea运行jsp显示源码_基于jsp+mysql+Spring+mybatis的SSM在线个人PC电脑商城平台网站系统...

    运行环境: 最好是java jdk 1.8,我们在这个平台上运行的.其他版本理论上也可以.IDE环境: Eclipse,Myeclipse,IDEA都可以tomcat环境: Tomcat 7.x,8. ...

  6. 基于java项目ssm二手书交易平台设计与实现(论文+程序设计源码+数据库文件)

    1 绪论 4 1.1 项目开发背景 4 1.2 项目开发意义 5 1.3 项目主要的内容 5 2 相关技术介绍及系统环境开发条件 6 2.1相关技术介绍 6 2.2系统环境开发条件 7 3 系统的需求 ...

  7. 二手图书交易网站-图书发布图书购买评价购物车-计算机毕业设计基于javaWebSSMspringboot框架idea开发工具asp.net和PHP

    本文讲述了一个二手图书交易网站的开发过程 本文首先介绍了二手网上购物系统的开发背景及意义,然后论述了系统的需求分析和系统设计方案,较详细的论述了系统的详细设计和实现,并对系统进行了测试.最后,本文对二 ...

  8. java毕业设计校园商城网站平台mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计校园商城网站平台mybatis+源码+调试部署+系统+数据库+lw java毕业设计校园商城网站平台mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S ...

  9. 计算机毕业设计Node.js+Vue二手图书回收销售网站(程序+源码+LW+部署)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue ...

最新文章

  1. 这项X射线技术让芯片无秘密可言:纳米级还原内部构造,现已破解16nm芯片
  2. Linux/UNIX网络编程之API
  3. tcp协议接收方对out of order的分段是如何处理的?_TCP协议与流通信
  4. 算法学习:最近公共祖先
  5. Listen第二个参数的意义
  6. 计算高斯混合模型的可分性和重叠度(Overlap Rate, OLR)
  7. github 上 thoes更新了 找不到bootstrap.sh_因为这个工具,我在 GitHub 搜索源码的时间缩短了 50%!...
  8. js获取下月时间_JS获取上月,本月,下月的开始时间与结束时间
  9. http 使用curl发起https请求 error 60 51
  10. 部署ganglia3.7
  11. html5制作人物动作,骨骼动画制作新利器:快速制作动作人物动画,省时简单!...
  12. Java输出竖排古典文字
  13. OpenCV-Python<八> 图像平滑处理
  14. php 图片 变灰色,php[图片变灰]生成灰色图片代码
  15. 引入高速缓存的目的_计算机中高速缓存的作用?
  16. ASP.NET Core 2.1 开发跨平台应用教程
  17. python+百度云orc识别身份证信息
  18. 傅里叶变换分析之掐死教程
  19. 【校内模拟】八云蓝(线段树)(大力分类讨论)
  20. 关于8杯酒只有一杯酒有毒,每个人是否中毒只能化验一次,至少需要几个人辨识。...

热门文章

  1. matlab转scilab语言,为什么从matlab转换到scilab时会出现“错误的输出参数数”错误?...
  2. JavaScript之参数传递
  3. 我想成为一名黑客,该如何开始?
  4. 计算机课用英语怎么说cute,it/cute是什么意思
  5. Android驱动模块调试方法
  6. daocloud mysql_使用 DaoCloud 部署 NODE
  7. daocloud mysql_GitHub - DaoCloud/php-laravel-mysql-sample
  8. 基于百度地图sdk的地图app开发(七)——导航和模拟导航
  9. 智能语音机器人智能在哪里?
  10. 康奈尔计算机硕士学费,美国康奈尔大学研究生学费多少?申请条件有哪些?