Java项目:在线小说阅读系统(读者+作者+管理员)(java+SSM+jsp+mysql+maven)
源码获取:博客首页 "资源" 里下载!
一、项目简述
功能包括: 1:用户及主要操作功能 游客可以浏览网站的主页,登陆注册,小说湿度,下单购 买,订单查询,个人信息查询,留言评论。 2:作者模块 作者登录注册,小说发表,小说维护等等。 3:作者模块 管理员登录,读者管理,小说管理,评论管理,充值订单 管理,订阅订单管理,折扣活动管理等等
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。
登录控制层:
/*** @author:yy*/
@Controller
public class LoginController {@Autowiredprivate AdminService adminService;@Autowiredprivate BookService bookService;@Autowiredprivate MessageService messageService;/*** 登陆页面* @return*/@RequestMapping("/loginPage")public String loginPage(){return "login";}@RequestMapping(value = "/novelPage",method = RequestMethod.GET)public String novelPage(Integer bookId, Model model){Book book = bookService.findById(bookId);List<Message> messageList = messageService.findByBookId(bookId);model.addAttribute("book",book);model.addAttribute("messageList",messageList);return "novel";}@RequestMapping(value = "/shiduPage",method = RequestMethod.GET)public String shiduPage(Integer bookId,Integer page,Model model){Book book = bookService.findById(bookId);Chapter chapter = book.getChapterList().get(page-1);int totalPage= book.getChapterList().size();List<Chapter> chapterList = new ArrayList<>();chapterList.add(chapter);book.setChapterList(chapterList);model.addAttribute("book",book);model.addAttribute("page",page);model.addAttribute("totalPage",totalPage);return "shidu";}/*** 登陆操作* @return*/@RequestMapping("/login")@ResponseBody// 该方法返回的是json字符串public ResultData login(Admin admin,HttpServletRequest request){// 登陆操作ResultData resultData = adminService.login(admin);// 判断登陆成功,将用户数据保存到 session中// 如何获取session对象?if(resultData.getCode() == 200){HttpSession session = request.getSession();session.setAttribute("admin",resultData.getData());}return resultData;}@RequestMapping("/rloginPage")public String rloginPage(){return "front/register";}/*** 退出登陆的方法* @return*/@RequestMapping("/logout")public String logout(HttpServletRequest request){// 只需要去将保存到session的数据干掉即可request.getSession().setAttribute("admin",null);// 重定向和转发的区别?// 重定向: 1. 客户端行为 2. 两次请求 3. 不能携带前一次请求的数据// 转发: 1. 服务器端行为 2. 一次请求 3. 能够携带前一次请求的数据return "redirect:/loginPage";}
}
历史控制层:
@Controller
public class HistoryController {@Autowiredprivate HistoryService historyService;//列表@RequestMapping("/history/list")public String list(Model model,@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "3") Integer pageSize) {PageInfo<History> pageInfo=historyService.list(page,pageSize);model.addAttribute("list",pageInfo.getList());model.addAttribute("pageInfo",pageInfo);return "history/history-list";}//添加@RequestMapping("/history/addPage")public String addPage(){return "history/history-add";}// 添加@RequestMapping("/history/add")@ResponseBodypublic ResultData add(History history){return historyService.add(history);}// search@RequestMapping("/history/search")public String searchList(Model model,@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "3") Integer pageSize,String keyword) {PageInfo<History> pageInfo=historyService.searchList(page,pageSize,keyword);model.addAttribute("list",pageInfo.getList());model.addAttribute("pageInfo",pageInfo);return "history/history-list";}// 批量删除@RequestMapping("/history/deleteAll")@ResponseBodypublic ResultData deleteAll(@RequestParam(name="ids") String ids){//将ids转为数组String[] idArr = ids.split(",");//将字符串数组转为int数组return historyService.batchDelete(idArr);}}
订单控制层:
@Controller
public class BookOrderController {@Autowiredprivate BookOrderService bookOrderService;@Autowiredprivate BookService bookService;@RequestMapping("/bookorder/bookorderlist")public String bookorderlist(Model model,@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "3") Integer pageSize) {PageInfo<BookOrder> pageInfo = bookOrderService.list(page, pageSize);//将数据转发到页面model.addAttribute("list", pageInfo.getList());model.addAttribute("pageInfo", pageInfo);return "bookorder/bookorder-list";}@RequestMapping("/bookorder/orderSearch")public String searchList(Model model,@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "3") Integer pageSize,String keyword) {PageInfo<BookOrder> pageInfo = bookOrderService.searchList(page,pageSize,keyword);//将数据转发到页面model.addAttribute("list", pageInfo.getList());model.addAttribute("pageInfo", pageInfo);return "bookorder/bookorder-list";}@RequestMapping("/bookorder/bookorderadd")public String bookorderadd() {return "bookorder/bookorder-add";}@RequestMapping(value = "/bookorder/add",method = RequestMethod.POST)@ResponseBodypublic ResultData add(BookOrder bookOrder, HttpSession session) {Reader reader = (Reader)session.getAttribute("reader");if(reader==null){return new ResultData(2001,"用户未登陆",null);}int readerId = reader.getReaderId();bookOrder.setUserId(1);bookOrder.setDiscountId(1);bookOrder.setOrderDate(new Timestamp(System.currentTimeMillis()));bookOrder.setOrderStatus(1);bookOrder.setPayStatus(1);ResultData resultData = bookOrderService.add(bookOrder);return resultData;}@RequestMapping("/bookorder/editStatus")@ResponseBodypublic ResultData editStatus(Integer id, Integer status) {return bookOrderService.updateStatus(id,status);}@RequestMapping("/bookorder/deleteAll")@ResponseBodypublic ResultData deleteAll(@RequestParam(name = "ids") String ids){// 将ids转换成数组String[] idArr = ids.split(",");return bookOrderService.batchDelete(idArr);}@RequestMapping("/bookorder/delete")@ResponseBodypublic ResultData delete(Integer orderid,Integer orderStatus){return bookOrderService.delete(orderid,orderStatus);}@RequestMapping("/bookOrder/toOrder")public String delete(Integer bookId,Model model){Book book = bookService.findById(bookId);model.addAttribute("book",book);return "front/order";}@RequestMapping("/bookOrder/toOrderCenter")public String toOrderCenter(HttpSession session,Model model){/*Reader reader = (Reader)session.getAttribute("reader");if(reader==null){return new ResultData(2001,"用户未登陆",null);}int readerId = reader.getReaderId();*/int readerId = 1;List<BookOrder> bookOrderList = bookOrderService.getAll(readerId);model.addAttribute("bookOrderList",bookOrderList);return "front/orderCenter";}}
读者控制层:
@Controller
public class ReaderController {@Autowiredprivate ReaderService readerService;@RequestMapping("/duzhe")public String duzhe(){return "loginreader";}@RequestMapping("/book/getByType?bookType=1")public String xiangqing(){return "front/personal";}/*** 登陆操作* @return*/@RequestMapping("/loginreader")@ResponseBodypublic ResultData login1(Reader reader,HttpServletRequest request){// 登陆操作ResultData resultData = readerService.login1(reader);// 判断登陆成功,将用户数据保存到 session中// 如何获取session对象?if(resultData.getCode() == 200){HttpSession session = request.getSession();session.setAttribute("reader",resultData.getData());}return resultData;}@RequestMapping("/loginOut")@ResponseBodypublic String loginOut(HttpServletRequest request){// 只需要去将保存到session的数据干掉即可request.getSession().setAttribute("reader",null);// 重定向和转发的区别?// 重定向: 1. 客户端行为 2. 两次请求 3. 不能携带前一次请求的数据// 转发: 1. 服务器端行为 2. 一次请求 3. 能够携带前一次请求的数据return "redirect:/loginPage";}// @RequestMapping("/login")
// @ResponseBody// 该方法返回的是json字符串
// public ResultData login(Admin admin,HttpServletRequest request){
// // 登陆操作
// ResultData resultData = adminService.login(admin);
// // 判断登陆成功,将用户数据保存到 session中
// // 如何获取session对象?
// if(resultData.getCode() == 200){
// HttpSession session = request.getSession();
// session.setAttribute("admin",resultData.getData());
// }
//
// return resultData;
// }
////读者列表@RequestMapping("/reader/list")public String list(Model model,@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "5") Integer pageSize){PageInfo<Reader> pageInfo = readerService.list(page,pageSize);model.addAttribute("list",pageInfo.getList());model.addAttribute("pageInfo",pageInfo);return "reader/reader-list";}//搜索读者显示列表@RequestMapping("/reader/search")public String searchList(Model model,@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "5") Integer pageSize,String keyword){PageInfo<Reader> pageInfo = readerService.searchList(page, pageSize, keyword);model.addAttribute("list",pageInfo.getList());model.addAttribute("pageInfo",pageInfo);return "reader/reader-list";}//读者删除列表@RequestMapping("/reader/deleteList")public String deleteList(Model model,@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "5") Integer pageSize){PageInfo<Reader> pageInfo = readerService.DeleteList(page,pageSize);model.addAttribute("list",pageInfo.getList());model.addAttribute("pageInfo",pageInfo);return "reader/reader-del";}//添加读者@RequestMapping("/reader/addPage")public String addPage(){return "front/register";}// 添加读者的方法@RequestMapping("/reader/add")@ResponseBodypublic ResultData add(Reader reader){return readerService.add(reader);}/*** 编辑读者状态信息* @param readerId : 当前读者Id* @param readerStatus: 读者当前状态* @return*/@RequestMapping("/reader/editStatus")@ResponseBodypublic ResultData editStatus(Integer readerId, Integer readerStatus){return readerService.updateStatus(readerId, readerStatus);}/*** 编辑读者* @param* @param* @return*/@RequestMapping("/reader/editPage")public String editPage(Model model, Integer readerId){Reader dbreadder = readerService.findById(readerId);model.addAttribute("reader",dbreadder);return "reader/reader-edit";}/*** 更新读者基本信息的方法* @param reader* @return*/@RequestMapping("/reader/edit")@ResponseBodypublic ResultData edit(Reader reader){return readerService.edit(reader);}/*** 批量删除* @param ids* @return*/@RequestMapping("/reader/deleteAll")@ResponseBodypublic ResultData deleteAll(@RequestParam(name = "ids") String ids){
// 将ids转换成数组String[] idArr=ids.split(",");return readerService.batchDelete(idArr);};/*** 批量恢复* @param ids* @return*/@RequestMapping("/reader/huifuAll")@ResponseBodypublic ResultData huifuDelete(@RequestParam(name = "ids") String ids){
// 将ids转换成数组String[] idArr=ids.split(",");return readerService.huifuDelete(idArr);};@RequestMapping("/reader/delete")@ResponseBodypublic ResultData deleteReader(Integer readerId, Integer readerStatus){return readerService.deletereader(readerId,readerStatus);}@RequestMapping("/reader/toCenter")public String toCenter(HttpSession session, Model model){
// Reader reader = (Reader)session.getAttribute("reader");
// if(reader==null){
// return "login";
// }Reader reader = readerService.findById(1 );model.addAttribute("reader",reader);return "front/center";}}
源码获取:博客首页 "资源" 里下载!
相关文章:

游戏中的脚本语言
本文最初发表于《游戏创造》(http://www.chinagcn.com)2007年8月刊。版权所有,侵权必究。如蒙转载,必须保留本声明,和作者署名;不得用于商业用途,必须保证全文完整。网络版首次发表于恋花蝶的博客(http://blog.csdn.ne…

mvn项目中的pom文件提示Error parsing lifecycle processing instructions解决
清空.m2/repository下的所有依赖文件,重新下载即可解决该问题。 如果本地用户下没有.m2/repository 目录,找到如下mvn 指定的repository,进去之后清空所有文件。 转载于:https://www.cnblogs.com/Hackerman/p/10736498.html

blktrace 工具集使用 及其实现原理
文章目录工具使用原理分析内核I/O栈blktrace 代码做的事情内核调用 ioctl 做的事情BLKTRACESETUPBLKTRACESTOPBLKTRACETEARDOWN内核 调用blk_register_tracepoints 之后做的事情参考最近使用blktrace 工具集来分析I/O 在磁盘上的一些瓶颈问题,特此做一个简单的记录。…

Java项目:教材管理系统(java+SSM+jsp+mysql+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能包括: 管理员可以增删改查教材、教材商、入库教材、用户(用 户包括学生和教师)可以对教材商、教材进行。xcel的导入 导出操作。教U阿以领取入库的教材,可以退还教材…

mysql更改数据文件目录及my.ini位置| MySQL命令详解
需求:更改mysql数据数据文件目录及my.ini位置。 步骤: 1、查找my.ini位置,可通过windows服务所对应mysql启动项,查看其对应属性->可执行文件路径,获取my.ini路径。 "D:\MySQL\MySQL Server 5.5\bin\mysqld&quo…

私有云管理-Windows Azure Pack
今天是2014年的第一天,今年的第一篇博客关于私有云,而我在2014年的主要目标也是针对私有云。随着Windows Azure在中国的落地,大家逐渐的熟悉了在Windows Azure中的云体验。而微软针对私有云、混合云推出了一个管理自助门户,Window…

面向对象(类的概念,属性,方法,属性的声明,面向对象编程思维
1 面向对象 1.1 你是如何认识新事物的? 从过往的事物中总结事物的特点(特征),并比对新事物,把新事物进行归类。 1.2 类(Class)的概念(A) 类是对一组具有相同特征和行为的对象的抽象描述。 理解: [1] 类包含了两个要素:特性和行为 > 同一类…

cannot find main module 解决办法
做6.824 实验的过程中想要跑测试,发现go test -run 2A时 出现cannot find main module问题,测试跑不起来。 原因 这个原因是从GO1.11 版本开始引入了go.mod文件来对项目中的go源码的编译相关的内容进行管理,经常使用GO的同学可能深受go get…

Java项目:网上选课系统(java+SSM+jsp+mysql+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能: 系统分为三个角色。最高权限管理员,学生,教师,包括 学生管理,教师管理,课程管理,选课,退课…

C#中类的继承 override virtual new的作用以及代码分析
继承中override virtual new的作用 virtual 父类中需要注明允许重写的方法; override 子类中必须显示声明该方法是重写的父类中的方法; new 子类中忽略父类的已存在的方法,“重写该方法“; C#中不支…

spring手动代码控制事务
为什么80%的码农都做不了架构师?>>> DataSourceTransactionManager tran new DataSourceTransactionManager(vjdbcTemplate.getDataSource());DefaultTransactionDefinition def new DefaultTransactionDefinition();//事务定义类def.setPropagationB…

tar命令-压缩,解压缩文件
tar: -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 上面五个参数是独立的,压缩解压都要用到其中一个,可以和下面的命令连用但只能用其中一个。…

MIT 6.824 Lab2A (raft) -- Leader Election
文章目录实验要求Leader Election流程 及详细实现介绍基本角色关键超时变量关键的两个RPC实现RequestVote RPCAppendEntries RPCGo并发编程实现leader election调度本节记录的是完成MIT6.824 raft lab的leader Election部分实验。代码: https://github.com/BaronStack/MIT-6.82…

Java项目:在线考试系统(java+springboot+vue+jsp+mysql+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统主要实现的功能有: 学生以及老师的注册登录,在线考试,错题查询,学生管理,问题管理,错题管理,错题查询…

写给自己的web开发资源
web开发给我的感觉就是乱七八糟,而且要学习感觉总是会有东西要学习,很乱很杂我也没空搞,(其实学习这个的方法就是去用它,什么你直接用?学过js么学过jquery么?哈哈,我没有系统的看完过…

虚拟机VMWare“提示:软件虚拟化与此平台上的长模式不兼容”的解决方法
虚拟机VMWare“提示:软件虚拟化与此平台上的长模式不兼容”不少童鞋反映,在使用Windows7 64位操作系统时,无法运行VMWare或MS Virtual server等软件虚拟操作系统。提示为“提示:软件虚拟化与此平台上的长模式不兼容. 禁用长模式. …

如何在Vue项目中使用vw实现移动端适配(转)
有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种。在《使用Flexible实现手淘H5页面的终端适配》提出了Flexible的布局方案,随着viewport单位越来越受到众多浏览器的支持,因此在《再聊移动端页面的适配》一文中提出了…

Jsoncpp 在C++开发中的一些使用记录
jsoncpp 是一个C 语言实现的json库,非常方便得支持C得各种数据类型到json 以及 json到各种数据类型的转化。 一个json 类型的数据如下: {"code" : 10.01,"files" : "","msg" : "","uploadid&q…

Java项目:图书管理系统(java+SSM+jsp+mysql+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能包括(管理员和学生角色): 管理员和学生登录,图书管理,图书添加删除修改,图书 借阅,图书归还,图书查看,学…

使用 Flash Builder 的 Apple iOS 开发过程
使用 Flash Builder 的 Apple iOS 开发过程 iOS 开发和部署过程概述 构建、调试或部署 iOS 应用程序前的准备工作 在测试、调试或安装 iOS 应用程序时选择的文件 将应用程序部署到 Apple App Store 时选择的文件 在使用 Flash Builder 开发 iOS 应用程序之前,必须…

grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
2019独角兽企业重金招聘Python工程师标准>>> 1. 简单介绍 在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前被认为最高效的字符串搜索算法,它由Bob Boyer和J Strother Moore设计于1977年。 一般情况下…

多线程threading
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。python当前版本的多线程库没有实现优先级、线程组,线程也不能被停止、暂停、恢复、中断。 1. threading模块提供的类: Thread, Lock, Rlock, Condition, [Bounded]Sem…

一个简单的程序来使用WiredTiger 存储引擎
前言 WiredTiger 自 mongodb3.0 集成进来之后为mongodb拉回了大量的口碑,从而在mongodb-3.2 版本直接代替了in-memory存储引擎,作为了mongodb的默认存储引擎。其 通过支持Append-only btree lsm-tree 以及 针对磁盘/内存数据结构上的多核和无锁优化&am…

Java项目:网上商城系统(java+SSM+jsp+mysql+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述功能 javaweb 网上商城系统,前台+后台管理,用户注册,登录,上哦展示,分组展示,搜索,收货地址管理&…

Linux 启动详解之init
1.init初探 init是Linux系统操作中不可缺少的程序之一。init进程,它是一个由内核启动的用户级进程,然后由它来启动后面的任务,包括多用户环境,网络等。 内核会在过去曾使用过init的几个地方查找它,它的正确位置&#x…

mysql 相关命令
mysqladmin versionmysqladmin statusmysqlshow -u帐号 -p密码 mysqlshow -u帐号 -p密码 库名mysql -u帐号 -p密码 -e SELECT Host,Db,User From db mysqlmysqldump --quick mysql | gzip > /root/mysql.gzmysqladmin create dbtestgunzip < /root/mysql.gz | mysql…

maven 添加数据库驱动
1.电脑上需要安装 apache maven2.下载oracle的jar包 例如我下载的是ojdbc7-12.jar3.cmd执行命令 mvn install:install-file -DgroupIdcom.oracle -DartifactIdojdbc7 -Dversion12 -Dpackagingjar -Dfiled:\jar\ojdbc7-12.jar-Dfile jar包所存放的位置4.pom文件添加࿱…

Rocksdb 的 BlobDB key-value 分离存储插件
前言 还是回到传统的 LSM-tree 中,我们key-value 写入时以append形态存放到一个data-block中,多个data-blockmetablock 之类的数据组织成一个sst。当我们读数据以及compaction的时候读到key 之后则很方便得读取到对应的value,一次I/O能够将k…

Java项目:(前端vue后台java微服务)在线考试系统(java+vue+springboot+mysql+maven)
源码获取:博客首页 "资源" 里下载! 考试流程: 用户前台注册成为学生 管理员后台添加老师,系统将该用户角色上升为老师 老师登录,添加考试,添加题目,发布考试 考生登录前台参加考试,…

C++实现stack【栈】
要求: //****file: stack.h/*对stack进行初始化检查stack为空,或已满将整数压入到stack中从stack里弹出整数 不移除任何袁术,讲过stack的内容输出到标准输出Stack类的私有成员如下:一个用于打印错误信息的私有哦成员函数三个私有数…