【网站项目】java智慧生活分享平台初步设计和实现
生活智慧小贴士:设定目标,然后逐步实现 #生活乐趣# #生活分享# #生活哲学感悟# #生活智慧小贴士#
作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的网站项目。
代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板,帮助书写开题报告。作者完整代码目录供你选择:
《Springboot网站项目》400套《ssm网站项目》800套《小程序项目》300套《App项目》500套《Python网站项目》600套⬇️文章末尾可以获取联系方式,需要源码或者演示视频可以联系⬇️
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
项目展示
Java小红书生活分享平台
摘 要
随着生活和工作方面的压力逐渐增加, 人们对信息化网络的依赖和需求也就变得越来越大。小红书信息生活分享平台女士是一个能使得繁忙的或者不喜欢出门的用户群体在,通过手机在网络上查看、分享一些资讯信息、美食、八卦、娱乐、知识教育等信息的分享以及大家的沟通交流、足不出户而又很方便地获取信息,这样既满足了自己的心灵需要,也不会影响到工作或者浪费了休息的时间。 如今现代信息技术的迅速发展和 Internet 普遍运用。本文所述的小红书生活信息分享平台是采用 Java 和 mysql实现的。首先从系统的概述、意义入手,分析了它在人们生活中的重要地位和;其次详细阐述系统设计与实现的方法步骤。包括系统需求分析、总体设计和功能模块设计等,最后介绍了本系统数据库的使用的技术和开发方法。
关键词 : html、spring、 springboot、小红书生活信息分享
绪论
研究背景小红书是一个生活方式平台和消费决策入口,创始人为毛文超和瞿芳。截至2019年7月,小红书用户数已超过3亿。截至到2019年10月,小红书月活跃用户数已经过亿,其中70%新增用户是90后 。在小红书社区,用户通过文字、图片、视频笔记的分享,记录了这个时代年轻人的正能量和美好生活,小红书通过机器学习对海量信息和人进行精准、高效匹配。小红书旗下设有电商业务 ,2017年12月24日,小红书电商被《人民日报》评为代表中国消费科技产业的“中国品牌奖”。
1.2 研究目的和意义
在当今社会,作为一个快速发展的社会,互联网已经完全渗透到人们的生活中,网络信息已经成为首要的主要传播媒介。毫不夸张地说,对网络资源的获取已经逐渐改变了人们以前的生活方式,互联网已经成为人们日常生活和休闲的主要工具。人们记录、分享和发现生活乐趣的方式正在逐渐改变。因此,如何利用互动的方式,让爱吃、爱喝、爱玩的人,通过享受和分享各种信息,来宣传自己的价值观,获得他人的认可和关注,是一个比较深入的话题。目前,基于SpringBoot的小红皮书生活共享网络的设计与实现是互联网与社会生活的紧密联系。在本系统中,我综合运用了mysql5、springboot、mybait等知识。网页界面结构的设计从实用性出发,具有易操作、方便的特点。在设计上,首先,运用HTML5语言对网站的静态页面进行精细处理,在网站的美术方面取得了良好的效果。然后,对Java编程、HTML5动态编程和MySQL5数据库进行了学习和实践,并应用到网站的建设中。本文对小红皮书生活分享网进行了详细而全面的探讨。
1.3 研究的内容
该小红书生活分享网页可以实现用户登录和注册、用户登录后可以自己发布一些 吃喝玩乐 等相关的信息、其他用户可以浏览分享的一些信息 、可登录后可以关注当前用户、、可以对小红书网页端信息进行评论等操作、可以分类型查看小红书网页版上面的各类信息。没有注册的用户可以一些信息浏览,但是如果想获得更加详细的信息以及评论等操作,用户就必须要进行相应的注册才能够得到更加详细的信息信息以便于分享、评论、关注等操作。
二、相关技术介绍
2.1 spring
Spring 框架是Java技术平台上的一种常见开源应用框架,提具有控制反转IOC的容器。尽管长时间以来Spring框架自身对编程没有限制,但是其在Java应用中的频繁使用让它很受青睐,所有后来让它作为EJB(EnterpriseJavaBeans)模型信息补充,java Spring框架为开发提供了一系列技术解决方案,比如:利用控制反转IOC的特性,通过实现依赖注入来实现管理整个对象生命周期容器化,利用java面向切面编程技术进行声明式事务管理,整合各种持久化技术管理数据的访问,提供了很多优秀的Web框架方便开发、JAVA Spring框架具有控制反转IOC特性,IOC主要在方便项目维护和测试时期,它提供了一种通过Java反射机制对Java对象进行统一配置与各种管理的方法。
2.2 Spring MVC
Spring MVC框架是一个经典的MVC流程框架,通过实现ModelView以及Controller处理器来很好地将数据和业务以及展现层进行完全分离。从这样的一个角度来说的话,Spring MVC、Struts以及Struts2非常的类似。SpringMVC总体设计是围绕DispatcherServlet前端控制器来展开的,DispatcherServlet负责将前端请求发送到特定的handler映射。通过配置的handler mappings---view resolution---locale以及theme resolution来处理收到的请求并且转到对应的视图处理器。Spring MVC请求业务处理的整体流程如下展示:
2.3 mybatis
MyBatis框架是底层JDBC访问数据库的封装,它使得底层访问数据库的操作是透明的。MyBatis的操作是基于一个SQL SessionFactory实例。MyBatis框架通过各种配置文件与特定对象实体类的映射Mapper文件相关联,并且Mapper文件配置了每个对象到数据库的SQL映射。当与数据库交互时,通过SQLSessionFactory实例获取SQLSession对象并执行SQL命令。访问数据库。
2.4 jQuery
JQuery框架是一个快速、经典和简单的JavaScript前端框架计划。它是继Prototype之后的又一个优秀的JavaScript代码基础框架。jQuery设计的目的是写的少,做的多,也就是说写的代码少。它做的事情越多,就封装了常见的JavaScript功能和代码,并提供了一个简单的JavaScript设计相关的模式,用于优化HTML文档操作、事件处理、CSS样式化、动画设计和Ajax请求交互。
2.5 Mysql
MySQL数据库是与PHP、Java、c++ / c#等主流编程语言技术紧密结合的安全、跨平台、高效的轻量级数据库系统。MySQL数据库系统是由瑞典公司MySQL AB开发、发布和支持的。它于1995年由MySQL的最初开发者David Axmark和Michael Monty Wdenius创建。
目前,MySQL数据库在互联网网站上被广泛使用。由于MySQL数据库体积小、速度快、整体拥有成本很低,尤其是在开源的特点上,很多互联网公司都采用了MySQL数据库来降低开发系统的成本。
MySQL数据库是世界上最快的SQL数据库之一。因为它有许多其他数据库没有的特性,MySQL数据库也是免费和开源的。用户可以通过网络直接从网站上下载MySQL数据库并使用,无需支付任何费用。
2.6 SpringBoot
SpringBoot是一个新的开源轻量级框架,由Pivotal团队于2013年开始开发,第一个版本于2014年4月发布。它是基于Spring4.0设计的,不仅继承了Spring框架的优秀特性,而且通过简化配置简化了Spring应用程序的整个设置和开发过程。此外,SpringBoot集成了大量框架来解决版本冲突和依赖包引用不稳定的问题。
SpringBoot功能包括:
(1)你可以创建独立的Spring应用程序,并基于它们的Maven或Gradle插件创建可执行的jar和Wars;
(2)嵌入Tomcat或Jetty等Servlet容器;
(3)提供“starter”项目对象模型(POMS)的自动配置,简化Maven的配置;
(4)只要可能,自动配置Spring容器;
(5)提供现成的功能,如度量、健康检查和外部化配置;
(6)绝对不需要代码生成,不需要XML配置。[1] [2]
在SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。OutOfBox是一种开箱即用的方法,通过向Maven项目的POM文件添加依赖包,然后使用相应的注释,而不是冗长的XML配置文件,可以在开发期间管理对象的生命周期。该特性将开发人员从复杂的配置和依赖管理中解放出来,并允许他们更多地关注业务逻辑。约定优于配置是一种软件设计范式,其中目标结构由SpringBoot本身配置,开发人员将信息添加到结构中。这降低了一些灵活性并增加了BUG定位的复杂性,但它减少了开发人员需要做出的决策数量,减少了大量XML配置,并实现了代码编译、测试和打包的自动化。
从前端到后台描述了SpringBoot应用系统开发模板的基本架构设计:前端经常使用模板引擎,主要是Freemarker和Thymeleaf,它们是用Java语言编写的,用来呈现模板并输出相应的文本,这样接口设计就与应用程序的逻辑分离了。同时,前端开发也使用了Bootstrap、AngularJS、jQuery等。浏览器的数据传输格式包括JSON、non-XML和RESTfulAPI。对于数据访问层,主要有Hibernate、MyBatis、JPA等持久性层框架;数据库常用MySQL;推荐开发工具IntelliJidea。
三、需求分析和可行性
3.1 系统功能概述
主要模块设计如下:
1.用户模块管理:用户登录、用户注册、用户的查询、添加、删除操作、
2.小红书分享管理:分享列表的展示、添加、修改、删除操作、
3.小红书分享详情管理:小红书笔记详情列表的查看、添加、删除等操作、
4.管理员信息管理:管理员信息的查看、修改、
5.公告信息管理:公告信息的查看、添加、修改、删除操作、
6.用户模块管理:用户列表查询、添加、删除、
7.用户评论模块管理:用户评论查询、添加、删除、
8.注销退出登录管理
3.2 系统运行环境
开发系统: Windows7。
JDK版本: Java JDK1.8
开发工具: eclipse
数据库版本: mysql5
数据库可视化工具: navicat for mysql
服务器:apache tomcat 7
其他工具:谷歌浏览器控制台调整网页布局
Postman接口工具进行接口测试
3.3 技术设计
此系统需要java面向对象编程基础,数据库知识和功能分析。根据目前阶段所掌握的相关专业知识,以及这学期和之前学习掌握的java编程知识和数据库应用知识以及前端知识做出一个这样的基于、springboot轻量级框架网页版的小红书生活分享平台网页版平台。
3.4 社会可行性
在互联网技术高速发展的今天,通过互联网的传播会让企业更容易的创造更多的经 济效益,通过网页版小红书生活分享平台的实现 ,有了更大的市场和用户,在这样一个大环境下把资源统筹规化起来,就会获得高效的信息和效益。
3.5 安全性可行性
人们在使用网络的时候越来越重视信息的安全性,这也促进了加密技术的发展,同时应用加密技术能够有效提升网络信息的安全性。本小红书生活分享平台系统采用了几种加密保护、对本地用户密码采用MD5加密方式、页面发送请求获取数据采用关键部分采用post请求对数据传输的保护机制、避免请求数据暴露在浏览器上面、以及不同用户具有不同权限操作通过这些安全性操作,保证系统的稳定性以及可靠性。
3.6 经济可行性
服务器端的安装简洁明了,客户机无需再装任何软件,通过浏览器就可以直接访问,可以直接接入 Internet ,无论您身在何处只要您可以访问 Internet 都可以使用本系统。本系统对计算机配置的要求不高,企业机房更换下来的低配置电脑都可以完全满足需要、所以在经济上具有完全的可行性。
3.7 法律可行性
本系统是自行开发的小红书生活分享平台系统,是很有实际意义的系统,开发环境软件和使用的数据库都是开源代码, 开发这个系统不同于开发普通的系统软件,不存在侵权等问题,即法律上是可行的。
四、系统设计
4.1 系统模式架构
本系统经典的采用B/S架构(浏览器、服务器),是采用浏览器和服务器架构模式设计的架构,随着Internet技术的兴起,对C/S架构模式的一种改变升级或改进。目前,在该架构的应用下,用户通过WWW.xxx.com浏览器实现数据访问和操作。一小部分事务逻辑在前端页面实现,主要业务事务逻辑在服务器端实现,形成三层结构MVC。B/S架构是Web兴起后主流的网络架构设计模式。Web浏览器是目前最重要的客户端应用软件之一。该模式形成了一个统一的客户端,将系统功能的所有核心部分集中在服务器上实现。简化系统开发和维护。只要客户端安装了浏览器就可以操作,服务器端安装了Oracle、MySQL、Sybase等数据库。浏览器通过Web Server和数据库获取数据。简化客户端计算机的负载,降低系统维护和升级的成本和工作量,降低用户的成本。
4.2系统层次架构
系统根据以上的逻辑结构,分为3层结构。
系统按照处理层次从上至下依次划分为
(1)展现层:
它处理与用户的交互界面、数据传输,信息收集等。
(2)应用层:
它是系统功能逻辑处理层,主要处理展现层发出的请求,并将处理结果返回展现层。
(3)核心层:
它是系统运行核心及应用层的基础,提供应用层权限控制、数据读取等。
4.3系统功能详情设计
系统主要设计采用Java语言开发、采用springboot为后台框架、数据库框架采用mybatis、前端采用jquery、layui框架等
主要模块设计如下:
1.用户模块管理:用户登录、用户注册、用户的查询、添加、删除操作、
2.小红书分享管理:分享列表的展示、添加、修改、删除操作、
3.小红书分享详情管理:小红书笔记详情列表的查看、添加、删除等操作、
4.管理员信息管理:管理员信息的查看、修改、
5.公告信息管理:公告信息的查看、添加、修改、删除操作、
6.用户模块管理:用户列表查询、添加、删除、
7.用户评论模块管理:用户评论查询、添加、删除、
8.注销退出登录管理
4.4主流程描述
5源码架构五、系统实现
5.1 程序主要类
5.1.1用户管理员类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer adminId; // 管理员Id
@Column(length=200)
private String userName; // 用户名
@Column(length=200)
private String password; // 密码
@Column(length=200)
private String trueName; // 真实姓名
@Column(length=200)
private String headPortrait; // 头像
@Column(length=50)
private String sex; // 性别
@Column(length=500)
private String signature; // 备注
@Column(length=200)
private String phone; // 电话
5.1.2小红书信息类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer articleId; // 文章Id
@Column(length = 200)
private String title; // 文章标题
@Lob
@Column(columnDefinition = "TEXT")
private String content; // 文章内容
@Transient
private String contentNoTag; // 内容 无网页标签 Lucene分词用到
private Date publishDate; // 发布日期
@Column(length = 200)
private String author; // 作者
@ManyToOne
@JoinColumn(name = "classifyId")
private Classify classify; // 小红书文章类别
private Integer click; // 点击数
private Integer commentNum; // 评论数
5.1.3小红书信息评论类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer commentId; // 评论Id
@ManyToOne
@JoinColumn(name="articleId")
private Article article; // 文章Id
@ManyToOne
@JoinColumn(name="userId")
private User user; // 用户Id
@Column(length=500)
private String content; // 评论内容
private Date commentDate; // 评论时间
5.14.4公告信息类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer noticeId; // 公告Id
@Column(length=500)
private String content; // 公告内容
private Date publishDate; // 发布日期
@Column(length=200)
private Integer grade; // 等级 0 重要 1 一般
5.1.5小红书评论回复类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer replyId; // 回复Id
@ManyToOne
@JoinColumn(name="commentId")
private Comment comment; // 评论Id
@ManyToOne
@JoinColumn(name="userId")
private User user; // 用户Id
@Column(length=500)
private String content; // 回复内容
private Date replyDate; // 回复时间
5.1.6分类导航类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer classifyId; //类别Id
@NotEmpty(message="文章类别名称不能为空")
@Column(length=200)
private String classifyName; //类别名称
5.1.7用户信息类
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userId; // 用户Id
@Column
private String username;// 用户名
@Column
private String password;// 密码
@Column(length = 200)
private String openId; // openID
@Column(length = 200)
private String nickname; // 昵称
@Column(length = 200)
private String headPortrait; // 头像
@Column(length = 50)
private String sex; // 性别
@Column(nullable = false, columnDefinition = "timestamp", updatable = false)
private Date registrationDate; // 注册日期
private Date latelyLoginTime; // 最近登录时间
private String phone;// 手机号
private java.sql.Date birthday;// 生日
private String articleIds;// 收藏文章id
private String userIds;// 关注的用户id
private String momo;// 备注
5.2系统功能主要设计
5.2.1 用户登录用户输入登录地址:http://localhost:8081/webLogin进入到登录页面、输入账号密码进行登录验证、
<div class="login">
<h1>欢迎登录小红书</h1>
<form id="fm" method="post" action="/checkLogin" class="layui-form" >
<div class="layui-form-item">
<input class="layui-input" id="userName" name="username" placeholder="用户名" lay-verify="required" type="text" autocomplete="off"/>
</div>
<div class="layui-form-item">
<input class="layui-input" id="password" name="password" placeholder="密码" lay-verify="required" type="password" autocomplete="off"/>
</div>
<button class="layui-btn login_btn" lay-submit="" lay-filter="formDemo" >登录</button>
<div th:if="${errorInfo}" style="text-align: center;">
<font color="red" th:text="${errorInfo}"></font>
</div>
</form>
</div>
后台登录代码实现:
验证登录信息是否正确、获取账号密码校验、返回前端对应信息。
/**
* 验证登录
*
* @param user
* @param request
* @return
*/
@RequestMapping("/checkLogin")
public ModelAndView checkLogin(User user, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
User u = userService.findByUsernameAndPassword(user.getUsername(), user.getPassword());
if (u == null) {
mav.addObject("user", user);
mav.addObject("errorInfo", "用户名或者密码错误!");
mav.setViewName("webLogin");
} else {
u.setLatelyLoginTime(new Date());
userService.save(u);
session.setAttribute("user", u);
mav.addObject("username", u.getUsername());
mav.addObject("user", u);
mav.addObject("success", true);
mav.setViewName("/index");
}
return mav;
}
5.2.1 小红书笔记专栏后台代码实现:
/**
* 前台分页查询文章
*
* @param article
* @param publishDates
* @param page
* @param pageSize
* @return
*/
@RequestMapping("/list")
public Map<String, Object> list(Article article,
@RequestParam(value = "publishDates", required = false) String publishDates,
@RequestParam(value = "p", required = false) Integer p,
@RequestParam(value = "page", required = false) Integer page,
@RequestParam(value = "pageSize", required = false) Integer pageSize, HttpServletRequest request) {
Map<String, Object> resultMap = new HashMap<String, Object>();
User user = (User) request.getSession().getAttribute("user");
List<Article> retArt = new ArrayList<>();
String s_bPublishDate = null; // 开始时间
String s_ePublishDate = null; // 结束时间
if (StringUtil.isNotEmpty(publishDates)) {
String[] strs = publishDates.split(" - "); // 拆分时间段
s_bPublishDate = strs[0];
s_ePublishDate = strs[1];
}
if (p != null && p == 1) {
User u = userService.findById(user.getUserId());
article.setUserId(u.getUserId());
} else if (p != null && p == 2) {
User u = userService.findById(user.getUserId());
String artIds = u.getArticleIds();
List<String> result = new ArrayList<>();
if (StringUtils.isNotBlank(artIds)) {
result = Arrays.asList(StringUtils.split(artIds, ","));
}
List<Integer> retIds = new ArrayList<>();
for (String temp : result) {
retIds.add(Integer.valueOf(temp).intValue());
}
retArt = articleService.findByListId(retIds);
}
Long total = articleService.getCount(article, s_bPublishDate, s_ePublishDate);
if (p != null && p == 2) {
total = (long) retArt.size();
}
int totalPage = (int) (total % pageSize == 0 ? total / pageSize : total / pageSize + 1); // 总页数
resultMap.put("totalPage", totalPage);
resultMap.put("errorNo", 0);
if (p != null && p == 2) {
resultMap.put("data", retArt);
} else {
resultMap.put("data", articleService.list(article, s_bPublishDate, s_ePublishDate, page - 1, pageSize));
}
resultMap.put("total", total);
return resultMap;
}
5.2.1 小红书笔记详情后台主要代码实现:
/**
* 根据ID查找文章
*
* @param articleId
* @return
*/
@RequestMapping("/findById")
public Map<String, Object> findById(Integer articleId) {
Map<String, Object> resultMap = new HashMap<String, Object>();
Map<String, Object> trmpMap = new HashMap<String, Object>();
Article article = articleService.findById(articleId);
trmpMap.put("articleId", article.getArticleId());
trmpMap.put("title", article.getTitle());
trmpMap.put("content", article.getContent());
trmpMap.put("publishDate", article.getPublishDate());
trmpMap.put("author", article.getAuthor());
trmpMap.put("classify", article.getClassify().getClassifyId());
trmpMap.put("click", article.getClick());
trmpMap.put("commentNum", article.getCommentNum());
trmpMap.put("isTop", article.getIsTop());
trmpMap.put("isOriginal", article.getIsOriginal());
trmpMap.put("imageName", article.getImageName());
resultMap.put("errorNo", 0);
resultMap.put("data", trmpMap);
return resultMap;
}
5.2.1 小红书笔记添加点击笔记写笔记发表自己的小红书分享信息、输入文章标题、作者、选择上传封面图片以及主要内容等完成添加:
前端主要代码样式:
<label class="layui-form-label">文章标题</label>
<div class="layui-input-block">
<input type="text" name="title" required="" lay-verType="tips" lay-verify="required" th:value="${article.title}" autocomplete="off" class="layui-input"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">作者</label>
<div class="layui-input-block">
<input type="text" name="author" required="" lay-verType="tips" lay-verify="required" th:value="${article.author}" autocomplete="off" class="layui-input"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">笔记类别</label>
<div class="layui-input-block">
<select name="classify" lay-verify="required" lay-verType="tips" class="fsSelect" addNull="1" dict="classify">
<option th:each="classify:${list}" th:value="${classify.classifyId}" th:text="${classify.classifyName}" th:selected="${article.classify.classifyName==classify.classifyName}"></option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">笔记属性</label>
<div class="layui-input-block">
<input type="checkbox" name="isTop" title="置顶" value="1" >
<input type="checkbox" name="isOriginal" title="原创" value="1">
后台代码实现:
/**
* 添加或者修改文章
*
* @param article
* @return
*/
@RequestMapping("/save")
public Map<String, Object> save(Article article, @RequestParam(value = "_mode", required = false) String mode)
throws Exception {
Map<String, Object> resultMap = new HashMap<String, Object>();
if (article.getIsTop() == null) {
article.setIsTop(0);
}
if (article.getIsOriginal() == null) {
article.setIsOriginal(0);
}
if (article.getClick() == null) {
article.setClick(0);
}
if (article.getCommentNum() == null) {
article.setCommentNum(0);
}
if (StringUtil.isEmpty(article.getImageName())) {
article.setImageName("jzytp.JPG");
}
article.setPublishDate(new Date());
article.setContentNoTag(StringUtil.Html2Text(article.getContent()));
articleService.save(article);
if ("add".equals(mode)) {
articleIndex.addIndex(article);
} else if ("edit".equals(mode)) {
articleIndex.updateIndex(article);
}
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
startupRunner.loadData();
return resultMap;
}
5.2.1 小红书笔记收藏列表后台代码实现:
根据用户id获取收藏信息
/**
* 查看个人收藏夹
*
* @return
*/
@RequestMapping("viewCollection")
public ModelAndView viewCollection(HttpServletRequest request, HttpSession session) {
User user = (User) request.getSession().getAttribute("user");
ModelAndView mav = new ModelAndView();
User u = userService.findById(user.getUserId());
String artIds = u.getArticleIds();
List<String> result = new ArrayList<>();
if (StringUtils.isNotBlank(artIds)) {
result = Arrays.asList(StringUtils.split(artIds, ","));
}
List<Integer> retIds = new ArrayList<>();
for (String temp : result) {
retIds.add(Integer.valueOf(temp).intValue());
}
List<Article> retArt = articleService.findByListId(retIds);
session.setAttribute("noticeList", noticeService.list(0, 5));
mav.addObject("retArt", retArt);
mav.addObject("user", u);
mav.setViewName("/viewCollection");
return mav;
}
5.2.1 小红书笔记添加收藏添加收藏
/**
* 收藏
* @param request
* @return
*/
@RequestMapping("/addCollection")
public ModelAndView addCollection(HttpServletRequest request, String artId) {
ModelAndView mav = new ModelAndView();
User user = (User) request.getSession().getAttribute("user");// 当前登录用户
String artIds = user.getArticleIds();
List<String> tempList= Arrays.asList(artIds.split(","));
List<String> lineIdList = new ArrayList<>(tempList);
lineIdList.add(artId);
String ret = StringUtils.join(lineIdList, ",");
user.setArticleIds(ret);
userService.save(user);
mav.setViewName("redirect:/viewCollection");
return mav;
}
5.2.1 小红书笔记评论/**
* 添加评论
* @Title: add
* @param comment 评论实体
* @return 参数说明
* @return Map<String,Object> 返回类型
* @throws
*/
@RequestMapping("/add")
public Map<String, Object> add(Comment comment, HttpSession session) {
User currentUser = (User) session.getAttribute("user");
Map<String, Object> resultMap = new HashMap<String, Object>();
comment.setCommentDate(new Date());
comment.setUser(currentUser);
commentService.add(comment);
if (comment.getArticle() != null) {
articleService.increaseComment(comment.getArticle().getArticleId());
}
resultMap.put("comment", comment);
resultMap.put("success", true);
return resultMap;
}
5.2.1 管理员删除文章/**
* 批量删除文章
*
* @param ids
* @return
*/
@RequestMapping("/delete")
public Map<String, Object> delete(@RequestParam(value = "articleId") String ids) throws Exception {
Map<String, Object> resultMap = new HashMap<String, Object>();
String[] idsStr = ids.split(",");
for (int i = 0; i < idsStr.length; i++) {
articleService.delete(Integer.parseInt(idsStr[i]));
articleIndex.deleteIndex(idsStr[i]);
}
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
startupRunner.loadData();
return resultMap;
}
5.2.1 管理员删除用户前端代码样式:
<div class="layui-col-md12">
<table id="fsDatagrid" lay-filter="fsDatagrid" class="fsDatagrid" isLoad="1" url="/admin/user/list" isPage="1" defaultForm="query_form" height="full-135"></table>
<div class="fsDatagridCols">
<p type="numbers" title="#"/>
<p checkbox="true"/>
<p field="userId" title="用户ID" sort="true" />
<p field="user" title="用户" sort="true" templet="#userTpl" />
<p field="sex" title="性别" />
<p field="latelyLoginTime" title="最近登录" />
<p field="registrationDate" title="注册时间" sort="true" />
<p fixed="right" align="center" toolbar="#barDemo" title="操作"/>
</div>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="submit" url="/admin/user/delete" isConfirm="1" confirmMsg="是否确定删除当前记录?" inputs="userId:">删除</a>
</script>
<script type="text/html" id="userTpl">
<img src="{{d.headPortrait}}" class="layui-nav-img" />{{d.nickname}}
</script>
后台代码
@RequestMapping("/delete")
public Map<String, Object> delete(Integer userId) {
Map<String, Object> resultMap = new HashMap<String, Object>();
userService.delete(userId);
resultMap.put("errorNo", 0);
return resultMap;
}
5.2.1 管理员删除评论回复前端代码样式布局
<div class="fsDatagridCols">
<p type="numbers" title="#"/>
<p field="replyId" align="center" title="回复ID" sort="true"/>
<p field="content" align="center" title="回复内容"/>
<p field="user" align="center" title="评论用户" sort="true" templet="#userTpl"/>
<p field="replyDate" align="center" title="评论时间" sort="true"/>
<p fixed="right" align="center" toolbar="#barDemo2" title="操作" />
</div>
<script type="text/html" id="userTpl">
<img src="{{d.user.headPortrait}}" class="layui-nav-img" />{{d.user.nickname}}
</script>
<script type="text/html" id="articleTpl">
{{# if(d.article == null){ }}
<span class="layui-badge layui-bg-red" style="undefined">留言</span>
{{# } else if(d.article != null){ }}
{{d.article.title}}
{{# } }}
</script>
<script type="text/html" id="barDemo2">
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="submit" isConfirm="1" url="/admin/reply/delete" inputs="replyId:">删除</a>
</script>
后台代码:
/**
* 删除评论
* @param ids
* @return
*/
@RequestMapping("/delete")
public Map<String, Object> delete(@RequestParam(value = "commentId") String ids) {
String[] idsStr = ids.split(","); // 拆分ids字符串
Map<String, Object> resultMap = new HashMap<String, Object>();
for (int i = 0; i < idsStr.length; i++) {
Integer articleId = commentService.getArticleId(Integer.parseInt(idsStr[i]));
commentService.delete(Integer.parseInt(idsStr[i]));
if (articleId != null) {
articleService.reduceComment(articleId);
}
}
resultMap.put("errorNo", 0);
resultMap.put("data", 1);
return resultMap;
数据库设计6.1数据库表设计
数据库采用mysql5版本、满足数据库设计三范式。
编码采用utf8 -- UTF-8 Unicode
排序规则采用utf8_general_ci
6.2数据库三范式要求:
一、第一范式
1NF是对属性的原子性,要求属性具有原子性,不可再分解;
二、第二范式
2NF是对记录的唯一性,要求记录有唯一标识,即实体的唯一性,即不存在部分依赖;
三、第三范式
3NF是对字段的冗余性,要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;
6.3数据库表ER图
6.4用户表设计
主要字段有:用户名、密码、邮箱、头像、个人信息、昵称、关注ids、手机号等信息
6.6管理员个人信息表设计
主要字段有:id、头像图片、标题、姓名、地址等字段
CREATE TABLE `NewTable` (
`admin_id` int(11) NOT NULL AUTO_INCREMENT ,
`head_portrait` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`password` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`phone` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`sex` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`signature` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`true_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`user_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`admin_id`)
)
6.7小红书分享类型表设计
主要字段有:id、小红书分类名称
CREATE TABLE `NewTable` (
`classify_id` int(11) NOT NULL AUTO_INCREMENT ,
`classify_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL ,
PRIMARY KEY (`classify_id`)
)
6.8小红书分享评论表设计
主要字段有:id、评论时间、评论内容、评论人等
CREATE TABLE `NewTable` (
`comment_id` int(11) NOT NULL AUTO_INCREMENT ,
`comment_date` datetime NULL DEFAULT NULL ,
`content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`article_id` int(11) NULL DEFAULT NULL ,
`user_id` int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`comment_id`),
FOREIGN KEY (`article_id`) REFERENCES `t_article` (`article_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
FOREIGN KEY (`user_id`) REFERENCES `t_user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
INDEX `FKlsvvc2ob8lxg2m9qqry15ru0y` (`article_id`) USING BTREE ,
INDEX `FKtamaoacctq4qpko6bvtv0ke1p` (`user_id`) USING BTREE
)
6.9小红书分享公告表设计
主要字段有:id、公告内容、内容级别、时间等字段
CREATE TABLE `NewTable` (
`notice_id` int(11) NOT NULL AUTO_INCREMENT ,
`grade` int(11) NULL DEFAULT NULL ,
`content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`publish_date` datetime NULL DEFAULT NULL ,
PRIMARY KEY (`notice_id`)
)
6.10小红书分享回复表设计
CREATE TABLE `NewTable` (
`reply_id` int(11) NOT NULL AUTO_INCREMENT ,
`content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`reply_date` datetime NULL DEFAULT NULL ,
`comment_id` int(11) NULL DEFAULT NULL ,
`user_id` int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`reply_id`),
FOREIGN KEY (`comment_id`) REFERENCES `t_comment` (`comment_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
FOREIGN KEY (`user_id`) REFERENCES `t_user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
INDEX `FKk4ydp71wampdbnguly8iks4rf` (`comment_id`) USING BTREE ,
INDEX `FKslt6r79iw1p9cbxns09erjv6v` (`user_id`) USING BTREE
)
6.9小红书信息内容表设计
CREATE TABLE `NewTable` (
`article_id` int(11) NOT NULL AUTO_INCREMENT ,
`author` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL ,
`click` int(11) NULL DEFAULT NULL ,
`comment_num` int(11) NULL DEFAULT NULL ,
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL ,
`image_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
`is_original` int(11) NULL DEFAULT NULL ,
`is_top` int(11) NULL DEFAULT NULL ,
`publish_date` datetime NULL DEFAULT NULL ,
`title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL ,
`classify_id` int(11) NULL DEFAULT NULL ,
`user_id` int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`article_id`),
FOREIGN KEY (`classify_id`) REFERENCES `t_classify` (`classify_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
INDEX `FKo4fros4yfq1m9ay7sgtlcvbc4` (`classify_id`) USING BTREE
)
七、开发心得体会
经过近期对 java 面向对象程序设计、前端知识以及JAVA 框架的掌握和学习,以及这段时间本教育教学系统的开发,让我更加了解到 java 学习的重要性。在开发这个系统是哪个,我完成了多个实验以及小红书信息分享平台的功能测试,阶段的系统开发学习当中,我从认识到熟悉java,而后到能够自主运用相关技术,我发现了它确实有很多方便之处,比如java集抽象性和封装性以及继承性和多态性于一体,实现了对代码重用和代码扩充功能,提高了整体软件开发的速度和效率。比如管理员添加用户的时候报java.lang.NullPointException、解决的方法:查看控制台打印信息、发现添加的时候未填写相关信息、报java.lang.NullPointException、通过断电调试发现用户信息为空的数据项、在前端保存的时候必须填写用户完整相关信息或者数据库设置字段可以为空都可以解决、 我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术。
八、测试实例
测试一:
方案
登陆时,用户名或密码有一项为空或填写错误,系统是否出现预先设定的操作提示
预期效果 输入错误无法登陆
具体操作 用户名、密码、任意一项为空或者填写有误
结果 出现登录失败
结论 要求必须填写正确的用户名和密码,才能进入管理页面,测试成功
当用户名或密码输入错误或为空时提交界面
如图 所示。
测试二:
方案
修改小红书分享内容信息﹑返回小红书分享内容界面,看其是否更新成功
预期效果 修改过后能及时更新内容
具体操作 通过后台管理修改小红书分享内容,看其是否修改成功
结果 小红书分享内容更新为修改后的信息
结论 修改小红书分享内容功能正常,测试成功
调试时在小红书分享内容修改界面能修改小红书分享内容信息,
在小红书分享内容查询界面能及时更新显示修改后的信息。
测试三:
方案
管理员删除一注册用户后,并让其登陆,看是否登陆成功
预期效果 该用户不能再进行登陆
具体操作 管理员删除一会员表中的用户后,该用户在前台登陆
结果 该用户无法登陆
结论 用户数据删除功正常,测试成功
九、参考献文
[1] 王博轩.生活分享网站系统设计与规划[J].2015-06-21
[2] kymymooc.信息化时代的好处?[Z]. 2013.10.21.
[3]李东.基于 javaweb的信息化系统研究与设计[硕士学位论文 ][D].北京邮电大学,2013.5.
[4]徐远棋,曾海.网上共享平台管理系统的设计[J].微型电脑应用,2013(10):42-44.
[5] 王海.基于SSM框架的用户信息设计与实现 [J].信息通信,2013(10):98-99.
[6] 王靖华.个人博客平台设计 [J]. 桂林航天工业学院学 报,2014(02):104-108.
[7] 于绍同.二三线城市网上购物信息系统的设计 [J]. 魅力中国, 2014(17):183-185.
[8]李明明. 管理系统的设计与实现[D].西安电子科技大学,2016.
[9]袁玖根,沈晓军,邢若南.基于Java平台的购物平台管理系统的设计与实现[J].考试周刊,2016(19):144-145.
[10]蒋俊.基于UML的面向对象建模技术的研究[J].信息与电脑(理论版),2010,(4).
核心代码展示
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
userService.updateById(user);
return R.ok();
}
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
项目推荐
【计算机毕业设计】各项技术选题汇总
【计算机毕业设计】基于Springboot的网上购物商城销售系统
【计算机毕业设计】开题报告模板2
【计算机毕业设计】任务书案例2
【网站项目】基于springboot的在线考试系统
【网站项目】基于springboot的4S店车辆管理系统
【软件设计】基于python的高校资产管理系统
【网站项目】python009基于推荐算法的电影推荐系统
【网站项目】基于Springcloud的分布式架构网上商城
⬇️文章末尾可以获取联系方式,需要源码,高清图片,演示视频可以联系(不开源)⬇️
⚡感兴趣大家可以点点关注收藏,后续更新更多项目资料。⚡
网址:【网站项目】java智慧生活分享平台初步设计和实现 https://www.yuejiaxmz.com/news/view/105976
相关内容
springboot/java/php/node/python生活旅行分享网站的设计与实现【计算机毕设】java计算机毕业设计宠物喂养资讯分享平台的设计与实现(开题+程序+论文)
java/php/node.js/python智慧校园生活助手APP【2024年毕设】
基于Web美食网站设计(源码+开题)
【开题报告】基于SpringBoot的美食制作学习网站的设计设计与实现
java计算机毕业设计大学生运动健身系统的设计与实现(开题+程序+论文)
springboot毕设 萌宠社交分享系统的设计与实现 程序+论文
【毕业设计】基于Java的个人记账系统的设计与实现
基于微信小程序的智慧校园平台的设计与实现(源码+lw+部署文档+讲解等)
“谷屋”家常菜美食网站设计与实现—谷屋(需求文档)