在进行web项目开发时,一个系统往往有一些数据不是经常变化的,我们可以采用web项目启动服务时就加载,这样避免多次操作数据库。
1、定义ContextLoaderListener,我们在启动服务时就加载数据
InitSysDictListener.java
package com.ww.commons.web;
import java.util.List;
import javax.servlet.ServletContextEvent;
import org.springframework.web.context.ContextLoaderListener;
import com.ww.commons.utils.Constants;
import com.ww.commons.utils.SpringContextHolder;
import com.ww.mbuy.domain.SysDict;
import com.ww.mbuy.service.SysDictService;
public class InitSysDictListener extends ContextLoaderListener {
private SysDictService sysDictService;
@Override
public void contextDestroyed(ServletContextEvent event) {
}
@Override
public void contextInitialized(ServletContextEvent event) {
// WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
sysDictService = SpringContextHolder.getBean(SysDictService.SERVICE_NAME);
// sysDictService = (SysDictService) context.getBean(SysDictService.SERVICE_NAME);
// 获得字典中的所有信息
List<SysDict> sysDictList = sysDictService.findAll();
event.getServletContext().setAttribute(Constants.SYSDICT, sysDictList);
}
}
2、web.xml中配置Listener
<listener>
<listener-class>com.ww.commons.web.InitSysDictListener</listener-class>
</listener>
3、为了方便对字典表的操作,定义了一个工具类:SysDictUtil.java
/*
* Copyright @ 2014 com.ww.trains
* mbuy 下午8:11:25
* All right reserved.
*
*/
package com.ww.commons.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import com.ww.mbuy.domain.SysDict;
/**
* 字典表工具类
*
* @desc: mbuy
* @author:
* @createTime: 2014年12月28日 下午8:11:25
* @history:
* @version: v1.0
*/
public class SysDictUtil extends HttpServlet {
/**
* 根据字典表type和lable字段,获得一条字典记录
*
* @author:
* @createTime: 2014年12月29日 上午9:04:00
* @history:
* @param request
* @param type
* @param lable
* @return SysDict
*/
public static SysDict getSysDictObject(HttpServletRequest request, String type, String lable) {
List<SysDict> list = getSysDictList(request);
Map<String, Object> map = getSysDictMap(list);
SysDict obj = (SysDict) map.get(type + "-" + lable);
return obj;
}
/**
* 根据字典表type字段,获得该类型下的所有字典信息
*
* @author:
* @createTime: 2014年12月29日 上午9:04:48
* @history:
* @param request
* @param type
* @return List<SysDict>
*/
public static List<SysDict> getSysDictObject(HttpServletRequest request, String type) {
List<SysDict> list = getSysDictList(request);
List<SysDict> sysDictByType = getSysDictByType(list, type);
return sysDictByType;
}
/**
* 根据字典表单type字段获得list集合
*
* @author:
* @createTime: 2014年12月29日 上午8:55:51
* @history:
* @param list
* @param type
* @return List<SysDict>
*/
private static List<SysDict> getSysDictByType(List<SysDict> list, String type) {
List<SysDict> nowDicts = new ArrayList<SysDict>();
for (SysDict sysDict : list) {
if (sysDict.getType().equals(type)) {
nowDicts.add(sysDict);
}
}
return nowDicts;
}
/**
* 从application获得字典表中的数据
*
* @author:
* @createTime: 2014年12月29日 上午8:51:32
* @history:
* @param request
* @return List<SysDict>
*/
private static List<SysDict> getSysDictList(HttpServletRequest request) {
ServletContext application = request.getSession().getServletContext();
List<SysDict> list = (List<SysDict>) application.getAttribute(Constants.SYSDICT);
return list;
}
/**
* 将list结合转化为map集合
*
* @author:
* @createTime: 2014年12月28日 下午8:03:48
* @history:
* @param sysDictList
* @return Map<String,Object>
*/
private static Map<String, Object> getSysDictMap(List<SysDict> sysDictList) {
Map<String, Object> map = new HashMap<String, Object>();
for (SysDict sysDict : sysDictList) {
map.put(sysDict.getType() + "-" + sysDict.getLabel(), sysDict);
}
return map;
}
}