ssm(springmvc4+spring4+mybatis3)整合实战-个人博客系统-后端功能开发

ssm(springmvc4+spring4+mybatis3)整合实战-个人博客系统-后端功能开发

    下面就介绍介绍个人博客系统后端业务功能的管理。主要包括:发表博客,管理评论,管理博客,友情链接,博客类型管理等等。具体内容过多,我就不多废话,直接上代码。其中的代码我已经做了注释,直接阅读即可。如果有相关问题,可以加后面的群讨论。

    首先是后端首页的展示:

ssm(springmvc4+spring4+mybatis3)整合实战-个人博客系统-后端功能开发_第1张图片

    下面是博客管理controller--BlogAdminController.java,其中功能包括发表博客,列表搜索,获取博客详情,删除博客,修改博客等等:

 

package com.steadyjack.controller.admin;


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 net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.steadyjack.entity.Blog;
import com.steadyjack.entity.PageBean;
import com.steadyjack.lucene.BlogIndex;
import com.steadyjack.service.BlogService;
import com.steadyjack.util.ResponseUtil;
import com.steadyjack.util.StringUtil;
import com.steadyjack.util.WebFileOperationUtil;

/**
 * title:BlogAdminController.java
 * description:管理员博客Controller层
 * time:2017年1月23日 下午10:15:18
 * author:debug-steadyjack
 */
@Controller
@RequestMapping("/admin/blog")
public class BlogAdminController {

	@Resource
	private BlogService blogService;
	
	// 博客索引
	private BlogIndex blogIndex=new BlogIndex();
	
	/**
	 * title:BlogAdminController.java
	 * description:添加或者修改博客信息
	 * time:2017年1月23日 下午10:15:36
	 * author:debug-steadyjack
	 * @param blog
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/save")
	public String save(Blog blog,HttpServletResponse response,HttpServletRequest request)throws Exception{
		int resultTotal=0;
		
		String newContent=WebFileOperationUtil.copyImageInUeditor(request, blog.getContent());
		blog.setContent(newContent);
		
		blogIndex.setRequest(request);
		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;
	}
	
	/**
	 * title:BlogAdminController.java
	 * description:分页查询博客信息
	 * time:2017年1月23日 下午10:17:41
	 * author:debug-steadyjack
	 * @param page
	 * @param rows
	 * @param s_blog
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@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 map=new HashMap();
		map.put("title", StringUtil.formatLike(s_blog.getTitle()));
		map.put("start", pageBean.getStart());
		map.put("size", pageBean.getPageSize());
		
		List 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;
	}
	
	/**
	 * title:BlogAdminController.java
	 * description:删除博客信息
	 * time:2017年1月23日 下午10:20:11
	 * author:debug-steadyjack
	 * @param ids
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/delete")
	public String delete(@RequestParam(value="ids")String ids,HttpServletResponse response,
			HttpServletRequest request)throws Exception{
		String[] idsStr=ids.split(",");
		
		blogIndex.setRequest(request);
		for(int i=0;i


    其中,值得说明的是,因为发表博客涉及到“百度编辑器ueditor”的操作,比如上传的图片,需要在保存博客时对图片进行处理,比如移动copy到指定的文件目录(因为一般而言ueditor配置初始文件上传目录是一个临时目录,不建议 永久保存在哪里)。对于这个操作,我将在下一篇博客重点讲述。

 

    下面是博客类型Controller--BlogTypeAdminController.java:

 

package com.steadyjack.controller.admin;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.steadyjack.entity.BlogType;
import com.steadyjack.entity.PageBean;
import com.steadyjack.service.BlogService;
import com.steadyjack.service.BlogTypeService;
import com.steadyjack.util.ResponseUtil;

/**
 * title:BlogTypeAdminController.java
 * description:管理员博客类别Controller层
 * time:2017年1月23日 下午10:22:24
 * author:debug-steadyjack
 */
@Controller
@RequestMapping("/admin/blogType")
public class BlogTypeAdminController {

	@Resource
	private BlogTypeService blogTypeService;
	
	@Resource
	private BlogService blogService;
	
