当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

简易blog配置的filter介绍

发表于: 2010-05-23   作者:酷的飞上天空   来源:转载   浏览:
摘要: 这个blog一共就写了三个filter AbstractFilter 启动的核心filter,用来进行配置文件的读取与保存,简单连接池的初始化与关闭以及其他内容 BlogFilter 继承自AbstractFilter ,负责字符集过滤和连接的打开与释放 AdminFilter  拦截未登录用户的请求。   AbstractFilter 内容如下 publ

这个blog一共就写了三个filter

AbstractFilter 启动的核心filter,用来进行配置文件的读取与保存,简单连接池的初始化与关闭以及其他内容

BlogFilter 继承自AbstractFilter ,负责字符集过滤和连接的打开与释放

AdminFilter  拦截未登录用户的请求。

 

AbstractFilter 内容如下

public abstract class AbstractFilter implements Filter{
	public static BlogContext blogContext = new BlogContext();
	//网站最近一次启动以来的流量统计
	public static int totalNum = 0;
	@Override
	public void destroy() {
		DataSourceUtil.closePool();
		blogContext.destroyed();
		LogUtil.info(this.getClass().getName(), "数据库连接关闭操作完成");
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		//每一次有新的session,就使网站计数器加1
		if(WebUtil.getCookie("totalNum",request)==null){
			totalNum++;
			 WebUtil.setCookie("totalNum", ""+totalNum+"", response);
		}
	}
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		String xmlFilePath = filterConfig.getServletContext().getRealPath("/WEB-INF/blog.xml");
		blogContext.setXmlHandle(new SimpleXmlHandle(xmlFilePath));
		blogContext.init();
		DataSourceUtil.init(blogContext.getDatabaseUrl(), blogContext.getDatabaseUser(), blogContext.getDatabasePassWord());
		LogUtil.info(this.getClass().getName(), "数据库连接初始化完成.");
		//设置blog的大标题,/include/head.jsp用到。在UpdateUserInfoServlet中可能被修改
		filterConfig.getServletContext().setAttribute("blogTitle", blogContext.getUser().getBlogTitle());
		LogUtil.info(this.getClass().getName(), "博客标题为:"+BlogContext.getInstance().getUser().getBlogTitle());
	}
	public static int getTotalNum(){
		return totalNum;
	}
	public static BlogContext getBlogContext(){
		return blogContext;
	}
}

 从WEB-INF/blog.xml下面读取配置文件,将内容解析到blogContext下,关于blogContext在下篇贴出来,包括xml的简单解析器SimpleXmlHandle

blogContext.setXmlHandle(new SimpleXmlHandle(xmlFilePath)); 设置解析xml的解析器

blogContext.init();进行xml解析,并填充blogContext数据

DataSourceUtil.init(blogContext.getDatabaseUrl(), blogContext.getDatabaseUser(), blogContext.getDatabasePassWord()); 初始化数据库的链接池,从解析好的blogContext中获得连接信息

filterConfig.getServletContext().setAttribute("blogTitle", blogContext.getUser().getBlogTitle());从blogContext中取得标题信息,并设置为blog的标题

 

BlogFilter内容如下

public class BlogFilter extends AbstractFilter {

	private static ThreadLocal<Connection> connHold = new ThreadLocal<Connection>();
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		super.doFilter(request, response, chain);
		try {
			request.setCharacterEncoding("UTF-8");
			chain.doFilter(request, response);
		} finally {
			Connection conn = connHold.get();
			if(conn!=null){
				connHold.remove();
				DataSourceUtil.close(conn);
			}
		}
	}
	public static Connection getConnection(){
		Connection conn = connHold.get();
		if(conn==null){
			conn = DataSourceUtil.getConnection();
			connHold.set(conn);
		}
		return conn;
	}
	
}

 

内容不多说了,很简单。不用注释都能看懂。

 

AdminFilter 内容如下

public class AdminFilter implements Filter {

	@Override
	public void destroy() {
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest)request;
		String isLogin = WebUtil.getValueFromSession("isLogin", req);
		if(isLogin==null){
			((HttpServletResponse)response).sendRedirect(((HttpServletRequest)request).getContextPath()+"/login.jsp");
			return;
		}
		chain.doFilter(request, response);
	}
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
	}

}

 

以当前session是否含有key为isLogin的值为判断依据,有则代表已登录,否则反之。拦截地址为admin/*

 

 


 

简易blog配置的filter介绍

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
  最近,有时间看了点PHP的代码。参考PHP100教程做了简单的blog,网易云课堂2012年的教程,需要的
网上看了个例子,但是自己却运行不同,最后终于知道了原因,记录下来。原来没有给settings.py里的IN
  前几天在网上看到了篇采用Django搭建简易博客的视频,好奇心驱使也就点进去学了下,毕竟自己对
提到数据模型,一定要说一下MVC,MVC框架是现代web开发中最流行的开发框架,它将数据与业务逻辑分开
  天变冷了,人也变得懒了不少,由于工作的需要,最近一直在学习CodeIgniter(CI)框架的使用,没
main.go package main import ( "Dmgoweb/controllers" "Dmgoweb/models" "github.com/astaxie/beeg
首先设计博客主页,前面根据Pure,制作了一个基本的博客框架,现在就要向这个框架里添加内容,毫无
在J2EE中视频中讲到过滤器,只知道有这个东西,也大体知道它的作用,但是当时毕竟只是理论,没有用到实
http://zyan.cc/samba_linux_windows/ [文章作者:张宴 本文版本:v1.0 最后修改:2011.04.08 转载
基础环境: MySQL5.5.27 Apache 2.2.21 PHP5.4 Apache之httpd.conf配置 ServerName --- 服务器名称,
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号