作者主页:编程千纸鹤
作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师
主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享
收藏点赞不迷路 关注作者有好处
项目编号:BS-PT-070
一,项目简介
计算机硬件在社会上有很多广泛的发烧友,他们急需一个发布专业硬件测评数据的平台并进行交流互动的社区。本次开发实现的计算机硬件交流平台就是作为一个专业的硬件测评平台为这些发烧爱好者服务的。这对于计算机相关硬件产品的普及和硬件测评数据的分享,都起到了很好的作用。
本平台主要用来发布计算机硬件的评测数据并供广大爱好者交流讨论,计算机的每年有很多的硬件产品出现,这些产品一般会有专门的机构进行相关的测评,也有很多的爱好者关注这些硬件产品的性能,这个开发的平台能够实现硬件评测数据的发布分享,并交由广大爱好者进行在线讨论。
本系统主要分为系统前端和系统后端,前端主要展示一些评测专员发布的计算机硬件评测的数据信息,广大的爱好者可以在线查看并参与讨论,用户也可以通过相应的分类或文章标签进行查看相关的评测文章。并根据评论信息展示最热的评论贴子,同时提供全文检索和在线留言的功能。也可以在线申请网站链接,后台管理员审核后可以添加外链。后台管理员和评测专员登陆后台系统可以发布相关的评测文章,设置相关的类别和标签,管理相关的讨论信息并进行回复,也可以对评测专员信息进行管理操作。管理员同时可以参加相关的业务模块,展示平台信息,添加友情连接等。
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台开发技术:SSM框架
前台开发技术:Jquery,Jquery-UI,BootStrap,Ajax,JSP
三,系统展示
前端首页
文章查看及评论
分类查看硬件评测文章
在线留言
文章归档
评测人员登陆
后台展示
评测文章查看
硬件评测分类管理
标签管理
自定义页面
外链管理
平台公告
评论管理
评测员管理
平台前端菜单管理
四,核心代码展示
package com.liuyanzhao.ssm.blog.controller.admin;
import com.liuyanzhao.ssm.blog.entity.Article;
import com.liuyanzhao.ssm.blog.entity.Comment;
import com.liuyanzhao.ssm.blog.entity.User;
import com.liuyanzhao.ssm.blog.service.ArticleService;
import com.liuyanzhao.ssm.blog.service.CommentService;
import com.liuyanzhao.ssm.blog.service.UserService;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.liuyanzhao.ssm.blog.util.MyUtils.getIpAddr;
/**
* @author znz
*/
@Controller
public class AdminController {
@Autowired
private UserService userService;
@Autowired
private ArticleService articleService;
@Autowired
private CommentService commentService;
/**
* 后台首页
*
* @return
*/
@RequestMapping("/admin")
public String index(Model model) {
//文章列表
List<Article> articleList = articleService.listRecentArticle(5);
model.addAttribute("articleList",articleList);
//评论列表
List<Comment> commentList = commentService.listRecentComment(5);
model.addAttribute("commentList",commentList);
return "Admin/index";
}
/**
* 登录页面显示
*
* @return
*/
@RequestMapping("/login")
public String loginPage() {
return "Admin/login";
}
/**
* 登录验证
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/loginVerify",method = RequestMethod.POST)
@ResponseBody
public String loginVerify(HttpServletRequest request, HttpServletResponse response) {
Map<String, Object> map = new HashMap<String, Object>();
String username = request.getParameter("username");
String password = request.getParameter("password");
String rememberme = request.getParameter("rememberme");
User user = userService.getUserByNameOrEmail(username);
if(user==null) {
map.put("code",0);
map.put("msg","用户名无效!");
} else if(!user.getUserPass().equals(password)) {
map.put("code",0);
map.put("msg","密码错误!");
} else {
//登录成功
map.put("code",1);
map.put("msg","");
//添加session
request.getSession().setAttribute("user", user);
//添加cookie
if(rememberme!=null) {
//创建两个Cookie对象
Cookie nameCookie = new Cookie("username", username);
//设置Cookie的有效期为3天
nameCookie.setMaxAge(60 * 60 * 24 * 3);
Cookie pwdCookie = new Cookie("password", password);
pwdCookie.setMaxAge(60 * 60 * 24 * 3);
response.addCookie(nameCookie);
response.addCookie(pwdCookie);
}
user.setUserLastLoginTime(new Date());
user.setUserLastLoginIp(getIpAddr(request));
userService.updateUser(user);
}
String result = new JSONObject(map).toString();
return result;
}
/**
* 退出登录
*
* @param session
* @return
*/
@RequestMapping(value = "/admin/logout")
public String logout(HttpSession session) {
session.removeAttribute("user");
session.invalidate();
return "redirect:/login";
}
}
package com.znz.ssm.blog.controller.admin;
import cn.hutool.http.HtmlUtil;
import com.github.pagehelper.PageInfo;
import com.znz.ssm.blog.dto.ArticleParam;
import com.znz.ssm.blog.entity.Article;
import com.znz.ssm.blog.service.ArticleService;
import com.znz.ssm.blog.service.CategoryService;
import com.znz.ssm.blog.service.TagService;
import com.znz.ssm.blog.entity.Category;
import com.znz.ssm.blog.entity.Tag;
import com.znz.ssm.blog.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* @author znz
*/
@Controller
@RequestMapping("/admin/article")
public class BackArticleController {
@Autowired
private ArticleService articleService;
@Autowired
private TagService tagService;
@Autowired
private CategoryService categoryService;
/**
* 后台文章列表显示
*
* @return modelAndView
*/
@RequestMapping(value = "")
public String index(@RequestParam(required = false, defaultValue = "1") Integer pageIndex,
@RequestParam(required = false, defaultValue = "10") Integer pageSize,
@RequestParam(required = false) String status, Model model) {
HashMap<String, Object> criteria = new HashMap<>(1);
if (status == null) {
model.addAttribute("pageUrlPrefix", "/admin/article?pageIndex");
} else {
criteria.put("status", status);
model.addAttribute("pageUrlPrefix", "/admin/article?status=" + status + "&pageIndex");
}
PageInfo<Article> articlePageInfo = articleService.pageArticle(pageIndex, pageSize, criteria);
model.addAttribute("pageInfo", articlePageInfo);
return "Admin/Article/index";
}
/**
* 后台添加文章页面显示
*
* @return
*/
@RequestMapping(value = "/insert")
public String insertArticleView(Model model) {
List<Category> categoryList = categoryService.listCategory();
List<Tag> tagList = tagService.listTag();
model.addAttribute("categoryList", categoryList);
model.addAttribute("tagList", tagList);
return "Admin/Article/insert";
}
/**
* 后台添加文章提交操作
*
* @param articleParam
* @return
*/
@RequestMapping(value = "/insertSubmit", method = RequestMethod.POST)
public String insertArticleSubmit(HttpSession session, ArticleParam articleParam) {
Article article = new Article();
//用户ID
User user = (User) session.getAttribute("user");
if (user != null) {
article.setArticleUserId(user.getUserId());
}
article.setArticleTitle(articleParam.getArticleTitle());
//文章摘要
int summaryLength = 150;
String summaryText = HtmlUtil.cleanHtmlTag(articleParam.getArticleContent());
if (summaryText.length() > summaryLength) {
String summary = summaryText.substring(0, summaryLength);
article.setArticleSummary(summary);
} else {
article.setArticleSummary(summaryText);
}
article.setArticleContent(articleParam.getArticleContent());
article.setArticleStatus(articleParam.getArticleStatus());
//填充分类
List<Category> categoryList = new ArrayList<>();
if (articleParam.getArticleChildCategoryId() != null) {
categoryList.add(new Category(articleParam.getArticleParentCategoryId()));
}
if (articleParam.getArticleChildCategoryId() != null) {
categoryList.add(new Category(articleParam.getArticleChildCategoryId()));
}
article.setCategoryList(categoryList);
//填充标签
List<Tag> tagList = new ArrayList<>();
if (articleParam.getArticleTagIds() != null) {
for (int i = 0; i < articleParam.getArticleTagIds().size(); i++) {
Tag tag = new Tag(articleParam.getArticleTagIds().get(i));
tagList.add(tag);
}
}
article.setTagList(tagList);
articleService.insertArticle(article);
return "redirect:/admin/article";
}
/**
* 删除文章
*
* @param id 文章ID
*/
@RequestMapping(value = "/delete/{id}")
public void deleteArticle(@PathVariable("id") Integer id) {
articleService.deleteArticle(id);
}
/**
* 编辑文章页面显示
*
* @param id
* @return
*/
@RequestMapping(value = "/edit/{id}")
public ModelAndView editArticleView(@PathVariable("id") Integer id) {
ModelAndView modelAndView = new ModelAndView();
Article article = articleService.getArticleByStatusAndId(null, id);
modelAndView.addObject("article", article);
List<Category> categoryList = categoryService.listCategory();
modelAndView.addObject("categoryList", categoryList);
List<Tag> tagList = tagService.listTag();
modelAndView.addObject("tagList", tagList);
modelAndView.setViewName("Admin/Article/edit");
return modelAndView;
}
/**
* 编辑文章提交
*
* @param articleParam
* @return
*/
@RequestMapping(value = "/editSubmit", method = RequestMethod.POST)
public String editArticleSubmit(ArticleParam articleParam) {
Article article = new Article();
article.setArticleId(articleParam.getArticleId());
article.setArticleTitle(articleParam.getArticleTitle());
article.setArticleContent(articleParam.getArticleContent());
article.setArticleStatus(articleParam.getArticleStatus());
//文章摘要
int summaryLength = 150;
String summaryText = HtmlUtil.cleanHtmlTag(article.getArticleContent());
if (summaryText.length() > summaryLength) {
String summary = summaryText.substring(0, summaryLength);
article.setArticleSummary(summary);
} else {
article.setArticleSummary(summaryText);
}
//填充分类
List<Category> categoryList = new ArrayList<>();
if (articleParam.getArticleChildCategoryId() != null) {
categoryList.add(new Category(articleParam.getArticleParentCategoryId()));
}
if (articleParam.getArticleChildCategoryId() != null) {
categoryList.add(new Category(articleParam.getArticleChildCategoryId()));
}
article.setCategoryList(categoryList);
//填充标签
List<Tag> tagList = new ArrayList<>();
if (articleParam.getArticleTagIds() != null) {
for (int i = 0; i < articleParam.getArticleTagIds().size(); i++) {
Tag tag = new Tag(articleParam.getArticleTagIds().get(i));
tagList.add(tag);
}
}
article.setTagList(tagList);
articleService.updateArticleDetail(article);
return "redirect:/admin/article";
}
}
package com.znz.ssm.blog.controller.admin;
import com.znz.ssm.blog.entity.Category;
import com.znz.ssm.blog.service.ArticleService;
import com.znz.ssm.blog.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/**
* @author znz
*/
@Controller
@RequestMapping("/admin/category")
public class BackCategoryController {
@Autowired
private ArticleService articleService;
@Autowired
private CategoryService categoryService;
/**
* 后台分类列表显示
*
* @return
*/
@RequestMapping(value = "")
public ModelAndView categoryList() {
ModelAndView modelandview = new ModelAndView();
List<Category> categoryList = categoryService.listCategoryWithCount();
modelandview.addObject("categoryList",categoryList);
modelandview.setViewName("Admin/Category/index");
return modelandview;
}
/**
* 后台添加分类提交
*
* @param category
* @return
*/
@RequestMapping(value = "/insertSubmit",method = RequestMethod.POST)
public String insertCategorySubmit(Category category) {
categoryService.insertCategory(category);
return "redirect:/admin/category";
}
/**
* 删除分类
*
* @param id
* @return
*/
@RequestMapping(value = "/delete/{id}")
public String deleteCategory(@PathVariable("id") Integer id) {
//禁止删除有文章的分类
int count = articleService.countArticleByCategoryId(id);
if (count == 0) {
categoryService.deleteCategory(id);
}
return "redirect:/admin/category";
}
/**
* 编辑分类页面显示
*
* @param id
* @return
*/
@RequestMapping(value = "/edit/{id}")
public ModelAndView editCategoryView(@PathVariable("id") Integer id) {
ModelAndView modelAndView = new ModelAndView();
Category category = categoryService.getCategoryById(id);
modelAndView.addObject("category",category);
List<Category> categoryList = categoryService.listCategoryWithCount();
modelAndView.addObject("categoryList",categoryList);
modelAndView.setViewName("Admin/Category/edit");
return modelAndView;
}
/**
* 编辑分类提交
*
* @param category 分类
* @return 重定向
*/
@RequestMapping(value = "/editSubmit",method = RequestMethod.POST)
public String editCategorySubmit(Category category) {
categoryService.updateCategory(category);
return "redirect:/admin/category";
}
}
五,项目总结
目前在移互联网的冲击下,传统的互联网在线沟通的方式似乎已经处于消亡的边缘,替而代之的是现在火爆的即时聊天,在线视频等等工具。而这种通过语音和视频进行聊天沟通的方式虽然简洁方便,但更适合于个体间的一对一交流,虽然相寻找共同的社群群体来讲,如果想就某一主题进行持续性讨论,并自主发表自己的意见,传统的社区交流论坛形式仍然是不可或缺的。
在最早的时候,论坛社区仅是起到公布一些股市以及公司即时信息的作用,但随着时代的发展,现在的它,内容已经达到了无所不含的程度,上到国家大事、专业领域,下到日常生活,衣食住行,各式各样的交流论坛让人目不暇接,其适用范围的广泛使其成为了当今交流社区的核心。由静态到动态的发展让社区论坛[4]更好的实现了用户之间的交流。