【《基于SSM框架的个人博客的设计与开发研究》14000字(论文)】_第1页
【《基于SSM框架的个人博客的设计与开发研究》14000字(论文)】_第2页
【《基于SSM框架的个人博客的设计与开发研究》14000字(论文)】_第3页
【《基于SSM框架的个人博客的设计与开发研究》14000字(论文)】_第4页
【《基于SSM框架的个人博客的设计与开发研究》14000字(论文)】_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图46所示。图4-6管理员文章列表用例图设计需求分析数据库建表语句正确,设计合理,没有字段冗余,数据类型及其长度合理。无中文名,采用英文名方式命名表和字段,同时对每个表中的字段都设置备。页面布局界面布局合理,样式美观,有良好的交互能力。样式名、函数方法名要合理、规则,同时要有注释代码,解释函数作用,让人能看出这是做什么的,具体工作是什么。操作流程合理,按钮设计合理,条目清晰。

系统概要设计设计说明从系统的分析与设计中,可以得出个人博客网站需要完成相当多的功能,还需要一定的人机交互能力,如前台也要有美观的布局界面,用HTML5和CSS3编写前台页面,用JavaScript实现相应的交互效果,并且相应的注册、登陆、搜索、收藏、点赞、评论、留言、文章筛选等功能都要实现,而这些数据的交互则通过Ajax技术,前台用户点击相应的按钮,返回请求到后台,服务端返回json格式的数据回到前台,前台根据返回的数据进行相对应的数据展示或者提示。整个项目的功能由服务端完成,服务端应该有相应的接口对应前台的功能,同时也有一套针对后台操作管理的接口。系统流程设计用户注册流程图图5-1用户注册流程图普通用户流程图图5-2普通用户流程图管理员用户流程图图5-3管理员用户流程图系统目录结构根据以上系统结构设计说明和博客系统流程设计,结合SSM框架开发的配置和约定,现将整个系统的目录进行编排和页面组织进行设计。具体情况如图5-4所展示。java目录下为系统后台源码,其中,每个包的作用都不同。controller包下为控制器,负责对接口的响应和数据的返回;interceptor包下为拦截器,负责对未登陆的用户进行拦截,阻止进入重要的页面;mapper包为方法接口,同时与resources目录下的同名包相互作用,由MyBatis框架负责映射;pojo为java对象包,与数据库中的表相对应,由Spring框架自动注入;service包为服务包,它具体实现了mapper包下的方法,供控制器调用,同时也是由Spring自动注入;test包为测试包,负责一些代码的调试;util为工具包,封装好了一些重复性的代码,如生成随机验证码,MD5密码加密。resource目录为存放配置文件的目录。webapp目录存放写好的HTML、CSS、JS文件,同时也包含图片、Layui框架等文件。图5-4系统目录结构实体关系用户ER图图5-5用户ER图管理员ER图图5-6管理员ER图数据库设计构思实际的项目架构和实施流程,建立实体关系,分析项目各实体之间的具体关系,使业务逻辑清晰,并与现实情况结合,选择数据库类型引擎为InnoDB与数据库的字符集为UTF-8,建立数据表时选择合适的字段,因此,建立以下几个数据表,博客数据库内部的表设计结构如下:表STYLEREF1\s51用户实体表表STYLEREF1\s52管理页实体表表STYLEREF1\s53文章实体表表STYLEREF1\s54类型实体表表STYLEREF1\s55标签实体表表STYLEREF1\s56留言实体表表STYLEREF1\s57收藏实体表表STYLEREF1\s58链接实体表表STYLEREF1\s59信息实体表表STYLEREF1\s510评论实体表表STYLEREF1\s511推荐实体表系统模块设计普通用户模块图5-7普通用户模块管理员用户模块图5-8管理页用户

