Java项目:清新论坛系统(java+SSM+mysql+maven+tomcat)
源码获取:博客首页 "资源" 里下载!
一、项目简述
功能:本系统分用户前台和管理员后台。 用户前台主要功能有: 用户注册 用户登录 浏览帖子 回复帖子 修改个人资料 管理员后台的功能有: 管理论坛版块 用户管理 回复管理;
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。
处理管理员界面请求:
/*** 处理管理员界面请求**/
@Controller
@RequestMapping("/admin")
public class AdminController {@Resourceprivate AdminUserService adminUserService;@Resourceprivate BlogService blogService;@Resourceprivate CategoryService categoryService;@Resourceprivate TagService tagService;@Resourceprivate CommentService commentService;/*** 处理登录请求** @return java.lang.String*/@GetMapping({"/login"})public String login() {return "admin/login";}/*** 主页** @param request http请求* @return java.lang.String*/@GetMapping({"", "/", "/index", "/index.html"})public String index(HttpServletRequest request) {request.setAttribute("path", "index");request.setAttribute("categoryCount", categoryService.getTotalCategories());request.setAttribute("blogCount", blogService.getTotalBlogs());request.setAttribute("tagCount", tagService.getTotalTags());request.setAttribute("commentCount", commentService.getTotalComments());return "admin/index";}/*** 登录界面** @param userName 用户名* @param password 密码* @param verifyCode 验证码* @param session session* @return java.lang.String*/@PostMapping(value = "/login")public String login(@RequestParam("userName") String userName,@RequestParam("password") String password,@RequestParam("verifyCode") String verifyCode,HttpSession session) {if (StringUtils.isEmpty(verifyCode)) {session.setAttribute("errorMsg", "验证码不能为空");return "admin/login";}if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(password)) {session.setAttribute("errorMsg", "用户名或密码不能为空");return "admin/login";}String kaptchaCode = session.getAttribute("verifyCode") + "";if (StringUtils.isEmpty(kaptchaCode) || !verifyCode.equals(kaptchaCode)) {session.setAttribute("errorMsg", "验证码错误");return "admin/login";}AdminUser adminUser = adminUserService.login(userName, password);if (adminUser != null) {session.setAttribute("loginUser", adminUser.getNickName());session.setAttribute("loginUserId", adminUser.getAdminUserId());//session过期时间设置为7200秒 即两小时//session.setMaxInactiveInterval(60 * 60 * 2);return "redirect:/admin/index";} else {session.setAttribute("errorMsg", "登陆失败");return "admin/login";}}/*** 修改个人信息** @param request http请求* @return java.lang.String*/@GetMapping("/profile")public String profile(HttpServletRequest request) {Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");AdminUser adminUser = adminUserService.getUserDetailById(loginUserId);if (adminUser == null) {return "admin/login";}request.setAttribute("path", "profile");request.setAttribute("loginUserName", adminUser.getLoginUserName());request.setAttribute("nickName", adminUser.getNickName());return "admin/profile";}/*** 修改密码** @param request http请求* @param originalPassword 原始密码* @param newPassword 新密码* @return java.lang.String*/@PostMapping("/profile/password")@ResponseBodypublic String passwordUpdate(HttpServletRequest request, @RequestParam("originalPassword") String originalPassword,@RequestParam("newPassword") String newPassword) {if (StringUtils.isEmpty(originalPassword) || StringUtils.isEmpty(newPassword)) {return "参数不能为空";}Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");if (adminUserService.updatePassword(loginUserId, originalPassword, newPassword)) {//修改成功后清空session中的数据,前端控制跳转至登录页request.getSession().removeAttribute("loginUserId");request.getSession().removeAttribute("loginUser");request.getSession().removeAttribute("errorMsg");return "success";} else {return "修改失败";}}/*** 修改登录名,昵称** @param request http请求* @param loginUserName 登录名* @param nickName 昵称* @return java.lang.String*/@PostMapping("/profile/name")@ResponseBodypublic String nameUpdate(HttpServletRequest request, @RequestParam("loginUserName") String loginUserName,@RequestParam("nickName") String nickName) {if (StringUtils.isEmpty(loginUserName) || StringUtils.isEmpty(nickName)) {return "参数不能为空";}Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");if (adminUserService.updateName(loginUserId, loginUserName, nickName)) {return "success";} else {return "修改失败";}}/*** 管理员退出** @param request http请求* @return java.lang.String*/@GetMapping("/logout")public String logout(HttpServletRequest request) {request.getSession().removeAttribute("loginUserId");request.getSession().removeAttribute("loginUser");request.getSession().removeAttribute("errorMsg");return "admin/login";}
}
管理员控制层:
/*** 管理员控制层*/
@Controller
@RequestMapping("/admin")
public class CategoryController {@Resourceprivate CategoryService categoryService;/*** @param request* @return java.lang.String*/@GetMapping("/categories")public String categoryPage(HttpServletRequest request) {request.setAttribute("path", "categories");return "admin/category";}/*** @param params* @return com.hbu.myblog.util.Result*/@RequestMapping(value = "/categories/list", method = RequestMethod.GET)@ResponseBodypublic Result list(@RequestParam Map<String, Object> params) {if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {return ResultGenerator.genFailResult("参数异常!");}PageQueryUtil pageUtil = new PageQueryUtil(params);return ResultGenerator.genSuccessResult(categoryService.getBlogCategoryPage(pageUtil));}/*** @param categoryName* @param categoryIcon* @return com.hbu.myblog.util.Result*/@RequestMapping(value = "/categories/save", method = RequestMethod.POST)@ResponseBodypublic Result save(@RequestParam("categoryName") String categoryName,@RequestParam("categoryIcon") String categoryIcon) {if (StringUtils.isEmpty(categoryName)) {return ResultGenerator.genFailResult("请输入分类名称!");}if (StringUtils.isEmpty(categoryIcon)) {return ResultGenerator.genFailResult("请选择分类图标!");}if (categoryService.saveCategory(categoryName, categoryIcon)) {return ResultGenerator.genSuccessResult();} else {return ResultGenerator.genFailResult("分类名称重复");}}/*** @param categoryId* @param categoryName* @param categoryIcon* @return com.hbu.myblog.util.Result*/@RequestMapping(value = "/categories/update", method = RequestMethod.POST)@ResponseBodypublic Result update(@RequestParam("categoryId") Integer categoryId,@RequestParam("categoryName") String categoryName,@RequestParam("categoryIcon") String categoryIcon) {if (StringUtils.isEmpty(categoryName)) {return ResultGenerator.genFailResult("请输入分类名称!");}if (StringUtils.isEmpty(categoryIcon)) {return ResultGenerator.genFailResult("请选择分类图标!");}if (categoryService.updateCategory(categoryId, categoryName, categoryIcon)) {return ResultGenerator.genSuccessResult();} else {return ResultGenerator.genFailResult("分类名称重复");}}/*** @param ids* @return com.hbu.myblog.util.Result*/@RequestMapping(value = "/categories/delete", method = RequestMethod.POST)@ResponseBodypublic Result delete(@RequestBody Integer[] ids) {if (ids.length < 1) {return ResultGenerator.genFailResult("参数异常!");}if (categoryService.deleteBatch(ids)) {return ResultGenerator.genSuccessResult();} else {return ResultGenerator.genFailResult("删除失败");}}}
博客内容控制层:
/*** @author 博客*/
@Controller
@RequestMapping("/admin")
public class BlogController {@Resourceprivate BlogService blogService;@Resourceprivate CategoryService categoryService;/*** 博客列表** @param params 参数* @return com.hbu.myblog.util.Result*/@GetMapping("/blogs/list")@ResponseBodypublic Result list(@RequestParam Map<String, Object> params) {if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {return ResultGenerator.genFailResult("参数异常!");}PageQueryUtil pageUtil = new PageQueryUtil(params);return ResultGenerator.genSuccessResult(blogService.getBlogsPage(pageUtil));}/*** @param request http请求* @return java.lang.String*/@GetMapping("/blogs")public String list(HttpServletRequest request) {request.setAttribute("path", "blogs");return "admin/blog";}/*** @param request http请求* @return java.lang.String*/@GetMapping("/blogs/edit")public String edit(HttpServletRequest request) {request.setAttribute("path", "edit");request.setAttribute("categories", categoryService.getAllCategories());return "admin/edit";}/*** @param request http请求* @param blogId 博客id* @return java.lang.String*/@GetMapping("/blogs/edit/{blogId}")public String edit(HttpServletRequest request, @PathVariable("blogId") Long blogId) {request.setAttribute("path", "edit");Blog blog = blogService.getBlogById(blogId);if (blog == null) {return "error/error_400";}request.setAttribute("blog", blog);request.setAttribute("categories", categoryService.getAllCategories());return "admin/edit";}/*** 添加文章** @param blogTitle 文章标题* @param blogSummary 摘要* @param blogCategoryId 类别* @param blogTags 标签* @param blogContent 内容* @param blogStatus 草稿,发布* @param enableComment 可否评论* @return com.hbu.myblog.util.Result*/@PostMapping("/blogs/save")@ResponseBodypublic Result save(@RequestParam("blogTitle") String blogTitle,@RequestParam(name = "blogSummary", required = false) String blogSummary,@RequestParam("blogCategoryId") Integer blogCategoryId,@RequestParam("blogTags") String blogTags,@RequestParam("blogContent") String blogContent,@RequestParam("blogStatus") Byte blogStatus,@RequestParam("enableComment") Byte enableComment) {if (StringUtils.isEmpty(blogTitle)) {return ResultGenerator.genFailResult("请输入文章标题");}if (blogTitle.trim().length() > 150) {return ResultGenerator.genFailResult("标题过长");}if (StringUtils.isEmpty(blogTags)) {return ResultGenerator.genFailResult("请输入文章标签");}if (blogTags.trim().length() > 150) {return ResultGenerator.genFailResult("标签过长");}if (blogSummary.trim().length() > 375) {return ResultGenerator.genFailResult("摘要过长");}if (StringUtils.isEmpty(blogContent)) {return ResultGenerator.genFailResult("请输入文章内容");}if (blogTags.trim().length() > 100000) {return ResultGenerator.genFailResult("文章内容过长");}Blog blog = new Blog();blog.setBlogTitle(blogTitle);blog.setBlogSummary(blogSummary);blog.setBlogCategoryId(blogCategoryId);blog.setBlogTags(blogTags);blog.setBlogContent(blogContent);blog.setBlogStatus(blogStatus);blog.setEnableComment(enableComment);String saveBlogResult = blogService.saveBlog(blog);if ("success".equals(saveBlogResult)) {return ResultGenerator.genSuccessResult("添加成功");} else {return ResultGenerator.genFailResult(saveBlogResult);}}/*** 修改文章** @param blogId 文章ID* @param blogTitle 文章标题* @param blogSummary 摘要* @param blogCategoryId 类别* @param blogTags 标签* @param blogContent 内容* @param blogStatus 草稿,发布* @param enableComment 可否评论* @return com.hbu.myblog.util.Result*/@PostMapping("/blogs/update")@ResponseBodypublic Result update(@RequestParam("blogId") Long blogId,@RequestParam("blogTitle") String blogTitle,@RequestParam(name = "blogSummary", required = false) String blogSummary,@RequestParam("blogCategoryId") Integer blogCategoryId,@RequestParam("blogTags") String blogTags,@RequestParam("blogContent") String blogContent,@RequestParam("blogStatus") Byte blogStatus,@RequestParam("enableComment") Byte enableComment) {if (StringUtils.isEmpty(blogTitle)) {return ResultGenerator.genFailResult("请输入文章标题");}if (blogTitle.trim().length() > 150) {return ResultGenerator.genFailResult("标题过长");}if (StringUtils.isEmpty(blogTags)) {return ResultGenerator.genFailResult("请输入文章标签");}if (blogTags.trim().length() > 150) {return ResultGenerator.genFailResult("标签过长");}if (blogSummary.trim().length() > 375) {return ResultGenerator.genFailResult("摘要过长");}if (StringUtils.isEmpty(blogContent)) {return ResultGenerator.genFailResult("请输入文章内容");}if (blogTags.trim().length() > 100000) {return ResultGenerator.genFailResult("文章内容过长");}Blog blog = new Blog();blog.setBlogId(blogId);blog.setBlogTitle(blogTitle);blog.setBlogSummary(blogSummary);blog.setBlogCategoryId(blogCategoryId);blog.setBlogTags(blogTags);blog.setBlogContent(blogContent);blog.setBlogStatus(blogStatus);blog.setEnableComment(enableComment);String updateBlogResult = blogService.updateBlog(blog);if ("success".equals(updateBlogResult)) {return ResultGenerator.genSuccessResult("修改成功");} else {return ResultGenerator.genFailResult(updateBlogResult);}}/*** 根据id的之删除文章** @param ids 要删除文章id列表* @return com.hbu.myblog.util.Result*/@PostMapping("/blogs/delete")@ResponseBodypublic Result delete(@RequestBody Integer[] ids) {if (ids.length < 1) {return ResultGenerator.genFailResult("参数异常!");}if (blogService.deleteBatch(ids)) {return ResultGenerator.genSuccessResult();} else {return ResultGenerator.genFailResult("删除失败");}}}
源码获取:博客首页 "资源" 里下载!
相关文章:

JUnit4.11 理论机制 @Theory 完整解读
最近在研究JUnit4,大部分基础技术都是通过百度和JUnit的官方wiki学习的,目前最新的发布版本是4.11,结合代码实践,发现官方wiki的内容或多或少没有更新,Theory理论机制章节情况尤为严重,不知道这章wiki对应的…

树链剖分——线段树区间合并bzoj染色
线段树区间合并就挺麻烦了,再套个树链就更加鬼畜,不过除了代码量大就没什么其他的了。。 一些细节:线段树每个结点用结构体保存,pushup等合并函数改成返回一个结构体,这样好写一些 struct Seg{int lc,rc,tot;Seg(){lcr…

MyRocks: 为facebool 的社交图谱服务的LSM-tree存储引擎
文章目录概览1. UDB 架构2. UDB 表格式3. Rocksdb:针对flash存储优化过的第三方库3.1 Rocksdb架构3.2 为什么选择Rocksdb4. MyRocks / Rocksdb 开发历程4.1 设计目标4.2 性能挑战4.2.1 降低CPU的消耗4.2.2 降低range-scan 的延时消耗4.2.3 磁盘空间和Compaction 的一…

Java项目:精品酒店管理系统(java+SSM+mysql+maven+tomcat)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能:主要功能主要功能会员管理,住客管理,房间管 理,系统管理,以及一些重要数据的展示导出维护等等; 二、项目运行 环境配置&…

iOS自动布局一
Align: Pin: 转载于:https://www.cnblogs.com/123qw/p/4404167.html

C#实现路由器断开连接,更改公网ip
publicstaticvoidDisconnect(){stringurl "断 线"; stringuri "http://192.168.1.1/userRpm/StatusRpm.htm?Disconnect"System.Web.HttpUtility.UrlEncode(url, System.Text.Encoding.GetEncoding("gb2312")) "&wan1"; str…

Go中的iota
当时在学习Iota这个知识点的时候仅仅是一笔掠过,比如这种 const(aiotab c) 一眼看出他怎么使用的时候就觉得自己已经懂得了 再到后来看到这样的例子 const(a 5*iotab c )以及 const(a 1<<(10*iota)bc ) 第一…

从 SSLTLS 的底层实现来看 网络安全的庞大复杂体系
文章目录前言1. HTTP协议通信的问题1.1 tcpdump 抓取http 请求包1.2 报文分析1.3 HTTP 协议问题2. SSL & TLS 协议的基本介绍和历史演进3. TLS 1.2 实现加密传输的过程3.1 TLS HandShake 协议概览3.2 第一次握手:ClientHello3.3 第二次握手:从Server…

UICollectionView
UICollectionView 多列的UITableView,最简单的形式,类似于iBooks中书架的布局,书架中放着你下载的和购买的电子书。 最简单的UICollectionView是一个GridView,可以多列的方式进行展示。 包含三部分,都是UIView的子类: …

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

python twisted 笔记
2019独角兽企业重金招聘Python工程师标准>>> 1.Twisted框架构建简单的C/S 要写一个基于twisted框架的服务器,你要实现事件处理器,它处理诸如一个新的客户端连接、新的数据到达和客户端连接中断等情况。 在Twisted中,你的事件处理器定义在一个…

决策树J48算法
1. J48原理 2. 举例 3. 总结 1. J48原理 基于从上到下的策略,递归的分治策略,选择某个属性放置在根节点,为每个可能的属性值产生一个分支,将实例分成多个子集,每个子集对应一个根节点的分支,然后在每个分支…

分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论
文章目录1. 一致性 概览1.1 分布式系统的 “正确性”1.2 线性一致性(Linearizability)1.3 顺序一致性(Sequential consistency)1.4 因果一致性(Casual consistency)1.5 最终一致性(Eventual consistency)2. Zookeeper 的 “线性一致性” 问题3. 参考一致性算是分布式系统的定位…

Java项目:(小程序)全套商城系统(spring+spring mvc+mybatis+layui+微信小程)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括: 商品模块: 商品添加、规格设置,商品上下架等 订单模块: 下单、购物车、支付,发货、收货、评 退款等 营销模块: 积分、优惠券、分销、砍价、拼团、秒 多…

【转】[退役]纪念我的ACM——headacher@XDU
转自:http://hi.baidu.com/headacher/item/5a2ce1d50609091b20e25022 退役了,是时候总结一下我ACM的生涯了。虽然很舍不得,但这段回忆很值得纪念。ACM生涯虽然结束,但是新生活总要继续,还有很多东西需要我去学习&#…

VMware扩大硬盘后修改Linux逻辑卷大小
一、背景随着业务的不断成熟,数据库积累的数据也越来越多了。前些天发现服务器的磁盘将要满了。因此向虚拟化管理员申请增加磁盘空间。由于这个系统是建立在威睿的vSphere平台上的,因此虚拟化管理员只简单地通过 VMware vSphere Client 扩大了磁盘空间&a…

axios与ajax区别
1.jQuery ajax $.ajax({ type: POST, url: url, data: data, dataType: dataType, success: function () {}, error: function () {}});优缺点: 本身是针对MVC的编程,不符合现在前端MVVM的浪潮基于原生的XHR开发,XHR本身的架构不清晰,已经有…

单机 “5千万以上“ 工业级 LRU cache 实现
文章目录前言工业级 LRU Cache1. 基本架构2. 基本操作2.1 insert 操作2.2 高并发下 insert 的一致性/性能 保证2.3 Lookup操作2.4 shard 对 cache Lookup 性能的影响2.4 Erase 操作2.5 内存维护3. 优化前言 近期做了很多 Cache 优化相关的事情,因为对存储引擎较为熟…

Java项目:校园人力人事资源管理系统(java+Springboot+ssm+mysql+jsp+maven)
源码获取:博客首页 "资源" 里下载! 校园人力资源管理系统:学校部门管理,教室管理,学历信息管理,职务,教师职称,奖励,学历,社会关系,工作…

GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NETsiverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的增多,平台已经臃肿不堪。 设计…

关于CSDN不给任何通知强制关闭我的6年博客,我深表痛心
关于CSDN不给任何通知强制关闭我的6年博客,我深表痛心。最近有很长一段时间没有去csdn博客了, 前几天去看的时候发现博客被封闭了。 我联系了管理员,但是没有得到任何回复。 我猜想,可能是不是我在博客文章里面加入 自己网站的网…

Vue 环境搭建(win10)
1.安装node node官网安装地址 推荐安装稳定版本(LTS)以及安装路径为系统盘(C) 查看node安装成功否 注释:以下命令使用 命令提示符(管理员)权限,win10 对user权限的限制了访问权限。node -v 查看…

Java项目:化妆品商城系统(java+Springboot+ssm+mysql+jsp+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统主要实现的功能有: 网上商城系统,前台后台管理,用户注册,登录,上架展示,分组展示,搜索,收…

python 绘图脚本系列简单记录
简单记录平时画图用到的python 便捷小脚本 1. 从单个文件输入 绘制坐标系图 #!/usr/bin/python # coding: utf-8 import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl import sysfile_name1 sys.argv[1] data_title sys.argv[2] print(file_name1…

iOS-c语言小练习01
// // main.c // C-变量的地址 // // Created by cgq on 15/4/9. // Copyright (c) 2015年 cgq. All rights reserved. // #include <stdio.h> //访问变量的地址 void test1() { char a A; int b 44; printf("a的值:%d\n",a); pri…

蓝桥杯 【基础练习】 十六进制转八进制
问题描述给定n个十六进制正整数,输出它们对应的八进制数。输入格式输入的第一行为一个正整数n (1<n<10)。接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进…

泛在网:泛在网
ylbtech-泛在网:泛在网泛在网络来源于拉丁语Ubiquitous,从字面上看就是广泛存在的,无所不在的网络。也就是人置身于无所不在的网络之中,实现人在任何时间、地点,使用任何网络与任何人与物的信息交换,基于个…

Mac 从Makefile 编译 Rocksdb 源码的一些注意事项
文章目录前言Makefile 编译流程1. 平台变量/环境变量的初始化。2. 编译需要的源码文件变量初始化。3. include 目录的设置。4. 编译的执行逻辑。问题记录1:可能的打包命令ar 失效问题5. 执行具体的编译指令问题记录2: jar 包编译前言 最近在Mac 本地编译Rocksdb 过…

Java项目:在线考试系统(单选,多选,判断,填空,简答题)(java+Springboot+ssm+mysql+html+maven)
源码获取:博客首页 "资源" 里下载! 功能: 学生信息 班级 专业 学号 姓名 在线考试 成绩查询 个人信息 密码修改 教师管理 教师编号 姓名 所教科目 题库管理 单选题 多选题 填空题 判断题,简答题(人工…

看了极光推送技术原理的几点思考
看了极光推送技术原理的几点思考 分类: android2012-11-26 20:50 16586人阅读 评论(18) 收藏 举报目录(?)[] 移动互联网应用现状 因为手机平台本身、电量、网络流量的限制,移动互联网应用在设计上跟传统 PC 上的应用很大不一样,需要根据手机…