基于SSM的个人博客系统

实现内容

本系统为用户提供实现了以下功能:

1.登录功能:

系统为单用户系统,为用户分配了用户名和密码。用户必须先登录,进入操作界面。用户输入ID和密码,通过服务器验证方可运行,否则显示消息提示。

2.网站前台功能:

浏览:博主个人信息、文章; 
发表:留言,评论

3.网站后台功能: 

用户管理模块:实现用户信息及密码的修改 
博文的分类与管理模块:实现分类的增、删、改 
评论管理模块:实现删除评论功能 
留言管理模块:实现删除、回复评论功能 
系统管理模块:实现博客版面的定义与管理 博客的数据统计
主要技术指标与技术参数:
系统的研究使用B/S的体系结构,设计与开发使用JSP开发工具,数据库的实现用MySQL,Web服务器为Tomcat。研究过程采用传统的瀑布模型,以项目的阶段评审和文档控制为方法有效地对整个开发过程进行指导。
日程安排:

第一章 绪论

个人博客是人们在网络上展现自己个性的一种方式。自从互联网走进千家万户,大受人们喜爱。大家都喜欢通过网络来获取各种各样的信息。而在网络上,你也可以畅所欲言,而个人博客也是其中一种。在个人博客上,你可以发表自己的心路旅程,发表自己的工作经验,发表技术博客等等。
首先介绍一下什么是博客,它也被称为网络日志。博客其实就是一个网页,它是由各种各样的帖子组成。这些帖子可以是你某一天观看电影的感慨,也可以是阅读到某篇书籍的读后感,更可以是你在自己技术领域的心得。它就是一个网页,但是大家可以在上面用文字或者图片分享自己的心情等,它提供的内容可以用来进行交流。
博客最开始的时候是论坛下的一个子系统。最早参与博客的都是一些信息技术的一些专家和学者,讨论的都是专业技能。直到发现了博客的商业价值,一些开放了自发式的博客,大家也都发现了博客分享和讨论的趣味。越来越多的人参与进来,博客也越来越风靡盛行。
博客与论坛有许多的相似之处,许多朋友都分不清他们两的区别。首先,论坛和博客都可以进行交友和交流等。而其中论坛注重的是集体讨论,博客注重的是个人分享。它们两者的核心点就有着很大的区别。论坛的创建的用户是基于为众人服务,而博客是为了博主服务。它们的不同点还有在形式上的不同。博客是独立存在的。而论坛并不是。总结起来,论坛是多人一起交流的地方,互动性强,社交性强。博客是发表个人文章的地方,虽然也可以交流,但更多的还是自娱自乐。

第二章 相关技术介绍

2.1 B/S 简介
软件系统体系结构分为两种,是客户机/服务器结构和浏览器/服务器结构。其中的浏览器/服务器结构就是B/S结构。
C/s模式:是客户端/服务器(Client/Server)模式,主要指的是传统的桌面级的应用程序。比如我们经常用的信息管理系统。
B/S模式:是浏览器/服务器(Browser/Server)模式,主要指的是web应用程序,就像电子商务网站,如淘宝,阿里巴巴等。相对于C/S模式的应用程序来说,B/S模式最大的优势在于客户端只要有浏览器就可以运行。而C/S模式的应用程序需要在客户端进行安装,而且升级也不太方便。而B/S模式的应用程序对于客户端来说,永远都是最新版本的。
2.2 JAVA 简介
Java的前身是Oak,sun公司在1995年申请注册商标的时候,发现已经Oak已经被注册了,最终才另外取了一个名字叫JAVA(其中还有一个趣味故事,有兴趣的可以去查找看看),
要使用Java首先要到官网甲骨文官网上下载Java的软件开发工具包,其中分为windows版本和Linux版本,我使用的是Windows的。而在Windows上要使用Java,要设置JAVA的环境变量。设置环境变量的步骤如下:第一步,点击计算机属性中的高级系统设置,点击系统属性高级的环境变量。第二步,设置一个系统变量为JAVA_HOME,其中的值是你的Java安装目录。它的作用还在于一些使用Java的工具时候需要用到这个变量,否则打不开,例如eclipse.第三步,设置一个classpath系统变量,它的作用是在你写Java源文件导包的时候去查找的类路径。第三步,在Windows自有的系统变量path中加入Java安装目录下的bin路径。既可以写成%JAVA_HOME%/bin;这就将Java的运行环境搭配好了。
介绍一下Java的文件目录。首先最重要的bin目录下面包含的是一些JDK包含的一些开发工具执行文件,例如像编译器javac.exe.运行Java的java.exe等等都在这个目录下面。其中Java启动的虚拟机在Java目录的jre目录中。