系统详细设计与实现前台首页首页部分具有登陆功能、网站首页功能、查看留言功能,页面由html5+css3+javascript实现。整个首页的布局如下,顶部为logo部分和导航栏,中间内容页为左侧文章列表和右侧信息栏,底部内容为版权信息栏。右侧信息栏又包括博主信息、搜索栏、联系方式、分类导航、标签云、点击排行、站长推荐、友情链接。搜索栏可以进行搜索发布的文章,输入标题名即可搜索,分类栏、标签栏点击相应的按钮,会筛选出符合的文章,其中首页的导航栏,分为登陆和未登陆的状态,未登陆状态的导航栏包括首页、留言、登陆;登陆的状态下的导航栏包括首页、留言、收藏、个人信息、登出。导航栏区别如图6-1、图6-2,整体页面如图6-3。图6-1未登陆状态图6-2登陆状态图6-3整体页面登陆页登陆界面由一个表单构成,包含验证码框、登陆名框、密码框。在登陆界面,输入正确的账号密码后,再输入正确的验证码,其中验证码不区分大小写,点击可以刷新,生成新的验证码,点击登陆,浏览器发起一个post请求,后台接收账号、密码、验证码,然后检查验证码与后台生成的是否相同,如果不相同就以json格式的数据返回验证码错误,如果相同查询数据库user表中该账号的信息,查询到的密码与登陆密码匹配就跳转首页,并在首页右上角的导航栏有个人信息修改栏和退出栏,如果密码不匹配,系统返回数据,登陆页则会弹出弹框提示密码错误。登陆页如图6-4。图SEQ图\*ARABIC6-4登录页用户进入登陆页后,输入用户的账号和密码,再输入验证码,该验证码不区分大小写,用户输入完毕,浏览器发起一个新的post请求,对后端的接口请求数据,后端验证接收的数据,后端实现登陆验证的代码如下。publicStringuserLogin(HttpServletRequestrequest,HttpServletResponseresponse,Useruser,Stringcaptcha)throwsException{

HttpSessionsession=request.getSession();

Stringvcode=(String)session.getAttribute("randomcode_key");

vcode=vcode.toUpperCase();

captcha=captcha.toUpperCase();

System.out.println(vcode);

Useruser1=userService.selectUserByUsername(user.getUsername());

if(user1!=null){

Stringpwd=user.getPassword();

pwd=MD5Util.encode(pwd);

if(pwd.equals(user1.getPassword())){

if(vcode.equals(captcha)){

if(user1.getState()==1){

user1.setPassword("");

session.setAttribute("userLogin",user1);

return"1";

}else{

return"3";//账号已被禁用

}

}

return"-2";//验证码错误

}else{

//密码错误

return"0";

}

}

else{

//没有账号

return"-1";

}

}注册页注册界面由一个表单构成,包含登陆名框、密码框、昵称框、邮箱框、手机框、性别框。注册页面实现注册功能,需要输入账号密码和昵称等必填信息,不填写会弹出提示填写,同时也使用正则表达式来判断输入信息是否正确。如果注册成功会跳转登陆界面,注册失败会提示注册失败原因。所有信息必须都填写,不符合会提示不予注册,密码与重复密码不符合时会提示密码不一致,输入正确后,点击注册,后台会接收到一个post请求,后台把post带来的数据解析,根据接收来的账号先查询一次数据库,如果数据库返回数据则表明数据库已存在该账号,然后返回数据,前台根据返回数据提示账号已注册;如果数据库没有数据返回则表明没有该账号,然后把密码加密与昵称等信息同账号一起写入数据库,写入的同时,数据库user表会记录下写入时间为注册时间,写入成功则后台跳转登陆页面的地址,前台则提示注册成功,然后页面自动跳转登陆界面。注册页面如图6-5。图6-5注册页用户如果是新用户,需要进行注册才可以进行登陆和后续操作,用户填入信息后,点击提交,会发起一个请求,然后后端处理请求,进行处理,如果用户不存在,就写入数据库,并返回成功,如果存在,则返回用户已存在的失败信息,用户注册的实现代码如下。publicStringuserRegister(Useruser)throwsException{

System.out.println("执行注册用户"+user.getEmail());

user.setImgurl("us.jpg");

user.setState(1);

intresult=0;

Usercheck=userService.selectUserByUsername(user.getUsername());

if(check!=null){

//数据库有了

return"-1";

}elseif(check==null){

//数据库没有,成功返回1

Stringpwd=user.getPassword();

pwd=MD5Util.encode(pwd);

user.setPassword(pwd);

result=userService.addUser(user);

returnresult+"";

}

//注册失败

return"0";

}收藏页收藏页为用户登陆后才能见到,页面布局中,顶部为导航栏,中间为收藏内容部分,底部为版权信息。首页收藏后的文章,都会展示在此页面,每一个收藏条目的右上角都有删除按钮,点击会删除该收藏内容,点击收藏文章的标题或者简介都会跳转该文章详情页面。如下图6-6收藏页。图6-6收藏页用户点击收藏文章,浏览器发起一个ajax请求,后端接收请求,对接收的数据进行判断,然后返回相应的结果,其中后端处理的代码如下。publicStringaddCollect(Collectcollect,HttpSessionsession){

intresult=0;

Useruser=(User)session.getAttribute("userLogin");

Collectcollect1=collectService.selectCollectById(collect.getAid());

if(collect1==null){

collect.setUid(user.getId());

result=collectService.addCollect(collect);

returnresult+"";

}elseif(collect1!=null){

//针对用户点击已收藏,改为取消收藏

collectService.deleteCollectByAid(collect.getAid());

}

returnresult+"";

}留言页留言页的布局为顶部导航栏,中间留言展示栏和留言栏,底部为版权信息。用户登陆后可以进行留言和查看,同时可以删除自己的留言,未登陆的用户仅能查看留言。留言页如图6-7留言页。图6-7留言页用户登陆成功才可进入留言页添加留言,添加留言的后端代码如下。publicStringaddMessage(Messagemessage){

System.out.println("执行添加Message"+message.getContent());

intresult=0;

result=messageService.addMessage(message);

returnresult+"";

}文章内容页文章内容页的布局是顶部为导航栏,中间部分为内容页、右侧信息栏与评论区,底部为版权信息。首页中,文章列表里的每个文章条目里,点击阅读全文或者文章标题、简介可以进入文章的内容页。在首页点击文章时,浏览器发起请求,后台接收到get请求,然后查询数据库中article表,在数据库中查询该篇文章的id,然后把数据返回,并且查询comment表的文章id,也一同把数据返回,后台封装为json格式的数据,跳转内容详情页,内容详情页用中的js代码会把接收到的数据输出到页面,文章内容使用的是富文本内容,文章评论也用js把返回的数据按顺序输出到相应的位置。登陆后的用户可以发表评论或者删除自己的评论。如下图6-8文章内容页。图6-8文章内容页任何人都可以查看文章,但是只有登陆的用户才可以评论、收藏、点赞文章,部分代码如下。publicMap<String,Object>findOneArticle(intid,HttpSessionsession){

Map<String,Object>tableData=newHashMap<String,Object>();

Useruser=(User)session.getAttribute("userLogin");

Articlearticle=articleService.selectArticleById(id);

Collectcollect=collectService.selectCollectById(id);

//更新浏览量

article.setHits(article.getHits()+1);

articleService.updateHits(article);

List<Comment>comments=commentService.selectCommentByAid(id);

if(article.getId()>0){

System.out.println("执行文章集合不为空");

}else{

System.out.println("执行文章为空");

tableData.put("code",0);

tableData.put("msg","查找文章是失败");

tableData.put("count",0);

if(user==null){

//user.setId(0);

}

tableData.put("user",user);

returntableData;

}

tableData.put("code",1);

tableData.put("msg","文章操作成功");

tableData.put("types",typeService.list());

tableData.put("tag",tagService.list());

tableData.put("comment",comments);

tableData.put("user",user);

tableData.put("coll",collect);

tableData.put("asc",articleService.selectArticleByAsc(id));

tableData.put("desc",articleService.selectArticleByDesc(id));

tableData.put("data",article);

returntableData;

}个人信息页个人信息页的布局为顶部导航栏,中间的信息修改栏,底部的版权信息。用户登陆后,点击显示用户昵称的按钮可以跳转修改个人信息页面,可以修改个人邮箱和密码及昵称等注册信息。在个人信息修改界面,每个信息条目,右上角有一个修改按钮,点击后会弹出修改框,点击修改后,浏览器发起ajax请求,后台会接收到发起的post请求,把传送过来的数据解析,接着开始调用更新语句,然后数据库user表更新个人信息,如果修改成功,前台会接收到后台发送的成功数据,然后弹出修改成功的信息框,页面相应的的数据也修改为改动的数据;如果失败则会回退数据,修改失败,前台显示修改失败的信息。个人信息修改页如下图6-9个人信息修改页。图6-9个人信息修改页用户登陆成功后才能对自己的信息进行修改,其中的部分重要代码如下。//更新邮箱,针对前台

