Java项目:二手图书商城平台(java+SSM+JSP+JS+jquery+Mysql)

2023-10-31

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

项目介绍

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

 

 

 

 

 

图书管理控制层: 

@Controller
public class BookController {
    @Autowired
    private BookService bookService;
    @Autowired
    private LendService lendService;

    private Date getDate(String pubstr) {
        try {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            return df.parse(pubstr);
        } catch (ParseException e) {
            e.printStackTrace();
            return new Date();
        }
    }

    @RequestMapping("/queryBook.html")
    public ModelAndView queryBookDo(String searchWord) {
        if (bookService.matchBook(searchWord)) {
            ArrayList<Book> books = bookService.queryBook(searchWord);
            ModelAndView modelAndView = new ModelAndView("admin_books");
            modelAndView.addObject("books", books);
            return modelAndView;
        } else {
            return new ModelAndView("admin_books", "error", "没有匹配的图书");
        }
    }

    @RequestMapping("/reader_querybook_do.html")
    public ModelAndView readerQueryBookDo(String searchWord) {
        if (bookService.matchBook(searchWord)) {
            ArrayList<Book> books = bookService.queryBook(searchWord);
            ModelAndView modelAndView = new ModelAndView("reader_books");
            modelAndView.addObject("books", books);
            return modelAndView;
        } else {
            return new ModelAndView("reader_books", "error", "没有匹配的图书");
        }
    }

    @RequestMapping("/admin_books.html")
    public ModelAndView adminBooks() {
        ArrayList<Book> books = bookService.getAllBooks();
        ModelAndView modelAndView = new ModelAndView("admin_books");
        modelAndView.addObject("books", books);
        return modelAndView;
    }

    @RequestMapping("/book_add.html")
    public ModelAndView addBook() {
        return new ModelAndView("admin_book_add");
    }

    @RequestMapping("/book_add_do.html")
    public String addBookDo(@RequestParam(value = "pubstr") String pubstr, Book book, RedirectAttributes redirectAttributes) {
        book.setPubdate(getDate(pubstr));
        if (bookService.addBook(book)) {
            redirectAttributes.addFlashAttribute("succ", "图书添加成功!");
        } else {
            redirectAttributes.addFlashAttribute("succ", "图书添加失败!");
        }
        return "redirect:/admin_books.html";
    }

    @RequestMapping("/updatebook.html")
    public ModelAndView bookEdit(HttpServletRequest request) {
        long bookId = Long.parseLong(request.getParameter("bookId"));
        Book book = bookService.getBook(bookId);
        ModelAndView modelAndView = new ModelAndView("admin_book_edit");
        modelAndView.addObject("detail", book);
        return modelAndView;
    }

    @RequestMapping("/book_edit_do.html")
    public String bookEditDo(@RequestParam(value = "pubstr") String pubstr, Book book, RedirectAttributes redirectAttributes) {
        book.setPubdate(getDate(pubstr));
        if (bookService.editBook(book)) {
            redirectAttributes.addFlashAttribute("succ", "图书修改成功!");
        } else {
            redirectAttributes.addFlashAttribute("error", "图书修改失败!");
        }
        return "redirect:/admin_books.html";
    }

    @RequestMapping("/admin_book_detail.html")
    public ModelAndView adminBookDetail(HttpServletRequest request) {
        long bookId = Long.parseLong(request.getParameter("bookId"));
        Book book = bookService.getBook(bookId);
        ModelAndView modelAndView = new ModelAndView("admin_book_detail");
        modelAndView.addObject("detail", book);
        return modelAndView;
    }

    @RequestMapping("/reader_book_detail.html")
    public ModelAndView readerBookDetail(HttpServletRequest request) {
        long bookId = Long.parseLong(request.getParameter("bookId"));
        Book book = bookService.getBook(bookId);
        ModelAndView modelAndView = new ModelAndView("reader_book_detail");
        modelAndView.addObject("detail", book);
        return modelAndView;
    }

    @RequestMapping("/admin_header.html")
    public ModelAndView admin_header() {
        return new ModelAndView("admin_header");
    }