	/**
	 * title:BlogTypeAdminController.java
	 * description:分页查询博客类别信息
	 * time:2017年1月23日 下午10:22:43
	 * author:debug-steadyjack
	 * @param page
	 * @param rows
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@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 map=new HashMap();
		map.put("start", pageBean.getStart());
		map.put("size", pageBean.getPageSize());
		List 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;
	}
	
	/**
	 * title:BlogTypeAdminController.java
	 * description:添加或者修改博客类别信息
	 * time:2017年1月23日 下午10:23:38
	 * author:debug-steadyjack
	 * @param blogType
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@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;
	}
	
	/**
	 * title:BlogTypeAdminController.java
	 * description:删除博客类别信息
	 * time:2017年1月23日 下午10:24:08
	 * author:debug-steadyjack
	 * @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;i0){
				result.put("exist", "博客类别下有博客,不能删除!");
			}else{
				blogTypeService.delete(Integer.parseInt(idsStr[i]));				
			}
		}
		result.put("success", true);
		ResponseUtil.write(response, result);
		
		return null;
	}
}


    然后是评论管理Controller--CommentAdminController.java:

 

 

package com.steadyjack.controller.admin;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.steadyjack.entity.Comment;
import com.steadyjack.entity.PageBean;
import com.steadyjack.service.CommentService;
import com.steadyjack.util.ResponseUtil;

/**
 * title:CommentAdminController.java
 * description:管理员评论Controller层
 * time:2017年1月23日 下午10:24:52
 * author:debug-steadyjack
 */
@Controller
@RequestMapping("/admin/comment")
public class CommentAdminController {

	@Resource
	private CommentService commentService;
	
	/**
	 * title:CommentAdminController.java
	 * description:分页查询评论信息
	 * time:2017年1月23日 下午10:25:04
	 * author:debug-steadyjack
	 * @param page
	 * @param rows
	 * @param state
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/list")
	public String list(@RequestParam(value="page",required=false)String page,
			@RequestParam(value="rows",required=false)String rows,
			@RequestParam(value="state",required=false)String state,HttpServletResponse response)throws Exception{
		PageBean pageBean=new PageBean(Integer.parseInt(page),Integer.parseInt(rows));
		
		Map map=new HashMap();
		map.put("start", pageBean.getStart());
		map.put("size", pageBean.getPageSize());
		//评论状态
		map.put("state", state); 
		
		List commentList=commentService.list(map);
		Long total=commentService.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(commentList,jsonConfig);
		result.put("rows", jsonArray);
		result.put("total", total);
		ResponseUtil.write(response, result);
		
		return null;
	}
	
	/**
	 * title:CommentAdminController.java
	 * description:删除评论信息
	 * time:2017年1月23日 下午10:31:32
	 * author:debug-steadyjack
	 * @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


    修改个人信息控制器Controller-BloggerAdminController.java:

 

 

package com.steadyjack.controller.admin;

import java.io.File;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.steadyjack.entity.Blogger;
import com.steadyjack.service.BloggerService;
import com.steadyjack.util.CryptographyUtil;
import com.steadyjack.util.DateUtil;
import com.steadyjack.util.ResponseUtil;
import com.steadyjack.util.WebFileUtil;

/**
 * title:BloggerAdminController.java
 * description:管理员博主Controller层
 * time:2017年1月22日 下午10:27:50
 * author:debug-steadyjack
 */
@Controller
@RequestMapping("/admin/blogger")
public class BloggerAdminController {

	@Resource
	private BloggerService bloggerService;
	
	/**
	 * title:BloggerAdminController.java
	 * description:修改博主信息 - 异步
	 * time:2017年1月22日 下午10:28:11
	 * author:debug-steadyjack
	 * @param imageFile
	 * @param blogger
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/save")
	public String save(@RequestParam("imageFile") MultipartFile imageFile,Blogger blogger,HttpServletRequest request,HttpServletResponse response)throws Exception{
		if(!imageFile.isEmpty()){
			//对上传的文件(个人头像)进行处理:文件命名,转为File
			String filePath=WebFileUtil.getSystemRootPath(request);
			String imageName=DateUtil.getCurrentDateStr()+"."+imageFile.getOriginalFilename().split("\\.")[1];
			imageFile.transferTo(new File(filePath+"static/userImages/"+imageName));
			blogger.setImageName(imageName);
		}
		int resultTotal=bloggerService.update(blogger);
		StringBuffer result=new StringBuffer();
		if(resultTotal>0){
			result.append("");
		}else{
			result.append("");
		}
		ResponseUtil.write(response, result);
		return null;
	}
	
	/**
	 * title:BloggerAdminController.java
	 * description:查询博主信息 - 异步
	 * time:2017年1月22日 下午10:41:45
	 * author:debug-steadyjack
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/find")
	public String find(HttpServletResponse response)throws Exception{
		Blogger blogger=bloggerService.find();
		JSONObject jsonObject=JSONObject.fromObject(blogger);
		ResponseUtil.write(response, jsonObject);
		
		return null;
	}
	
	/**
	 * title:BloggerAdminController.java
	 * description:修改博主密码
	 * time:2017年1月22日 下午11:18:42
	 * author:debug-steadyjack
	 * @param newPassword
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/modifyPassword")
	public String modifyPassword(String newPassword,HttpServletResponse response)throws Exception{
		Blogger blogger=new Blogger();
		blogger.setPassword(CryptographyUtil.md5(newPassword, "debug"));
		int resultTotal=bloggerService.update(blogger);
		JSONObject result=new JSONObject();
		if(resultTotal>0){
			result.put("success", true);
		}else{
			result.put("success", false);
		}
		ResponseUtil.write(response, result);
		
		return null;
	}
	
	/**
	 * title:BloggerAdminController.java
	 * description:注销-退出登录
	 * time:2017年1月22日 下午11:18:17
	 * author:debug-steadyjack
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/logout")
	public String  logout()throws Exception{
		SecurityUtils.getSubject().logout();
		return "redirect:/login.jsp";
	}
}


    友情链接管理Controller--LinkAdminController.java

 

 

package com.steadyjack.controller.admin;


import java.util.HashMap;
import java.util.List;
import java.util.Map;


import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;


import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;


import com.steadyjack.entity.Link;
import com.steadyjack.entity.PageBean;
import com.steadyjack.service.LinkService;
import com.steadyjack.util.ResponseUtil;


/**
 * title:LinkAdminController.java
 * description:友情链接Controller层
 * time:2017年1月23日 下午10:32:33
 * author:debug-steadyjack
 */
@Controller
@RequestMapping("/admin/link")
public class LinkAdminController {
	