@RequestMapping("/updateUserEmail")

@ResponseBody

publicStringupdateUserEmailById(Useruser,HttpSessionsession){

UseruserLogin=(User)session.getAttribute("userLogin");

intresult=userService.updateEmail(user);

returnresult+"";

}

//更新性别,针对前台

@RequestMapping("/updateUserSex")

@ResponseBody

publicStringupdateUserSexById(Useruser,HttpSessionsession){

UseruserLogin=(User)session.getAttribute("userLogin");

intresult=userService.updateSex(user);

returnresult+"";

}

//更新手机,针对前台

@RequestMapping("/updateUserPhone")

@ResponseBody

publicStringupdateUserPhoneById(Useruser,HttpSessionsession){

UseruserLogin=(User)session.getAttribute("userLogin");

intresult=userService.updatePhone(user);

returnresult+"";

}

//更新一个用户的信息

@RequestMapping("admin/updateOneUseInfo")

@ResponseBody

publicStringupdateUserInfoById(Useruser){

if("".equals(user.getId())){

return"0";

}

Stringpwd=user.getPassword();

try{

pwd=MD5Util.encode(pwd);

}catch(Exceptione){

e.printStackTrace();

}

user.setPassword(pwd);

intresult=userService.updateInfo(user);

returnresult+"";

}后台登陆页在浏览器地址输入http://localhost:8080/pblog/admin即可进入后台登陆界面,输入正确的账号密码即可登陆后台操作界面。如图6-10后台登陆页。图6-10后台登陆页管理员进入后台的第一个界面,输入账户和密码进行登陆,其中的后端登陆验证代码如下。publicStringlogin(Adminadmin,HttpSessionsession)throwsException{

