作者主页:源码空间站2022
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
本项目包含管理员与游客两种角色;
管理员角色包含以下功能:
发表文章,查看文章,类别管理,添加类别,个人信息管理,评论管理,评论审核等功能。
游客角色包含以下功能:
首页,博客详情,文章分类,评论等功能。
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+bootstrap+jquery
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,输入localhost:8080/personal_blog 登录
- package com.june.web.controller.admin;
-
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.multipart.MultipartFile;
-
- import com.june.lucene.BlogIndex;
- import com.june.model.Blog;
- import com.june.model.BlogType;
- import com.june.model.PageBean;
- import com.june.service.BlogService;
- import com.june.service.BlogTypeService;
- import com.june.service.CommentService;
- import com.june.util.Constants;
- import com.june.util.DateUtils;
- import com.june.util.PageUtils;
- import com.june.util.StringUtils;
-
- import lombok.extern.slf4j.Slf4j;
-
- /**
- * 博客Controller
- */
- @Controller
- @RequestMapping("/blog")
- public @Slf4j class BlogAdminController {
-
- @Resource
- private BlogService blogService;
-
- @Resource
- private BlogTypeService blogTypeService;
-
- @Resource
- private CommentService commentService;
-
- @Resource
- private BlogIndex blogIndex;
-
- @RequestMapping("/list")
- public String list(@RequestParam(defaultValue = "1") Integer page,
- @RequestParam(defaultValue = Constants.DEFAULT_PAGE_SIZE - 1 + "") Integer pageSize,
- String firstDate, String secondDate, Integer typeId, String title, Model model,
- HttpServletRequest request) {
-
- Map
map = new HashMap<>(6); - map.put("typeId", typeId);
- map.put("title", title);
- map.put("firstDate", firstDate);
- map.put("secondDate", secondDate);
- int totalCount = blogService.getCount(map);
- PageBean pageBean = new PageBean(totalCount, page, pageSize);
- map.put("start", pageBean.getStart());
- map.put("size", pageSize);
- model.addAttribute("pagination", pageBean);
-
- List
blogTypeList = blogTypeService.getTypeList(); - model.addAttribute("blogTypeList",blogTypeList);
-
- StringBuilder param = new StringBuilder(); // 分页查询参数
- param.append(StringUtils.isEmpty(title) ? "" : "title=" + title);
- param.append(StringUtils.isEmpty(firstDate) ? "" : "&firstDate=" + firstDate);
- param.append(StringUtils.isEmpty(secondDate) ? "" : "&secondDate=" + secondDate);
- param.append(typeId == null ? "" : "&typeId=" + typeId);
-
- String pageCode = PageUtils.genPagination(request.getContextPath() + "/blog/list.do",
- pageBean, param.toString());
- model.addAttribute("pageCode", pageCode);
- model.addAttribute("entry", map);
- model.addAttribute("blogList", blogService.getBlogList(map));
- return "blog/list";
- }
-
- @RequestMapping("/toAdd")
- public String toAdd(Model model) {
- model.addAttribute("blogTypeList", blogTypeService.getTypeList());
- return "blog/add";
- }
-
- @RequestMapping("/toUpdate")
- public String toUpdate(Integer id, Model model) {
- model.addAttribute("blogTypeList", blogTypeService.getTypeList());
- Blog blog = blogService.findById(id);
- model.addAttribute("blog", blog);
- BlogType blogType = blog.getBlogType();
- if(blogType != null){
- model.addAttribute("typeId", blogType.getTypeId());
- }
- return "blog/update";
- }
-
- @RequestMapping("/add")
- public void add(Blog blog, @RequestParam(value = "img") MultipartFile file,
- Model model) throws Exception {
-
- // 获取原始文件名
- String fileName = file.getOriginalFilename();
- int index = fileName.indexOf(".");
- String imageUrl = null;
- String imagePath = DateUtils.getTimeStrForImage();
- if (index != -1) {
- //生成新文件名
- imageUrl = imagePath + fileName.substring(index);
- log.info("add {}", imagePath);
- handleFileUpload(file, imageUrl);
- blog.setImage(imageUrl);
- }
- // 添加博客及索引
- int result = blogService.add(blog);
- model.addAttribute("msg", result > 0 ? "保存成功" : "保存失败");
- }
-
- @RequestMapping("/update")
- public void update(Blog blog, @RequestParam(value = "img", required=false) MultipartFile file,
- Model model) throws Exception {
-
- if (file != null) { //上传图片
- // 获取原始文件名
- String fileName = file.getOriginalFilename();
- int index = fileName.indexOf(".");
- String imageUrl = null;
- String imagePath = DateUtils.getTimeStrForImage();
- if(index != -1){
- //生成新文件名
- imageUrl = imagePath + fileName.substring(index);
- log.info("update {}", imagePath);
- handleFileUpload(file,imageUrl);
- blog.setImage(imageUrl);
- }
- }
- //更新博客及索引
- int result = blogService.update(blog);
- model.addAttribute("msg", result > 0 ? "保存成功" : "保存失败");
- }
-
- @RequestMapping("/delete")
- public String delete(Integer id) throws IOException {
- // 删除博客、索引及评论
- blogService.delete(id);
- return "redirect:/blog/list.do";
- }
-
- @RequestMapping("/deletes")
- public String deletes(String ids) throws IOException {
- String[] idArr = org.springframework.util.StringUtils.commaDelimitedListToStringArray(ids);
- int len = idArr.length;
- Integer[] blogIds = new Integer[len];
- for (int i = 0; i < len; i++) {
- blogIds[i] = Integer.parseInt(idArr[i]);
- }
- blogService.batchDelete(blogIds);
- return "redirect:/blog/list.do";
- }
-
- private void handleFileUpload(MultipartFile file, String imageUrl) {
- try (InputStream is = file.getInputStream()) {
- // 获取输入流
- String filePath = Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(0,Thread.currentThread().getContextClassLoader().getResource("").getPath().length()-16)+Constants.COVER_DIR + imageUrl;
- File dir = new File(filePath.substring(0, filePath.lastIndexOf("/")));
- //判断上传目录是否存在
- if (!dir.exists()) {
- dir.mkdirs();
- }
- try (FileOutputStream fos = new FileOutputStream(new File(filePath))) {
- byte[] buffer = new byte[1024];
- int len = 0;
- // 读取输入流中的内容
- while ((len = is.read(buffer)) != -1) {
- fos.write(buffer, 0, len);
- }
- }
- } catch (Exception e) {
- log.error("图片上传失败", e);
- }
- }
- }
- package com.june.web.controller.admin;
-
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
-
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.multipart.MultipartFile;
-
- import com.june.model.Blogger;
- import com.june.service.BloggerService;
- import com.june.service.CommentService;
- import com.june.util.Constants;
- import com.june.util.DateUtils;
- import com.june.util.ResponseUtils;
- import com.june.util.ShiroUtils;
-
- import lombok.extern.slf4j.Slf4j;
-
- @Controller
- @RequestMapping("/blogger")
- public @Slf4j class BloggerAdminController {
-
- @Resource
- private CommentService commentService;
-
- @Resource
- private BloggerService bloggerService;
-
- @RequestMapping("/toModifyInfo")
- public String toModifyInfo(Model model) {
- model.addAttribute("blogger", bloggerService.find());
- return "blogger/modifyInfo";
- }
-
- @RequestMapping("/toModifyPassword")
- public String toModifyPassword() {
- return "blogger/modifyPassword";
- }
-
- @RequestMapping("/modifyInfo")
- public void modifyInfo(Blogger blogger,
- @RequestParam(value = "img", required = false) MultipartFile file,
- Model model) throws Exception {
-
- if (file != null) { //上传图片
- // 获取原始文件名
- String fileName = file.getOriginalFilename();
- int index = fileName.indexOf(".");
- String imageUrl = null;
- if (index != -1) {
- // 生成新文件名
- imageUrl = DateUtils.getTimeStrForImage() + fileName.substring(index);
- handleFileUpload(file, imageUrl);
- blogger.setImageUrl(imageUrl);
- }
- }
- int result = bloggerService.update(blogger);
- model.addAttribute("msg", result > 0 ? "保存成功" : "保存失败");
- }
-
- @RequestMapping("/modifyPassword")
- public void modifyPassword(String newpwd, String oldpwd, String repwd, HttpServletResponse response,
- HttpServletRequest request) {
-
- Blogger blogger = bloggerService.find();
- if (!blogger.getPassword().equals(ShiroUtils.encryptPassword(oldpwd))) {
- ResponseUtils.writeText(response, "原密码输入不正确");
- return;
- }
- if (!newpwd.equals(repwd)) {
- ResponseUtils.writeText(response, "两次密码输入不一致");
- return;
- }
- blogger.setPassword(ShiroUtils.encryptPassword(newpwd));
- bloggerService.update(blogger);
- ResponseUtils.writeText(response, "修改成功");
- }
-
- private void handleFileUpload(MultipartFile file,String imageUrl) {
- try (InputStream is = file.getInputStream()) {
- // 获取输入流
- String filePath = Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(0,Thread.currentThread().getContextClassLoader().getResource("").getPath().length()-16)+Constants.AVATAR_DIR + imageUrl;
- File dir = new File(filePath.substring(0, filePath.lastIndexOf("/")));
- //判断上传目录是否存在
- if (!dir.exists()) {
- dir.mkdirs();
- }
- try (FileOutputStream fos = new FileOutputStream(new File(filePath))) {
- byte[] buffer = new byte[1024];
- int len = 0;
- // 读取输入流中的内容
- while ((len = is.read(buffer)) != -1) {
- fos.write(buffer, 0, len);
- }
- }
- } catch (Exception e) {
- log.error("图片上传失败", e);
- }
- }
- }
- package com.june.web.controller.admin;
-
- import java.io.IOException;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import org.json.JSONObject;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
-
- import com.june.model.BlogType;
- import com.june.model.PageBean;
- import com.june.service.BlogService;
- import com.june.service.BlogTypeService;
- import com.june.util.Constants;
- import com.june.util.PageUtils;
- import com.june.util.ResponseUtils;
-
- /**
- * 博客类别Controller
- */
- @Controller
- @RequestMapping("/blogType")
- public class BlogTypeAdminController {
-
- @Resource
- private BlogTypeService blogTypeService;
-
- @Resource
- private BlogService blogService;
-
- @RequestMapping("/list")
- public String list(@RequestParam(defaultValue = "1") Integer page,
- @RequestParam(defaultValue = Constants.BACK_PAGE_SIZE + 3 + "") Integer pageSize,
- Model model, HttpServletRequest request) {
- int totalCount = blogTypeService.getCount();
- PageBean pageBean = new PageBean(totalCount, page, pageSize);
- Map
params = new HashMap<>(2); - params.put("start", pageBean.getStart());
- params.put("size", pageSize);
- List
blogTypeList = blogTypeService.getTypeList(params); - blogTypeList.forEach(blogType -> {
- Map
types = new HashMap<>(1); - types.put("typeId", blogType.getTypeId());
- Integer blogCount = blogService.getCount(types);
- blogType.setBlogCount(blogCount);
- });
- model.addAttribute("pagination", pageBean);
-
- String targetUrl = request.getContextPath() + "/blogType/list.do";
- String pageCode = PageUtils.genPagination(targetUrl, pageBean, "");
- model.addAttribute("pageCode", pageCode);
- model.addAttribute("entry", params);
- model.addAttribute("blogTypeList", blogTypeList);
- return "blogType/list";
- }
-
- @RequestMapping("/toAdd")
- public String toAdd() {
- return "blogType/add";
- }
-
- @RequestMapping("/toUpdate")
- public String toUpdate(Integer id,Model model) {
- model.addAttribute("blogType", blogTypeService.findById(id));
- return "blogType/update";
- }
-
- @RequestMapping("/add")
- public void add(BlogType blogType,Model model) {
- int result = blogTypeService.add(blogType);
- model.addAttribute("msg", result > 0 ? "保存成功" : "保存失败");
- }
-
- @RequestMapping("/update")
- public void update(BlogType blogType,Model model) {
- int result = blogTypeService.update(blogType);
- model.addAttribute("msg", result > 0 ? "保存成功" : "保存失败");
- }
-
- @RequestMapping("/search")
- public void search(Integer id,HttpServletResponse response){
- JSONObject jsonObj = new JSONObject();
- Map
map = new HashMap<>(1); - map.put("typeId", id);
- jsonObj.put("count", blogService.getCount(map));
- ResponseUtils.writeJson(response, jsonObj.toString());
- }
-
- //只删除类别
- @RequestMapping("/delete")
- public String delete(Integer id) {
- blogTypeService.delete(id);
- return "redirect:/blogType/list.do";
- }
-
- //删除的同时将相关博客的类别置为默认分类
- @RequestMapping("/batch_delete")
- public String batchDelete(Integer id) throws IOException {
- blogTypeService.batchDelete(id);
- return "redirect:/blogType/list.do";
- }
- }
- package com.june.web.controller.admin;
-
- import java.io.IOException;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import org.json.JSONObject;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
-
- import com.june.model.Comment;
- import com.june.model.PageBean;
- import com.june.service.BlogService;
- import com.june.service.CommentService;
- import com.june.util.Constants;
- import com.june.util.PageUtils;
- import com.june.util.ResponseUtils;
- import com.june.util.StringUtils;
-
- @Controller
- @RequestMapping("/comment")
- public class CommentAdminController {
-
- @Resource
- private CommentService commentService;
-
- @Resource
- private BlogService blogService;
-
- @RequestMapping("/list")
- public String list(@RequestParam(defaultValue = "1") Integer page,
- @RequestParam(defaultValue = Constants.BACK_PAGE_SIZE + 1 + "") Integer pageSize,
- String firstDate, String secondDate, String userName,
- Boolean isPass, Model model, HttpServletRequest request) {
-
- Map
params = new HashMap(6); - params.put("firstDate", firstDate);
- params.put("secondDate", secondDate);
- params.put("userName", userName);
- params.put("isPass", isPass);
- int totalCount = commentService.getCount(params);
- PageBean pageBean = new PageBean(totalCount, page, pageSize);
- params.put("start", pageBean.getStart());
- params.put("size", pageSize);
- List
commentList = commentService.getCommentList(params); - commentList.stream().forEach(comment -> {
- String content = comment.getContent();
- if (content.length() > 60) {
- comment.setContent(content.substring(0,60) + "...");
- }
- });
- model.addAttribute("pagination", pageBean);
- StringBuilder param = new StringBuilder(); // 分页查询参数
- param.append(StringUtils.isEmpty(firstDate) ? "" : "&firstDate=" + firstDate);
- param.append(StringUtils.isEmpty(secondDate) ? "" : "&secondDate=" + secondDate);
- param.append(StringUtils.isEmpty(userName) ? "" : "&userName=" + userName);
- param.append(isPass == null ? "" : "&isPass=" + isPass);
-
- String pageCode = PageUtils.genPagination(request.getContextPath() + "/comment/list.do",
- pageBean, param.toString());
- model.addAttribute("pageCode", pageCode);
- model.addAttribute("entry", params);
- model.addAttribute("commentList", commentList);
- return "comment/list";
- }
-
- @RequestMapping("/toAdd")
- public String toAdd() {
- return "comment/add";
- }
-
- @RequestMapping("/detail")
- public String detail(Integer id,Model model){
- model.addAttribute("comment", commentService.findById(id));
- return "comment/detail";
- }
-
- //评论审核
- @RequestMapping("/audit")
- public void audit(Comment comment, HttpServletResponse response) {
- comment.setReplyDate(new Date());
- int result = commentService.audit(comment);
- JSONObject jsonObj = new JSONObject();
- jsonObj.put("success", result > 0);
- ResponseUtils.writeJson(response, jsonObj.toString());
- }
-
- @RequestMapping("/delete")
- public String delete(Integer id) throws IOException{
- commentService.delete(id);
- return "redirect:/comment/list.do";
- }
-
- @RequestMapping("/deletes")
- public String deletes(String ids) {
- String[] idArr = org.springframework.util.StringUtils.commaDelimitedListToStringArray(ids);
- int len = idArr.length;
- Integer[] commentIds = new Integer[len];
- for (int i = 0; i < len; i++) {
- commentIds[i] = Integer.parseInt(idArr[i]);
- }
- commentService.batchDelete(commentIds);
- return "redirect:/comment/list.do";
- }
- }
如果也想学习本系统,下面领取。关注并回复:103ssm