java web编程学习3

这次要学习的是filter。红薯提供我又进行了些更改的hellofilter代码如下:

package demo;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.core.ActionHandler;
import com.core.Config;
import com.core.Handler;

public class HelloFilter implements Filter {
	private Handler handler;
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("Filter 初始化");
		Config.cns.add("Blog");
		handler = new ActionHandler();
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;
		System.out.println("拦截 URI="+request.getRequestURI());
		String coname = request.getParameter("c");
		System.out.println(request.getParameter("c") + Config.cns.contains(request.getParameter("c")));
		if(Config.cns.contains(coname)) {
			handler.handle((HttpServletResponse)res, request);
		}
		else {
			chain.doFilter(req, res);
		}
	}

	@Override
	public void destroy() {
		System.out.println("Filter 结束");
	}
}

 

HelloFilter实现了Filter接口,Filter定义了三个方法:

image

当我们启动tomcat后客户端还未访问的时候,控制台便输出了以下信息

image

控制台输出了”Filter 初始化”,即tomcat会自动初始化我们在web.xml注册的filter,即调用了init()方法。

当客户端访问 http://localhost:8080/hello.view 以后,控制台输出:

image

也就是说访问了一次,tomcat在执行某个servlet前会调用doFilter,所以我们需要将filter交给框架指定的filter类(试了试osc上很热门的jfinal,很不错),这样整个工程就会交给框架托管了。doFilter有三个参数,ServletRequest、ServletResponse和FilterChain。

ServletRequest、ServletResponse这两个参数想来肯定就是传给servlet那个public的service方法了。至于FilterChain,字面的意思就是过滤链了,如果我们在web.xml注册了多个Filter的话,就会带着ServletRequest、ServletResponse去执行下个Filter的dofilter方法。在这个案例,由于我们只有一个Filter,所以就去执行具体的servlet方法了。

Filter可以拦截下http请求,我们可以在这里可以做些额外的工作,比如判断用户是否登陆啊等等,当然我也没有具体做过开发,没什么发言权,希望有人给点指点,让我理解得更好点。

至于destory方法,和init方法一样也是由web容器调用的,当服务结束的时候调用,可是每次我关闭tomcat的时候,由于小黑窗关得太快,我都看不到啊,怎么写进日志里呢,求大神指点。

转载于:https://my.oschina.net/u/922172/blog/224293

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值