AdminadminLogin=adminService.selectById(1);

if(adminLogin!=null){

Stringpwd=adminLogin.getPassword();

if(pwd.equals(admin.getPassword())){

//登录成功

session.setAttribute("adminId",adminLogin.getId());

session.setAttribute("adminUsername",adminLogin.getUsername());

session.setAttribute("adminLoginTime",adminLogin.getLogin());

session.setAttribute("adminNickname",adminLogin.getNickname());

session.setAttribute("adminUrl",adminLogin.getImgurl());

return"redirect:/admin/index.html";

}

}

return"redirect:/admin/login.html";}首页管理员登陆后,首先进入的就是系统首页,首页显示当前时间、用户数、留言数、文章数等后台信息,该页面进入后会。如图6-11首页。图6-11首页管理员进入首页,默认触发一个ajax请求,请求后端发送一个统计数据,其中的js请求代码如下。$.ajax({url:"http://localhost:8080/pblog/admin/getCensus",//请求地址dataType:"json",//数据格式type:"post",//请求方式async:false,//是否异步请求success:function(data){if(data.code=="1"){varsj=data.data;$("#show").append(`<liclass="layui-col-md2layui-col-xs6"><ahref="javascript:;"class="x-admin-backlog-body"><h3>文章数</h3><p><cite>${sj.anum}</cite></p></a></li>`);$("#show").append(`<liclass="layui-col-md2layui-col-xs6"><ahref="javascript:;"class="x-admin-backlog-body"><h3>留言数</h3><p><cite>${sj.mnum}</cite></p></a></li>`);$("#show").append(`<liclass="layui-col-md2layui-col-xs6"><ahref="javascript:;"class="x-admin-backlog-body"><h3>用户数</h3><p><cite>${sj.unum}</cite></p></a></li>`);}elseif(data.code=="0"){layer.msg("没有任何标签");}else{layer.msg("网络故障");}},})文章管理页点击用户管理,出现用户列表选项,点击后出现用户管理界面。页面左上角为筛选栏,可以根据时间和用户名筛选出注册的用户,筛选栏下面是添加用户按钮和全选按钮。中间的部分是用户信息列表,展示用户的所有信息,每个条目都有操作按钮,可以启用账号或者停用账号,可以编辑用户信息,可以编辑用户密码,可以彻底删除用户。页面布局、编辑信息栏如图6-12用户管理页、图6-13编辑用户信息。图6-12用户管理页图6-13编辑用户信息管理员可以对用户的信息进行管理,比如修改、删除、添加、查找,部分代码如下。//删除多个文章

@RequestMapping("admin/deleteAllArticle")

@ResponseBody

publicStringdeleteArticleAll(Stringid,intnum){

if(id!=null&&!id.equals("")){

String[]ids=id.split(",");

for(Stringuid:ids){

if(uid!=null&&!uid.equals("")){

//

articleService.deleteArticleById(Integer.parseInt(uid));

num--;

}

}

}

System.out.println("执行删除所有文章,执行成功剩余数"+num);

if(num==0){

return"1";

}else{

return"0";

}

}

//返回一个文章

@RequestMapping("/admin/returnOneArticle")

@ResponseBody

publicArticlereturnArticle(Articlearticle){

Articlearticle1;

System.out.println("返回一个分类");

if(article.getId()>0){

article1=articleService.selectArticleById(article.getId());

}else{

article1=newArticle();

article1.setId(0);

}

returnarticle1;

}用户管理页在文章添加页面,写文章的时候需要填入相应的信息,写文章内容的地方为富文本编辑器,在页面右侧可以勾选相应的标签目录,标签可以多选,还要选择发布的状态和分类。在文章列表页面,左上角为筛选栏,可以根据时间和标题名筛选出写过的文章,筛选栏下面是批量删除按钮。中间的部分是文章信息列表,展示文章的所有信息,每个条目都有操作按钮,可以上线文章或者把文章存为草稿,可以编辑文章信息,可以彻底删除用户。文章添加页、文章管理页如图6-14文章添加页、图6-15文章列表页。图6-14文章添加页图6-15文章列表页进入文章管理,管理员可以对文章进行添加、修改内容、删除、修改状态等重要信息,部分代码如下。publicMap<String,Object>returnFindUser(Stringusername,Stringold,Stringold2,Integerpage)throwsException{

Map<String,Object>params=newHashMap<>();

params.put("username",username);

params.put("old",old);

params.put("new",old2);

Map<String,Object>tableData=newHashMap<String,Object>();

PageHelper.offsetPage(page,10);//page是开始页,即第几页

List<User>users=userService.selectUserByUsernameAndTime(params);

System.out.println("返回寻找到用户数"+users.size());

if(users.size()>0){

}else{

tableData.put("code",0);

tableData.put("msg","查找分页加数据操作失败");

tableData.put("count",0);

returntableData;

}

PageInfo<User>pageInfo=newPageInfo<>(users);

tableData.put("code",1);

tableData.put("msg","查找分页加数据操作成功");

tableData.put("count",pageInfo.getTotal());

System.out.println("count"+pageInfo.getTotal());

tableData.put("data",pageInfo.getList());

returntableData;

}分类管理页在分类页面左上角的是两个按钮,分别为批量删除按钮和添加按钮。中间的部分是分类信息列表,展示分类的所有信息,每个条目都有操作按钮,可以修改分类名和删除该分类。分类页面的布局如图6-16分类管理页。图6-16分类管理页管理员可以对文章的分类进行管理,部分代码如下。//删除单个分类

@RequestMapping("admin/deleteOneType")

@ResponseBody

publicStringdeleteTypeById(Typetype){

System.out.println("执行删除分类"+type.getId());

intresult=typeService.deleteTypeById(type.getId());

returnresult+"";

}

//更新分类名字

@RequestMapping("admin/updateOneType")

@ResponseBody

publicStringupdateTypeById(Typetype){

if("".equals(type.getId())){

return"0";

}

intresult=typeService.deleteTypeById(type.getId());

returnresult+"";

}

//删除多个

@RequestMapping("admin/deleteAllType")

@ResponseBody

publicStringdeleteTypeAll(Stringid,intnum){

if(id!=null&&!id.equals("")){

String[]ids=id.split(",");

for(Stringuid:ids){

if(uid!=null&&!uid.equals("")){

//

typeService.deleteTypeById(Integer.parseInt(uid));

num--;

}

}

}

System.out.println("执行删除所有分类,执行成功剩余数"+num);

if(num==0){

return"1";

}else{

return"0";

}

}

//增加一个分类

@RequestMapping("admin/addOneType")

@ResponseBody

publicStringaddType(Typetype){

System.out.println("执行添加分类"+type.getName());

intresult=0;

result=typeService.addType(type.getName());

returnresult+"";

}标签管理页标签页面左上角为批量删除按钮和添加按钮。中间的主体部分是标签信息列表,列表展示了标签的所有信息,每个标签条目后有两个操作按钮,可以修改标签名和删除该标签。标签页面的布局如下图6-17标签管理页。图6-17标签管理页管理员可以对文章的标签进行管理,部分代码如下。//增加一个标签

@RequestMapping("admin/addOneTag")

@ResponseBody

publicStringaddTag(Tagtag){

System.out.println("执行添加标签"+tag.getName());

intresult=0;

result=tagService.addTag(tag.getName());

returnresult+"";

}

//修改标签状态

@RequestMapping("admin/updateTag")

@ResponseBody

publicStringupdateTag(Tagtag){

System.out.println("执行更新标签"+tag.getName());

intresult=tagService.updateName(tag);

returnresult+"";

}

//返回一个标签

@RequestMapping("/admin/returnOneTag")

@ResponseBody

publicTagreturnTag(Tagtag){

Tagtag1;

System.out.println("返回一个标签");

if(tag.getId()>0){

tag1=tagService.selectTagById(tag.getId());

}else{

tag1=newTag();

tag.setId(0);

}

returntag1;

}评论管理页评论管理页左上角有筛选栏,可以选择时间或者评论筛选出目标评论,筛选栏下面是批量删除按钮。中间的主体部分是评论信息列表,此处展示每条评论的所有信息,每个评论条目都有三个操作按钮,分别是启用评论或者停用评论、编辑评论信息、彻底删除评论。评论页面布局如图6-18评论管理页。图6-18评论管理页管理员进入评论管理,可以对用户发表的评论进行管理,部分代码如下。//增加一个评论,此处是后台用的

@RequestMapping("admin/addOneComment")

@ResponseBody

publicStringaddComment(Commentcomment){

System.out.println("执行添加Comment"+comment.getContent());

intresult=0;

result=commentService.addComment(comment);

returnresult+"";

}

//增加一个评论,针对前台用户

@RequestMapping("/addOneComment")

@ResponseBody

publicStringaddOneComment(Commentcomment){

System.out.println("执行添加用户Comment"+comment.getContent());

//intresult=0;

commentService.addComment(comment);

returncomment.getId()+"";

}

//修改评论状态

@RequestMapping("admin/updateStateForComment")

@ResponseBody

publicStringupdateState(Commentcomment){

System.out.println("执行更新状态"+comment.getId());

intresult=commentService.updateState(comment);

returnresult+"";

}

//返回一个评论

@RequestMapping("/admin/returnOneComment")

@ResponseBody

publicCommentreturnComment(Commentcomment){

Commentcomment1;

if(comment.getId()>0){

comment1=commentService.selectCommentById(comment.getId());

}else{

comment1=commentService.selectCommentById(3);

}

returncomment1;

}链接管理页链接管理页的左上角有批量删除按钮、添加按钮。该页面中间的主体部分是友情链接信息列表,列表展示了每条链接的所有信息,然后有三个操作按钮,为启用链接或者停用链接、编辑链接信息、彻底删除链接。链接管理页面布局如图6-19链接管理页。图6-19链接管理页链接管理是针对友情链接的,可以对链接进行操作和管理,部分代码如下。//增加一个链接,此处是后台用的

@RequestMapping("admin/addOneLink")

@ResponseBody

publicStringaddLink(Linklink){

System.out.println("执行添加Link"+link.getInfo());

intresult=0;

result=linkService.addLink(link);

returnresult+"";

}

//修改链接状态

@RequestMapping("admin/updateStateForLink")

@ResponseBody

publicStringupdateState(Linklink){

System.out.println("执行更新状态"+link.getId());

intresult=linkService.updateState(link);

returnresult+"";

}

//返回一个链接

@RequestMapping("/admin/returnOneLink")

@ResponseBody

publicLinkreturnLink(Linklink){

Linklink1;

System.out.println("返回链接");

if(link.getId()>0){

link1=linkService.selectLinkById(link.getId());

}else{

link1=linkService.selectLinkById(3);

}

returnlink1;

}推荐管理页推荐管理页的布局中左上角为两个按钮,一个是批量删除按钮,一个是添加按钮。主体内容部分为推荐列表,列表列出每个文章推荐的基本信息,同时可以操作每个推荐,可以启用或者停用推荐、修改推荐、删除推荐。如图6-20推荐管理页。图6-20推荐管理页管理员在后台可以对文章进行推荐,在推荐管理中可以对推荐文章进行管理,部分代码如下。//更新一个推荐文章的内容

@RequestMapping("admin/updateOneRecommend")

@ResponseBody

publicStringupdateCommentById(Recommendrecommend){

if("".equals(recommend.getId())){

return"0";

}

System.out.println("执行更新推荐"+recommend.getId());

intresult=recommendService.updateInfo(recommend);

returnresult+"";

}

//删除多个推荐

@RequestMapping("admin/deleteAllRecommend")

@ResponseBody

publicStringdeleteCommentAll(Stringid,intnum){

if(id!=null&&!id.equals("")){

String[]ids=id.split(",");

for(Stringuid:ids){

if(uid!=null&&!uid.equals("")){

recommendService.deleteRecommendById(Integer.parseInt(uid));

num--;

}

}

}

if(num==0){

return"1";

}else{

return"0";

}

}管理页管理页管理员管理页包含两个管理界面,其一是主页信息,其二是修改管理员头像。主页信息界面的作用是修改展示在主页的博主信息,根据实际情况填写,如图6-21主页信息。修改管理员头像界面是用于修改主页的博主信息栏的照片,如图6-22修改管理员头像。图6-21主页信息图6-22修改管理员头像这里是管理员修改自己的信息的地方,可以修改头像、名字、昵称等信息,最终是显示到前台界面给用户看的,部分实现代码展示如下。//上传头像图片

@RequestMapping("admin/uploadInfoImg")

@ResponseBody

publicMap<String,Object>uploadImg(MultipartFilefile,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{

Map<String,Object>result=newHashMap<String,Object>();

Map<String,Object>result2=newHashMap<String,Object>();

StringnodePath=request.getSession().getServletContext().getRealPath("/");

StringfilePath=nodePath+"/uploadFile/";//上传到这个文件夹

Filefile1=newFile(filePath);

if(!file1.exists()){

file1.mkdirs();

}

intimgResult=infoService.updateInfoImg(file.getOriginalFilename().trim());

StringfinalFilePath=filePath+file.getOriginalFilename().trim();

FiledesFile=newFile(finalFilePath);

if(desFile.exists()){

desFile.delete();

}

try{

file.transferTo(desFile);

result.put("code",0);

result.put("msg","ok");

result.put("imgresult",imgResult);

}catch(Exceptione){

System.out.println(e.getMessage());

result.put("code",1);

}

System.out.println("执行更新img信息"+finalFilePath);

return

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论