    @RequestMapping("/reader_header.html")
    public ModelAndView reader_header() {
        return new ModelAndView("reader_header");
    }

    @RequestMapping("/reader_books.html")
    public ModelAndView readerBooks(HttpServletRequest request) {
        ArrayList<Book> books = bookService.getAllBooks();
        ReaderCard readerCard = (ReaderCard) request.getSession().getAttribute("readercard");
        ArrayList<Lend> myAllLendList = lendService.myLendList(readerCard.getReaderId());
        ArrayList<Long> myLendList = new ArrayList<>();
        for (Lend lend : myAllLendList) {
            // 是否已归还
            if (lend.getBackDate() == null) {
                myLendList.add(lend.getBookId());
            }
        }
        ModelAndView modelAndView = new ModelAndView("reader_books");
        modelAndView.addObject("books", books);
        modelAndView.addObject("myLendList", myLendList);
        return modelAndView;
    }
}

登录管理控制层:

@Controller
public class LoginController {

    private LoginService loginService;


    @Autowired
    public void setLoginService(LoginService loginService) {
        this.loginService = loginService;
    }


    @RequestMapping(value = {"/", "/login.html"})
    public String toLogin(HttpServletRequest request) {
        request.getSession().invalidate();
        return "index";
    }

    @RequestMapping("/logout.html")
    public String logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return "redirect:/login.html";
    }


    @RequestMapping("/admin_main.html")
    public ModelAndView toAdminMain(HttpServletResponse response) {
        return new ModelAndView("admin_main");
    }

    @RequestMapping("/reader_main.html")
    public ModelAndView toReaderMain(HttpServletResponse response) {
        return new ModelAndView("reader_main");
    }

    @RequestMapping("/admin_repasswd.html")
    public ModelAndView reAdminPasswd() {
        return new ModelAndView("admin_repasswd");
    }

    @RequestMapping("/admin_repasswd_do")
    public String reAdminPasswdDo(HttpServletRequest request, String oldPasswd, String newPasswd, String reNewPasswd, RedirectAttributes redirectAttributes) {
        Admin admin = (Admin) request.getSession().getAttribute("admin");
        long id = admin.getAdminId();
        String password = loginService.getAdminPassword(id);
        if (password.equals(oldPasswd)) {
            if (loginService.adminRePassword(id, newPasswd)) {
                redirectAttributes.addFlashAttribute("succ", "密码修改成功!");
                return "redirect:/admin_repasswd.html";
            } else {
                redirectAttributes.addFlashAttribute("error", "密码修改失败!");
                return "redirect:/admin_repasswd.html";
            }
        } else {
            redirectAttributes.addFlashAttribute("error", "旧密码错误!");
            return "redirect:/admin_repasswd.html";
        }
    }

    @RequestMapping("/reader_repasswd.html")
    public ModelAndView reReaderPasswd() {
        return new ModelAndView("reader_repasswd");
    }

    @RequestMapping("/reader_repasswd_do")
    public String reReaderPasswdDo(HttpServletRequest request, String oldPasswd, String newPasswd, String reNewPasswd, RedirectAttributes redirectAttributes) {
        ReaderCard reader = (ReaderCard) request.getSession().getAttribute("readercard");
        long id = reader.getReaderId();
        String password = loginService.getReaderPassword(id);
        if (password.equals(oldPasswd)) {
            if (loginService.readerRePassword(id, newPasswd)) {
                redirectAttributes.addFlashAttribute("succ", "密码修改成功!");
                return "redirect:/reader_repasswd.html";
            } else {
                redirectAttributes.addFlashAttribute("error", "密码修改失败!");
                return "redirect:/reader_repasswd.html";
            }
        } else {
            redirectAttributes.addFlashAttribute("error", "旧密码错误!");
            return "redirect:/reader_repasswd.html";
        }
    }

    //配置404页面
    @RequestMapping("*")
    public String notFind() {
        return "404";
    }

}

配置管理控制层: 