2.3 JSP 简介
Jsp是服务端技术,与微软的ASP一样,是一种动态网页的技术,不过jsp是使用Java语言技术开发的技术,jsp使用的时候会被jsp引擎解析成Servlet代码,而jsp虽然可以写Java代码,但是jsp主要的作用是为了展示视图,所以jsp+javabean 可以很好的解决代码混淆问题,然后将视图与逻辑分离。

2.4 SpringMVC简介
SpringMVC是一种现今十分流行的WEB框架,它的作用是使用了MVC思想设计模式对web层进行解耦。是用来接受请求和处理请求的。
SpringMVC处理请求的流程是如下:首先用户从浏览器中发送请求;之后它SpringMVC的核心组件DispacherServlet 前端控制器根据请求信息也即是url的信息来选择一个页面控制器进行处理;页面控制器接受得到委托之后,它首先会收集和绑定参数到某个对象中,然后调用业务对象进行业务逻辑代码处理,处理结束后返回ModelAndView。前端控制器根据视图的名字渲染相应的视图然后将响应传到前台去。

第三章 可行性分析

3.1 技术可行性分析

本系统管理项目使用的是maven,数据库连接使用的是mybatis,数据库使用的是mysql,接受浏览器请求并处理的是使用springmvc,他们都是经过市场检验的,都已经十分成熟了,在安全性、可用性、可靠性等方面都是可以值得肯定的

3.2 经济可行性分析

本系统使用的技术框架都是开源框架,比如spring,springmvc,mybatis.而使用的数据库也是开源免费的mysql,使用的开发软件eclipse也是免费的,人员就本人一个也是免费的。所以在经济上消费很低,在经济可行性分析中是可以确定可行的。

3.3 操作可行性

个人博客系统开发结合个人需求而开发,能解决用户可以通过互联网来展现自己等诸多问题,因此该项目符合开发条件,具有成熟的基础,并且,从前面的分析来看,技术上的操作是十分成熟并且开源免费广为人们使用,从系统的操作上是可行的。

第四章 系统设计

4.1 系统总流程

在这里插入图片描述

图4-1 系统流程图

本个人博客系统分为两个角色,分别是博主和游客。只有博主才能登录后台管理系统,进行博客发表。
1.首先要通过用户名和密码登录后台管理系统,才能发布博客。
2.博主和游客都可以阅读博客。
3.博主和游客都可以发表评论。
4.经过博主的评论审核,评论才可以发布。
5.此时博主和游客才可以观看到评论。

4.2 博主用例

在这里插入图片描述

图4-2博主用例图

博主的功能简介:
1.登入功能
登入后台管理系统:首先进入登录页面,需要输入账号和密码。它会使用Shiro进行安全管理,对前台输入的密码进行加密运算,然后与数据库中的进行比较。成功后才能登入后台系统。
2.博客管理功能
博客管理功能分为写博客和博客信息管理。写博客是博主用来发表编写博客的,需要博客标题,然后选择博客类型,最后将博客内容填入百度的富文本编辑器中,点击发布博客按钮即可发布博客。
3.博客类别管理系统
博主类别管理系统可以添加,修改和删除博客类型名称和排序序号。将会显示到首页的按日志类别区域。游客可以从这里查找相关的感兴趣的博客内容。
4.评论管理功能
评论管理功能分为评论审核和评论信息管理两部分。评论审核是当有游客或自己发表了评论之后,博主需要在后台管理系统中审核评论。若想将此评论显示在页面上则点击审核通过,否则点击审核不通过。
5.个人信息管理功能
在这里可以修改博主的个人信息,可以修改昵称,个性签名,可以添加个人头像,修改个人简介。
6.系统管理功能
这里的功能有友情链接管理,修改密码,刷新系统缓存和安全退出。
友情链接管理可以添加,修改,删除友情链接网址。