	@Resource
	private LinkService linkService;
	
	/**
	 * title:LinkAdminController.java
	 * description:分页查询友情链接信息
	 * time:2017年1月23日 下午10:32:41
	 * author:debug-steadyjack
	 * @param page
	 * @param rows
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@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 map=new HashMap();
		map.put("start", pageBean.getStart());
		map.put("size", pageBean.getPageSize());
		
		List linkList=linkService.list(map);
		Long total=linkService.getTotal(map);
		JSONObject result=new JSONObject();
		JSONArray jsonArray=JSONArray.fromObject(linkList);
		result.put("rows", jsonArray);
		result.put("total", total);
		ResponseUtil.write(response, result);
		
		return null;
	}
	
	/**
	 * title:LinkAdminController.java
	 * description:添加或者修改友情链接信息
	 * time:2017年1月23日 下午10:33:17
	 * author:debug-steadyjack
	 * @param link
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping("/save")
	public String save(Link link,HttpServletResponse response)throws Exception{
		//操作的记录条数
		int resultTotal=0;
		
		if(link.getId()==null){
			resultTotal=linkService.add(link);
		}else{
			resultTotal=linkService.update(link);
		}
		JSONObject result=new JSONObject();
		
		if(resultTotal>0){
			result.put("success", true);
		}else{
			result.put("success", false);
		}
		ResponseUtil.write(response, result);
		
		return null;
	}
	
	/**
	 * title:LinkAdminController.java
	 * description:删除友情链接信息
	 * time:2017年1月23日 下午10:33:47
	 * author:debug-steadyjack
	 * @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


     最后是介绍一个全局的关于日期处理的处理器DateJsonValueProcessor.java:

 

 

package com.steadyjack.controller.admin;

import java.text.SimpleDateFormat;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

/**
 * title:DateJsonValueProcessor.java
 * description:json-lib 日期处理器(处理含有日期字段的对象;处理含有日期字段的对象list)
 * time:2017年1月23日 下午10:29:09
 * author:debug-steadyjack
 */
public class DateJsonValueProcessor implements JsonValueProcessor{

	private String format;  
	
    public DateJsonValueProcessor(String format){  
        this.format = format;  
    }  
    
	public Object processArrayValue(Object value, JsonConfig jsonConfig) {
		return null;
	}

	public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
		if(value == null)  
        {  
            return "";  
        }  
        if(value instanceof java.sql.Timestamp)  
        {  
            String str = new SimpleDateFormat(format).format((java.sql.Timestamp)value);  
            return str;  
        }  
        if (value instanceof java.util.Date)  
        {  
            String str = new SimpleDateFormat(format).format((java.util.Date) value);  
            return str;  
        }  
          
        return value.toString(); 
	}

}


    相关的后端的页面已经在前一篇博客上传了,在本文的最后,将直接分享整个项目的源码与数据库。并也会分享到github,我会在第一条评论留言!如果下载不方便,可以加入群讨论:Java开源技术交流:583522159  我叫debug,个人QQ:1948831260

 

 

你可能感兴趣的:(ssh,ssm整合案例)