基于ssm框架的个人博客系统(11)--后台开发及前后端数据交互

前面做了一个前台页面,个人感觉不会太丑(图都自己简单PS的),现在的话, 我们就来测试一下前台准备的数据,这里有个值得一提的是,我们的博客类别,在系统中运用的算是比较多的,这样的话,每次使用都直接查询数据库会对数据库造成一定的压力(其实,我这个系统搞完了,尽管上线了,估计也没什么访问量,别说并发啊,数据库资源吃紧啊,这些不好的事情都和我的系统没什么关系,但是该做的还是得做凡事总有万一),在面对访问量、并发量过大的数据,架构师第一想到的解决方案就是缓存,这是很好的解决方案。现在缓存的话,我们就得考虑,在哪做缓存?缓存什么内容?使用什么做缓存?

(切记,我不是单纯将这个系统的需求,这个系统哪要什么缓存,就算要,也就放在application域里面就够了)

          懂application生命周期的别朋友可能会问了:那不是服务器宕机、重启就丢数据了吗?对于这个问题,在我们这个系统就不是问题,因为我们缓存的是blogtype,这种数据在application中丢了,有关系吗?那就重新向数据库要咯,总不能你几毫秒重启一次服务器吧!

现在便于测试,我就先不整这个东西了,我们先来检查前台给我们准备的数据。

基于ssm框架的个人博客系统(11)--后台开发及前后端数据交互_第1张图片

准备的数据如下:


可以了,和我们想要的东西都是一致的,(blogTypeid我说了,我强行给了一个1,用做测试)

要把数据放在application中,我们就得知道什么时候服务器启动,这时候监听器就派上大用场了,我们使用的是ServletContextListener,具体前看代码

package com.lailai.common.utils;

import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoader;

import com.lailai.entity.TBlogtype;
import com.lailai.service.BlogTypeService;

/**
 * Application Lifecycle Listener implementation class typeIdListener
 *
 */
public class typeIdListener implements ServletContextListener {
	public typeIdListener() {
	}
	public void contextDestroyed(ServletContextEvent arg0) {
	}

	public void contextInitialized(ServletContextEvent sce) {
		//就是被监听的对象---ServletContext
		ServletContext servletContext = sce.getServletContext();		
		//下面这个是在spring容器中拿到BlogTypeService这个bean的引用,因为我们要在项目启动时查询blogType 
		ApplicationContext applicationContext = ContextLoader.getCurrentWebApplicationContext();
		BlogTypeService blogTypeService = applicationContext.getBean(BlogTypeService.class);
		//调用Server查询,之前没写,所以自行添加
		List typeList = blogTypeService.selectBlogTypeList();
		//blogTypeService中放数据,页面使用el表达式取数据
		servletContext.setAttribute("typeList", typeList);
	}
}

Service层和Dao层就是之前的分页查询BlogType函数的缩减版,就是不分页。(避免冗余,我就不贴了)

上一篇文章写的editBlog.jsp中写的页面是通过el表达式读取的(在这不说太多el表达式,就说一点:el表达式域的范围从小到大读取,在pageContext、request、session这些域中都没找到,所以使用的是application域。)

注释掉之前测试用的//blogTypeId="1";重新查看页面是否返回了blogtype。


获取blogType测试成功,现在来处理后台了

今天写这块的时候真的是mmp啊!遇到了一大堆的问题,有个问题至今留着,我也不想搞了,思路清晰,就是烦了很久,没出来(就是修改博客时不能够回显博客类型,其他的问题都已经解决了,真的是醉了)

废话不多说,直接说我遇到的一些问题

1)还是ajax返回的数据在外面不能使用的问题,这个之前提到,就是使用同步就能解决,但是今天就是手贱,定义的时候多了个var

导致在外面一直拿不到值(jsp页面出错不好找啊),搞了半天,才发现加了var。

2)写博客,我们之前是使用UE,这个工具啊!我也是第一次用,我对一些api不够熟悉,导致我走了不少弯路,讲个最让我痛心得就是,我是使用easyui弹出的窗口作为编辑的平台,但是出现一个问题就是没怎么将UE中的 内容赋值 啊,这个东西,我待会在代码中会体现,就不贴上了。大致就是先实例化UE,然后再赋值。(这还不是最痛心的,最烦的就是一些js的值的范围,我还不能分的很清,导致一些我认为能够传参的变量,根本不能获取值(后面要专门搞一搞这方面),然后ajax的方式又一堆,前后台的数据传输变量基本上都是根据 实体的属性名的,错了字母,报错还超级差,烦死了)

算了,不bb了,现在贴上代码:

showBlogAllInfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>




博客管理
<%@include file="../common/head.jspf"%>







	
标题:         
类别:         
关键字:     多个关键字的话,用空格隔开
内容:
发布博客

BlogController.java

	//跳转到编辑博客界面
	@RequestMapping("writeBlog")
	public String gotoWrite() {
		return "admin/editBlog";
	}
	//跳转到博客信息管理界面
	@RequestMapping("showBlogAll")
	public String showBlogInfo() {
		return "admin/showBlogAllInfo";
	}
	// 添加或更新博客
	@RequestMapping("saveBlog")
	@ResponseBody
	public MyResult saveBlog(TBlog blog) {
		Integer n;
		if (blog.getId() == null) {
			n = blogService.saveBlog(blog);
		} else {
			n = blogService.updateBlog(blog);
		}
		if (n > 0) {
			return MyResult.ok();
		}
		return MyResult.build(400, "操作失败");
	}
上述就是最为关键的代码啊!希望能给读者带来一些帮助,喜欢我文章的朋友关注我,文章还在不断编辑中......

由于我的数据表没有用户表,我当初设计的时候并没有想搞个用户表,所以这就没有登入查看博客事情了,我也不想往下走了,基本的技术,怕是还有ssm的拦截器了(用于用户登入判断),全局异常处理。。。。。没事,来日方长,慢慢来!

END


你可能感兴趣的:(博客系统)