4.3 游客用例

在这里插入图片描述

图4-3游客用例图

4.4 系统类

在这里插入图片描述

图4-4博客类图

4.5 E-R图

在这里插入图片描述

图4-5博客E-R图

博客类的关系模式如下(加下滑线的是主键):
博客(编号,博客标题,摘要,发布日期,查看次数,博客类型,关键字,博客内容)。

在这里插入图片描述

图4-6博主E-R图

博主类的关系模式如下(加下滑线的是主键):
博主实体(编号,用户名,密码,昵称,个性签名,个人简介,博主头像)。

在这里插入图片描述

图4-7博客类型E-R图

博客类型类的关系模式如下(加下滑线的是主键):
博客类型实体(编号,博客类型名称,数量,排序)。

在这里插入图片描述

图4-8评论E-R图

评论类的关系模式如下(加下滑线的是主键):
评论实体(编号,用户IP,评论内容,被评论的博客,评论日期,审核状态)。

在这里插入图片描述

图4-9友情链接E-R图

友情链接类的关系模式如下(加下滑线的是主键):
友情链接实体(编号,链接名称,链接地址,排序序号)。

4.6 系统表设计

系统总共有五张表,分别是博客表,博主表,博客类型表,评论表,友情链接表。如下所示:

t_blog表

字段名 数据类型 允许非空
id int(11) no
title varchar(200) yes
summary varchar(400) yes
releaseDate datetime yes
clickHit int(11) yes
replyHit int(11) yes
content text yes
typeId int(11) yes

t_blogger表

字段名 数据类型 允许非空
id int(11) no
userName varchar(50) yes
password varchar(100) yes
profile text yes
nickName varchar(50) yes
sign varchar(100) yes
imageName varchar(100) yes

t_blogtye表

字段名 数据类型 允许非空
id int(11) no
typeName varchar(30) yes
orderNo int(11) yes

t_comment表

字段名 数据类型 允许非空
id int(11) no
userIp varchar(50) yes
blogId int(11) yes
content varchar(1000) yes
commentDate datetime yes
state int(11) yes

t_link表

字段名 数据类型 允许非空
id int(11) no
linkName varchar(100) yes
linkUrl varchar(200) yes
orderNo int(11) yes

第五章 系统实现

5.1 登录模块

5.1.1 博主登录
登入系统后台管理登录页面,博主首先输入用户名和密码,它回去调用Controller层代码,然后进入业务层调用数据库的一些操作确认是否用户名密码正确,然后返回到前台就会登进去。
登录首页模块主要代码:
JSP代码:
使用form表单提交到后台进行数据验证:

<form action="${pageContext.request.contextPath}/blogger/login.do" method="post" onsubmit="return checkForm()"><DIV style="width: 165px; height: 96px; position: absolute;"><DIV class="tou"></DIV><DIV class="initial_left_hand" id="left_hand"></DIV><DIV class="initial_right_hand" id="right_hand"></DIV></DIV><P style="padding: 30px 0px 10px; position: relative;"><SPAN class="u_logo"></SPAN><INPUT id="userName" name="userName" class="ipt" type="text" placeholder="请输入用户名" value="${blogger.userName }"> </P><P style="position: relative;"><SPAN class="p_logo"></SPAN>         <INPUT id="password" name="password" class="ipt"  type="password" placeholder="请输入密码" value="${blogger.password }">   </P><DIV style="height: 50px; line-height: 50px; margin-top: 30px; border-top-color: rgb(231, 231, 231); border-top-width: 1px; border-top-style: solid;"><P style="margin: 0px 35px 20px 45px;"><SPAN style="float: left;"><a href="${pageContext.request.contextPath}/index.html">Java个人博客系统</a></SPAN> <span><font color="red" id="error">${errorInfo }</font></span><SPAN style="float: right;"> <input type="submit" value="登录"/> </SPAN>         </P></DIV></DIV>
</form>
使用javascrip对输入的博主用户名和密码进行校验,若用户名或密码为空,提示错误信息来提醒用户, 用户再去查找错误。
function checkForm(){var userName=$("#userName").val();var password=$("#password").val();if(userName==null||userName==""){$("#error").html("用户名不能为空!");return false;}if(password==null||password==""){$("#error").html("密码不能为空!");return false;}return true;
}
java代码:使用MVC框架,对后台数据和前台form表单提交的数据进行交互                              
@Controller
@RequestMapping("/blogger")
public class BloggerController {@Resourceprivate BloggerService bloggerService;/*** 用户登录* @param blogger* @param request* @return*/@RequestMapping("/login")public String login(Blogger blogger,HttpServletRequest request){Subject subject=SecurityUtils.getSubject();UsernamePasswordToken token=new UsernamePasswordToken(blogger.getUserName(), CryptographyUtil.md5(blogger.getPassword(), "java1234"));try{subject.login(token); // 登录验证return "redirect:/admin/main.jsp";}catch(Exception e){e.printStackTrace();request.setAttribute("blogger", blogger);request.setAttribute("errorInfo", "用户名或密码错误!");return "login";}

5.2 博客管理模块:

博客管理管理模块为个人博客系统的用户(即博主)提供写博客和博客信息管理功能。在个人博客系统的首页上的博客就是从这里进行发布的。博客管理包含
新建:対博客的新建,博客可以含有图片,视频,音频附件。新建博客必须要有博客标题,博客类别自己选择所需要的博客类别,然后填入博客内容,最后发表文章。
搜索:在博客信息管理中,可以输入自己想要搜索的博客信息,系统会自动筛选出适合的博客展现给用户。
修改: 点击你想要修改的博客,系统会弹出修改博客页面,之后博客的标题,所属的博客类型,博客内容等都可以修改。
删除: 该系统支持单个删除和批量删除。
5.2.1 博客查询
在这里插入图片描述

图4-1查询博客时序图

步骤 系统行为描述
1 博客信息管理页面点查询按钮
2 页面表单提交调用控制层控制层的list方法
3 控制层list方法中调用服务层的list方法
4 服务层调用持久层list方法返回博客集合

按条件查询博客,调用控制层的list方法,在其中调用服务层list方法,返回 blog集合:List list。获得集合后使用方法把查询到符要求的数据传到前台,在前台对数据进行处理。中心代码如下:

	@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,Blog s_blog,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("title", StringUtil.formatLike(s_blog.getTitle()));map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<Blog> blogList=blogService.list(map);Long total=blogService.getTotal(map);JSONObject result=new JSONObject();JsonConfig jsonConfig=new JsonConfig();jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd"));JSONArray jsonArray=JSONArray.fromObject(blogList,jsonConfig);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}

5.2.2 博客新建

在这里插入图片描述

图4-2 新建博客时序图

步骤 系统行为描述
1 博主在后台页面填写博客信息点击发布博客按钮
2 Jsp表单提交调用控制层controller的save方法
3 控制层save方法中调用service层的add方法
4 调用blogMapper持久层保存博客信息
5 添加索引

点击写博客进入博客发布界面,填写博客内容信息,点击发布博客,提交到控制层的save方法,传入参数:Blog,该参数包含了该博客所有信息内容,在提交的时候使用javascript对博客的内容进行校验。校验成功后便会调用控制层的方法,在控制层的save()方法中调用服务层的add()方法,对该博客进行保存,持久到数据库中。部分代码如下

@RequestMapping("/save")public String save(Blog blog,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(blog.getId()==null){resultTotal=blogService.add(blog);blogIndex.addIndex(blog); // 添加博客索引}else{resultTotal=blogService.update(blog);blogIndex.updateIndex(blog); // 更新博客索引}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}

5.2.3 博客修改

在这里插入图片描述

图4-3 修改博客时序图

步骤 系统行为描述
1 博主在博客信息管理页面选择需要修改的博客打开博客修改页面
2 Jsp表单提交调用控制层controller的save方法
3 控制层save方法中调用service层的update方法
4 调用blogMapper持久层保存修改后的博客信息
5 更新索引

进入博客修改页面,修改博客内容信息,点击发布博客,提交到控制层的save方法,传入参数:Blog,该参数包含了修改后的博客所有信息内容,在提交的时候使用javascript对博客的内容进行校验。校验成功后便会调用控制层的方法,在控制层的save()方法中调用服务层的update()方法,对该博客进行保存,持久到数据库中。部分代码如下

@RequestMapping("/save")public String save(Blog blog,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(blog.getId()==null){resultTotal=blogService.add(blog);blogIndex.addIndex(blog); // 添加博客索引}else{resultTotal=blogService.update(blog);blogIndex.updateIndex(blog); // 更新博客索引}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}

5.2.4 博客删除

在这里插入图片描述

图4-4 删除博客时序图

步骤 系统行为描述
1 博主在博客信息管理页面选择需要删除的博客(可以选择多条)
2 调用控制层controller的delete方法
3 控制层delete方法中调用service层的delete方法
4 调用blogMapper持久层将对应的博客信息删除
5 删除对应博客的索引

在博客管理页面选择需要删除的博客,点击删除按钮,提交到控制层的delete方法,传入参数:需要删除博客的id,调用控制层的方法,在控制层的delete()方法中调用服务层的delete()方法,对该博客或多个博客进行删除,持久到数据库中。部分代码如下:

@RequestMapping("/delete")public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response)throws Exception{String []idsStr=ids.split(",");for(int i=0;i<idsStr.length;i++){blogService.delete(Integer.parseInt(idsStr[i]));blogIndex.deleteIndex(idsStr[i]); // 删除对应博客的索引}JSONObject result=new JSONObject();result.put("success", true);ResponseUtil.write(response, result);return null;}

5.3 博客类别管理模块

5.3.1 添加博客类别
在这里插入图片描述

图4-5 添加博客类型时序图

步骤 系统行为描述
1 博主在博客类别信息管理页面点击添加按钮打开添加博客类别弹窗
2 调用blogType控制层controller的save方法
3 控制层save方法中调用service层的add方法
4 调用blogTypeMapper持久层将对应的博客类别信息添加
5 返回成功添加信息

在博客类别管理页面打开添加博客类别弹窗,填写博客类别名称和排序,点击保存按钮,提交到控制层的save方法,传入参数:需要添加的博客类型blogType,调用控制层的方法,在控制层的save()方法中调用服务层的add()方法,添加博客类别的相关信息,持久到数据库中。部分代码如下:

@RequestMapping("/save")public String save(BlogType blogType,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(blogType.getId()==null){resultTotal=blogTypeService.add(blogType);}else{resultTotal=blogTypeService.update(blogType);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}

5.3.2 修改博客类别
在这里插入图片描述

图4-6 修改博客类型时序图

步骤 系统行为描述
1 博主在博客类别信息管理页面选择要修改的博客类别点击修改按钮弹出弹窗
2 调用blogType控制层controller的save方法
3 控制层save方法中调用service层的update方法
4 调用blogTypeMapper持久层将对应的博客类别信息修改
5 返回成功系修改信息

在博客类别管理页面先选择要修改的数据,点击修改按钮,打开修改博客类别弹窗,填写修改后博客类别名称和排序,点击保存按钮,提交到控制层的save方法,传入参数:需要添加的博客类型blogType,调用控制层的方法,在控制层的save()方法中调用服务层的update()方法,修改博客类别的相关信息,持久到数据库中。部分代码如下:

@RequestMapping("/save")public String save(BlogType blogType,HttpServletResponse response)throws Exception{int resultTotal=0; // 操作的记录条数if(blogType.getId()==null){resultTotal=blogTypeService.add(blogType);}else{resultTotal=blogTypeService.update(blogType);}JSONObject result=new JSONObject();if(resultTotal>0){result.put("success", true);}else{result.put("success", false);}ResponseUtil.write(response, result);return null;}

5.3.3 删除博客类别
在这里插入图片描述

图4-7 删除博客类型时序图

步骤 系统行为描述
1 博主在博客类别信息管理页面勾选上要删除的博客类别,点击删除按钮
2 调用blogType控制层controller的delete方法
3 控制层delete方法中调用service层的delete方法
4 调用blogTypeMapper持久层将对应的博客类别信息删除
5 返回成功删除信息

在博客类别管理页面先勾选上要删除的数据,点击删除按钮,提交到控制层的delete方法,传入参数:需要删除的博客类型的id(可以是多个),调用控制层的方法,在控制层的delete()方法中调用服务层的delete()方法,删除博客类别的相关信息,持久到数据库中。部分代码如下:

/*** 删除博客类别信息* @param ids* @param response* @return* @throws Exception*/@RequestMapping("/delete")public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response)throws Exception{String []idsStr=ids.split(",");JSONObject result=new JSONObject();for(int i=0;i<idsStr.length;i++){if(blogService.getBlogByTypeId(Integer.parseInt(idsStr[i]))>0){result.put("exist", "博客类别下有博客,不能删除!");}else{blogTypeService.delete(Integer.parseInt(idsStr[i]));				}}result.put("success", true);ResponseUtil.write(response, result);return null;}

5.3.4 显示博客类别

在这里插入图片描述

图4-8显示博客类型时序图

步骤 系统行为描述
1 博主在后台系统打开博客类别信息管理页面就会调用查询方法
2 调用blogType控制层controller的list方法
3 控制层list方法中调用service层的list方法
4 调用blogTypeMapper持久层查询所有的博客类别信息
5 返回查询到的博客类别信息

在打开博客类别管理页面时,调用控制层的list方法,传入参数:当前页数和每页数量,调用控制层的方法,在控制层的list()方法中调用服务层的list()方法,从数据库中查询到博客类别信息,然后将博客类别的相关数据渲染页面上。部分代码如下:

@RequestMapping("/list")public String list(@RequestParam(value="page",required=false)String page,@RequestParam(value="rows",required=false)String rows,HttpServletResponse response)throws Exception{PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));Map<String,Object> map=new HashMap<String,Object>();map.put("start", pageBean.getStart());map.put("size", pageBean.getPageSize());List<BlogType> blogTypeList=blogTypeService.list(map);Long total=blogTypeService.getTotal(map);JSONObject result=new JSONObject();JSONArray jsonArray=JSONArray.fromObject(blogTypeList);result.put("rows", jsonArray);result.put("total", total);ResponseUtil.write(response, result);return null;}

5.4 评论管理模块

5.4.1 审核评论

在这里插入图片描述

图4-9审核评论时序图

博主在后台页面打开评论管理页面,选择需要审核的评论,点击审核通过按钮,调用controller层的review方法,controller层调用service层的update方法,将评论的状态字段改为对应的代表通过审核的1,如果点击不通过那就是2.然后调用dao层的update方法持久化到数据库中,相关的代码如下:

/*** 评论审核* @param comment* @param response* @return* @throws Exception*/@RequestMapping("/review")public String review(@RequestParam(value="ids")String ids,@RequestParam(value="state")Integer state,HttpServletResponse response)throws Exception{String []idsStr=ids.split(",");for(int i=0;i<idsStr.length;i++){Comment comment=new Comment();comment.setState(state);comment.setId(Integer.parseInt(idsStr[i]));commentService.update(comment);}JSONObject result=new JSONObject();result.put("success", true);ResponseUtil.write(response, result);return null;}

5.4.2 删除评论

在这里插入图片描述

图4-10删除评论时序图
博主在后台打开评论管理页面,选择需要删除的评论,点击删除按钮。调用controller层的delete方法,在其中的方法中调用业务逻辑层的实现方法,然后调用dao层的方法,最后持久化到数据库中,相关的代码如下:

/*** 删除评论信息* @param ids* @param response* @return* @throws Exception*/@RequestMapping("/delete")public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response)throws Exception{String []idsStr=ids.split(",");for(int i=0;i<idsStr.length;i++){commentService.delete(Integer.parseInt(idsStr[i]));}JSONObject result=new JSONObject();result.put("success", true);ResponseUtil.write(response, result);return null;}

第六章 项目展示与系统测试

6.1 前台模块测试

浏览器的网址输入框中输入正确的地址既可以看到系统前台页面:
在这里插入图片描述

图5-1前台展示页面

6.2 后台模块测试

在前台首页可以点击登录后台按钮可以登录到后台管理页面,在后台管理页面可以进行博客管理,博客类别管理,评论审核和个人信息管理还有系统管理。但是首先要获取用户名和密码,拥有博主权限才可以进入到后台管理页面,首先输入用户名:admin,然后输入密码: 123。结果有两种,一种是密码正确成功登录,另外一种是不成功,登录失败,若是失败,则会在页面上打出红色字体:用户名或密码错误。
如下图所示:

在这里插入图片描述

图5-2后台登录页面

登录成功后,可以进入到后台管理页面,在这个页面,博主可以管理博客,可以新增博客,可以删除修改博客,也可以管理评论等等。
在这里插入图片描述

图5-2后台管理页面

测试写博客:
在这里插入图片描述

图5-3写博客页面
点击发布博客按钮,发布成功。

第七章 联系与交流

q:969060742 完整文档、sql、程序代码、程序资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/153733.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙手表开发之使用adb命令安装线上包

#国庆发生的那些事儿# 鸿蒙手表开发之使用adb命令安装线上包 前言&#xff1a; 由于之前的哥们匆忙离职了&#xff0c;所以鸿蒙手表项目的新版本我临时接过来打包发布&#xff0c;基本上之前没有啥鸿蒙经验&#xff0c;但是一直是做Android开发的&#xff0c;在工作人员的指…

6款流程图制作软件:一站式指南

流程图是一种常用的图示工具&#xff0c;可以帮助我们更清晰地表达和展示流程、流程图等内容。在今天已经变得非常普及和便捷&#xff0c;接下来本文将于大家分享6款好用的流程图软件&#xff0c;一起来看看吧&#xff01; 博思白板boardmix 博思白板boardmix是一款基于浏览器…

使用gpio子系统实现按键驱动(二)

一&#xff0c;gpio_keys.c介绍 Linux内核下的drivers/input/keyboard/gpio_keys.c实现了一个体系无关的GPIO按键驱动&#xff0c;使用此按键驱动&#xff0c;只需要在设备树gpio-key节点添加需要的按键子节点即可&#xff0c;适合于实现独立式按键驱动。 gpio-keys是基于inp…

关于ABB速度,加速度,轴监控指令

关于ABB速度&#xff0c;加速度&#xff0c;轴监控 关于轴监控指令要选择启用和关闭&#xff0c;这个指令是为了防止机器人在抓件放件过程中6轴来回旋转&#xff0c;已最佳的姿态运动 收录于合集 #ABB机器人 9个 上一篇关于ABB机器人的IO创建和设置

嵌入式养成计划-38----C++--匿名对象--友元--常成员函数和常对象--运算符重载

八十七、匿名对象 概念&#xff1a;没有名字对象格式 &#xff1a;类名&#xff08;&#xff09;;作用 用匿名对象给有名对象初始化的用匿名对象给对象数组初始化的匿名对象作为函数实参使用 示例 : #include <iostream> using namespace std; class Dog { private:s…

微电网单台并网逆变器PQ控制matlab仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 微电网运行在并网模式下且公共电网供应正常时&#xff0c;因为公共电网给定了电 压和频率的参考值&#xff0c;所有的逆变器可以使用PQ控制方式。 当系统频率为额定频率f0时&#xff0c;系统稳定在A点&#x…

awvs 中低危漏洞

低危 X-Frame-Options Header未配置 查看请求头中是否存在X-Frame-Options Header字段 会话Cookie中缺少secure属性(未设置安全标志的Cookie) 当cookie设置为Secure标志时&#xff0c;它指示浏览器只能通过安全SSL/TLS通道访问cookie。 未设置HttpOnly标志的Cookie 当cookie设置…

终于找到了!多种类型的电子期刊模板在这里!

经过我不懈的努力和搜寻&#xff0c;终于找到了一个提供多种类型电子期刊模板的网站。这个网站拥有丰富多样的模板&#xff0c;可以满足各种不同的需求&#xff0c;无论是学术研究、商业报告还是个人兴趣爱好&#xff0c;都能在这里找到心仪的模板。 一、网站介绍 这个网站叫做…

软件行业与就业(导师主讲)

在企业软件应用的整体架构体系中&#xff0c;有一部分被称为中间件&#xff0c;那么什么叫中间件&#xff1f; 中间件&#xff08;Middleware&#xff09;是指位于操作系统和应用程序之间的一层软件层&#xff0c;它提供了一组工具和服务&#xff0c;用于简化和增强企业软件应用…

关于hive的时间戳

unix_timestamp&#xff08;&#xff09;和 from_unixtime&#xff08;&#xff09;的2个都是格林威治时间 北京时间 格林威治时间8 from_unixtme 是可以进行自动时区转换的 (4.0新特性) 4.0之前可以通过from_utc_timestamp进行查询 如果时间戳为小数&#xff0c;是秒&#…

Java基本数据类型

Java基本数据类型 1 数值型 整型数据类型 数据类型内存空间&#xff08;8位1字节&#xff09;取值范围byte(字节型&#xff09;8位&#xff08;1字节&#xff09;-128~127 &#xff08;2的8次方&#xff09;short(短整型&#xff09;16位&#xff08;2字节&#xff09;-32768~3…

利用MobaXterm连接服务器的全程配置

一、服务器上的操作 1.1 保证openssh的安装 openssh安装命令如下 apt-get update apt install openssh-server1.2 保证SSH服务没有在相应端口上侦听连接 1确保本地 SSH 服务正在运行 可以尝试使用以下命令检查 SSH 服务的状态&#xff08;在大多数 Linux 系统上&#xff0…

若依微服务部署,裸服务部署、docker部署、k8s部署

目录 前言windows 部署若依-微服务版本浏览器验证docker部署若依-微服务版本浏览器验证k8s部署若依-微服务版本浏览器验证总结 前言 环境&#xff1a;centos7、Win10 若依是一个合适新手部署练习的开源的微服务项目&#xff0c;本篇讲解Windows部署若依微服务、docker部署若依…

【NLTK系列02】NLTK库应用:使用 NLTK 进行情绪分析

使用 NLTK 进行情绪分析 上篇&#xff1a;【NLTK系列】&#xff1a;nltk库介绍&#xff08;01&#xff09;_无水先生的博客-CSDN博客 一、说明 上篇《NLTK库介绍》介绍了NLTK的基本用法&#xff0c;本篇介绍NLTK的一个具体应用&#xff1a;“使用 NLTK 进行情绪分析”&#xf…

基于SpringBoot的桂林旅游景点导游平台

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 景点类型管理 景点信息管理 线路推荐管理 用户注册 线路推荐 论坛交流 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实…

阶段六-Day02-Maven

一、学习Maven 使用Maven创建Web项目&#xff0c;并部署到服务器。 二、Maven介绍及加载原理 1. 介绍 Maven是使用Java语言编写的基于项目对象模型&#xff08;POM&#xff09;的项目管理工具。开发者可以通过一小段描述信息来管理项目的构建、报告和文档。 使用Maven可以…

记录在搭建Jenkins时,所遇到的坑,以及解决方案

项目场景&#xff1a; 记录在搭建Jenkins时,所遇到的坑,以及解决方案.问题描述1 在使用Jenkins构建时,报错如下&#xff1a; cp: cannot stat /project/xx/xxxx/dist/: No such file or directory Build step Execute shell marked build as failure Finished: FAILURE解决方…

【网络豆送书第五期】Kali Linux高级渗透测试

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 本期好书推荐&#xff1a;《Kali Linux高级渗透测试…

MySQ 学习笔记

1.MySQL(老版)基础 开启MySQL服务: net start mysql mysql为安装时的名称 关闭MySQL服务: net stop mysql 注: 需管理员模式下运行Dos命令 . 打开服务窗口命令 services.msc 登录MySQL服务: mysql [-h localhost -P 3306] -u root -p****** Navicat常用快捷键 键动作CTRLG设…

Sentinel入门

文章目录 初始Sentinel雪崩问题服务保护技术对比认识Sentinel微服务整合Sentinel 限流规则快速入门流控模式关联模式链路模式 流控效果warm up排队等待 热点参数限流全局参数限流热点参数限流 隔离和降级FeignClient整合Sentinel线程隔离熔断降级慢调用异常比例、异常数 授权规…