运用spring监听器 对页面数据进行初始化

最近在做一个个人博客的demo,博客首页需要很多的信息,比如博主的信息,博客类别的信息,按照时间对博客进行分组等信息.这些信息一般情况下都是静态的,除非进入后台对这些信息进行修改.

今天在搜索资料时搜索到了一种方法,可以运用在页面初始化信息上.

就是利用 spring监听器,在启动spring时进入方法,然后对数据库进行搜索查询,得到想要的数据后,将其放在application当中,也就是JSP九大内置对象中生命周期最长范围最大的内个.

代码如下:

首先要配置监听器方法:

package com.blog.service.common.Impl;

import java.util.List;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import com.blog.entity.Blog;
import com.blog.entity.BlogType;
import com.blog.entity.Blogger;
import com.blog.entity.Link;
import com.blog.service.background.Impl.*;

/**
 * title:InitComponent.java
 * description:初始化组件 把博主信息 根据博客类别分类信息 根据日期归档分类信息 
 * 		                   存放到application中,用以提供页面请求性能
 */
@Component
public class InitComponent implements ServletContextListener,ApplicationContextAware{
	
	

	private static final Logger log=LoggerFactory.getLogger(InitComponent.class);
	
	//其实这个就是spring的IOC容器-spring上下文应用程序
	private static ApplicationContext applicationContext;
	
	@SuppressWarnings("static-access")
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		this.applicationContext=applicationContext;
	}

	public void contextInitialized(ServletContextEvent servletContextEvent) {
		//application:整个javaWeb应用的页面作用域:生命周期是整个应用 ,可以往此对象中绑定一些经常需要访问的对象供某些经常访问的页面如首页使用
		ServletContext application=servletContextEvent.getServletContext();
		
		//Spring IOC容器中获取各个bean
		BloggerService bloggerService=(BloggerService) applicationContext.getBean("bloggerService");
		Blogger blogger=bloggerService.getBlogger(); // 查询博主信息
		blogger.setPassword(null);
		application.setAttribute("blogger", blogger);
		
		BlogTypeService blogTypeService=(BlogTypeService) applicationContext.getBean("blogTypeService");
		List<BlogType> blogTypeCountList=blogTypeService.countList(); // 查询博客类别以及博客的数量
		application.setAttribute("blogTypeCountList", blogTypeCountList);
		
		BlogService blogService=(BlogService) applicationContext.getBean("blogService");
		List<Blog> blogCountList=blogService.countList(); // 根据日期分组查询博客
		application.setAttribute("blogCountList", blogCountList);
		
		LinkService linkService=(LinkService) applicationContext.getBean("linkService");
		List<Link> linkList=linkService.getAllLink(); // 查询所有的友情链接信息
		application.setAttribute("linkList", linkList);
		
		String ctx=application.getRealPath("/");
		
		log.debug("根路径:{} ",ctx);
		application.setAttribute("ctx", ctx);
	}

	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		
	}


}

注意一点,在这里无法运用@Autowired自动注入来获取service层,只能通过getBean的方式来获取.

getBean中的参数是在配置@Service层时的参数,

例如:

写完这个监听器发放后,还要去配置web.xml,也就是说要告诉spring,这里有一个我们自己的监听器要去执行.

<!-- spring自身监听的配置,必须放在自定义的前面 -->  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  




  	<!-- 监听器:初始化组件 用于将一些页面需要经常访问的信息 存放到JavaWeb整个应用,生命周期为:从应用一启动到结束 ->起到类似缓存的作用 -->
	<listener>
		<listener-class>com.blog.service.common.Impl.InitComponent</listener-class>
	</listener>

配置完毕后,就可以启动了,可以断点调试,在监听器中打断点.启动项目,就会进入断点,我们可以查看.

前台利用JSTL表达式就可获取到存在application中的数据..

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值