@Configuration
@EnableWebMvc
@ComponentScan("com.library.controller")
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setSuffix(".jsp");
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/img/**")
                .addResourceLocations("/static/img/");
        registry.addResourceHandler("/js/**").addResourceLocations("/static/js/");
        registry.addResourceHandler("/css/**").addResourceLocations("/static/css/");
    }
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java项目:二手图书商城平台(java+SSM+JSP+JS+jquery+Mysql) 的相关文章

  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 如何以编程方式处理 JqGrid 事件?

    我正在使用JqG rid 的 ASP NET 包装器 http www trirand net demoaspnet aspx 我想以编程方式连接一些网格的处理程序events http www trirand com jqgridwiki
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • jquery.validate 中是否有一个函数可以像重置表单一样重置单个字段?

    我想调用 jquery 函数来手动删除单个字段中的错误并重置错误标记 是否有一个函数可以执行此操作 类似于 resetForm 函数 您可以执行以下操作来验证单个字段 your field valid 也许它会对某人有所帮助 Thanks
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 如何使用 JQuery 动态排序

    如果我有一个下拉列表和一个列表框 有没有办法使用 JQuery 根据下拉列表对列表框进行排序 举个例子会很有帮助 这会改变下拉菜单中的顺序 您必须根据自己的标准设置顺序
  • 如何判断 jquery 对话框是否打开? [复制]

    这个问题在这里已经有答案了 寻找通用案例解决方案来确定当前是否打开任何 jquery 对话框 有多个 试过 ui dialog content dialog isOpen true ui dialog dialog isOpen true
  • 我可以使用 jQuery 打开下拉列表吗

    对于 HTML 中的下拉列表
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 在 ASP.NET Core MVC 中访问从视图到控制器的隐藏值

    我需要帮助使用 jQuery 从 ASP NET Core razor 视图页面传递隐藏控件值 jQuery 用于获取动态控件选定的值 section scripts
  • jQuery 对象相等

    如何确定两个 jQuery 对象是否相等 我希望能够在数组中搜索特定的 jQuery 对象 inArray jqobj my array 1 alert deviceTypeRoot deviceTypeRoot False alert d
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • 酒令

    劝酒者起身敬酒 被劝者会说 屁股一抬 喝了重来 意让劝酒者再喝一个 此时劝酒者应对 屁股一动 表示尊重 男人不喝酒 交不到好朋友 感情深一口闷 感情浅舔一舔 女士劝酒 激动的心 颤抖的手 我给领导到杯酒 领导不喝嫌我丑 女士和领导碰杯 领导
  • 鼠标一离开导航菜单,二级菜单就隐藏,移不到二级菜单

    项目场景 提示 这里简述项目相关背景 例如 项目场景 示例 网站右侧导航 无法移入二级菜单 鼠标移出一级菜单 二级内容立刻消失 从而鼠标无法移入二级内容区域 类似CSDN官网右侧 鼠标hover到二维码图标后 显示左侧关注公众号和下载APP
  • C语言中几种输入方式

    当我们输入一串字符或者数字时 需要一种标志作为输入结束的标志 所以我总结了以下几种 1 输入一串字符串以回车键作为输入结束的标志 char ch while ch getchar n 例1 输入一行字符 分别统计出其中英文字母 空格 数字
  • 感应(异步)电机磁场定向控制速度环PI控制参数设计

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制电流环PI控制参数设计 目录 电机控制系列文章 前言 一 速度环开环传递函数 二 速度环开环传递函数零极点配置 三 速度环闭环性能
  • 【Twinkle】简历小问题

    在制作简历的时候 很多人都把心思放在如何撑满一张纸 当然 这确实很重要 但是在重内容的同时 我们容易忽略一些小问题 而这些小问题在HR的眼中其实是基本功的体现 更甚 这些小问题反倒是最扎眼的 比如字体 字号 行间距等 这些都是超脱于内容之外
  • [1199]npm常用命令

    文章目录 npm常用的安装命令 npm镜像源如何设置 npm将软件包安装到哪里 npx命令 npm文档 https docs npmjs com cli install npm常用的安装命令 npm i 就是npm install 简写 n
  • STL迭代器失效的场景总结

    一 序列式容器迭代器失效的场景 序列式容器以vector为例 分别有以下情况会失效 1 push back 使迭代器失效 在容器末尾添加一个元素 如果容器有剩余空间 capacity gt size 则直接添加新元素到容器尾部 此时 原迭代
  • 【产品经理实战项目系列教程】笔记004:产品经理应该具备的能力及如何学习;

    一 产品经理应该具备的能力 1 产品设计的能力 设计功能 业务 app 网站 小程序 后台等等 2 文档撰写 3 逻辑思维能力 需要在实战项目中不断的锻炼 激发自己的思考能力 4 业务梳理能力 难点在于梳理清楚业务与业务之间的闭环 5 沟通
  • flashFXP乱码解决

    菜单 命令 原始命令 输入 opts utf8 off 回车 或点确定 再刷新服务端的目录列表 即正常显示
  • 记一次Oracle RAC一节点重启后出现故障的处理

    因为存储的相关操作 客户需要手动重启rac节点 然而 这个重启导致了接下来的事故 由于是远程跟我沟通 我回复rac环境下可以重启一个节点 客户就自信重启了 出现的故障如下所示 grid hxdb01 srvctl start nodeapp
  • 使用VUE3.0版本搭建H5模板

    使用VUE3 0版本搭建H5模板 仓库地址 有需要的可以参考参考 https gitee com young frivolous vue3 app template tree master 为了方便每次写项目都要去搭建一个框架 今天使用vu
  • vue 实现鼠标移入移出表格,显示影藏图标, 并弹出提示内容

    效果 1 Table代码
  • NLP task2 _ 自然语言处理中N-Gram模型的Smoothing算法

    使用N Gram模型时的数据平滑算法 背景 为什么要做平滑处理 零概率问题 就是在计算实例的概率时 如果某个量x 在观察样本库 训练集 中没有出现过 会导致整个实例的概率结果是0 在文本分类的问题中 当一个词语没有在训练样本中出现 该词语调
  • 出圈

    题目描述 设有n个人围坐一圈并按顺时针方向从1到n编号 从第1个人开始进行1到m的报数 报数到第个m人 此人出圈 再从他的下一个人重新开始1到m的报数 如此进行下去直到所剩下一人为止 输入 输入多行 每行2个数 分别表示n和m 输出 计算每
  • AntDesign技术指南:构建优雅的前端界面

    引言 AntDesign是一款优秀的前端UI组件库 它提供了丰富的组件和功能 帮助我们快速构建漂亮 易用的前端界面 本篇博客将详细介绍AntDesign的使用方法和技巧 并展示完整的代码示例 无论你是初学者还是有经验的开发者 本篇博客都将为
  • ISAKMP报文解密

    使用wireshark抓包 No Time Source Destination Protocol Length Info 3 1 735352000 192 168 1 102 192 168 1 101 ISAKMP 878 IKE S
  • react中使用useEffect模拟componentDidUpdata(使 useEffect 在渲染时不执行,只在数据变更时执行)

    背景介绍 在列表搜索条件变化时 需要保存搜索条件 但是保存搜索条件这个方法不需要在组件挂载时执行 即如何使 useEffect 在渲染时不执行 只在数据变更时执行 即模拟类组件的componentDidUpdata 问题描述 如果是使用监听
  • Spring_Accepting request input

    Spring MVC provides several ways that a client can pass data into a controller s handler method These include 1 Query pa
  • Python模块和包

    目录 模块 1 1 导 模块 1 1 1 导 模块的 式 1 1 2 导 式详解 1 2 制作模块 1 2 1 定义模块 1 2 2 测试模块 1 2 3 调 模块 1 2 4 注意事项 1 3 模块定位顺序 1 4 all 包 2 1 制
  • Java项目:二手图书商城平台(java+SSM+JSP+JS+jquery+Mysql)

    源码获取 俺的博客首页 资源 里下载 项目介绍 用户角色包含以下功能 用户登录 查看商品详情 按分类查看 查看我的书架 上传二手书等功能 PS 这个没有管理员角色 环境需要 1 运行环境 最好是java jdk 1 8 我们在这个平台上运行