web基础开发(五)

之前有事耽误,今天又回到了web的学习。想想大神们都在学习最新的kotlin,而我还在苦逼的java后台,想想。。。。。。算了,还是赶紧开始吧!!

过滤器

过滤器是服务器端组件,它可以截取用户端的请求与响应数据,并对信息进行过滤。

过滤器应用场景

比如:我们在登录一些网站的时候,如果我们没有登录,查看一些内容的时候,就会跳出网页来提示先登录。这里就是过滤用户请求,先进行登录。

拦截器工作原理



需要注意的是:过滤器在web服务器启动时,过滤器就开始生效。

过滤器的生命周期




  1. 实例化方法是在web服务器启动的时候执行,只执行一次。
  2. 初始化是在创建过滤器实例的时候执行,只执行一次,在这个方法中可读取web.xml文件中过滤器的参数。
  3. dofilter是每次进行过滤的时候执行。
  4. destory方法是在关闭服务器执行。

过滤器使用

  • 创建filter类
  • 配置web.xml
public class FirstFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		chain.doFilter(arg0, arg1);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}

注意需要实现Filter接口,是javax.servlet.Filter 包下。

一定要注意在执行dofilter方法时,一定要放行chain.doFilter(arg0, arg1)。

在dofilter获取request、response代码如下:

		HttpServletRequest request =(HttpServletRequest) arg0;
		HttpServletResponse response = (HttpServletResponse) arg1;





需要注意的是,filter-name必须一致。url配置,如果是/*就是过滤所有,如果是/index*,就是过滤所有index的。具体的大家试一下就知道了。配置的时候建议用

,比较简单。

过滤器疑惑

过滤器是能改变用户请求web资源,也能改变用户访问路径。最简单,如果你访问网站他会让你先登录。

过滤器是不能处理用户的请求,因为它不是servlet。

过滤器链


一个web项目可以有多个过滤器。必须多个过滤器的url—parttern路径一致,才可以生成过滤器链。

过滤器的分类

  1. request  (默认的 )
  2. forwardd
  3. include
  4. error


在使用error的类别时,需要先进行error-page的配置。


error code 就是类似404,500。location是发生改错t跳转的页面。
然后在进行error的过滤,并将过滤器类别设置为error。

Servlet 3.0新功能

添加了过滤器的ansy的分类,该分类可以在执行dofilter方法时,进行异步处理,不需要让用户等待时间长。






需要注意value和urlpatterns不能同时使用。

过滤实际使用场景


在使用过滤器,我们需要放行的路径的方法

通过配置过滤器初始化参数

配置的时候路径之间区分采用的是;间隔。

具体使用代码如下:
private FilterConfig config;
@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		config =arg0;
	String nofilter =  config.getInitParameter("nofilter");
		String[] nofiltervalues  = nofilter.split(";");
		for(int i = 0;i<nofiltervalues.length;i++){
		
			if(request.getRequestURL().indexOf(nofiltervalues[i])!=-1){
				System.out.println(nofiltervalues[i]+"fffffffffff");
				arg2.doFilter(arg0, arg1);
				return;
			}else{
				continue;
			}
		}
		if(request.getSession().getAttribute("username")!=null){
			arg2.doFilter(arg0, arg1);
		}else{
			System.out.println("20000");
			response.sendRedirect("login.jsp");
		}
		
		
	}
























































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值