Javaweb---Filter(过滤器)学习

Filter是如何实现拦截的?

Filter接口中有一个doFilter方法,当我们编写好Filter,并在web.xml下对web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到如下目的:
  web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对 象,它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方 法,即web资源就会被访问,否则web资源不会被访问。

Filter实例

Filter开发分为两个步骤:
1.编写java类实现Filter接口,并实现其doFilter方法。

// An highlighted block
public class LoginFilter implements Filter {

	public void destroy() {
	}

	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		Object user = request.getSession().getAttribute("user");//获取域中键为user的值
		if (user == null) {

			request.setAttribute("myqx", "您还未登录!");  
			request.getRequestDispatcher("/user/toLogin").forward(request, res);//user为空  写信息 返回登陆页面
		} else {
			chain.doFilter(request, res); //不为空  继续访问
		}
	}

	public void init(FilterConfig config) throws ServletException {

	}

}

2.在 web.xml 文件中使用和元素对编写的filter类进行注册,并设置它所能拦截的资源。

// An highlighted block
<!-- 登录过滤器 -->
  <filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.cy.filter.LoginFilter</filter-class><!--自己编写的java类实现Filter接口  -->
   <init-param>    
        <param-name>excludedPages</param-name>    
        <param-value>/index</param-value>    <!-- 不必要过滤的项目 -->
    </init-param> 
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/*</url-pattern>          <!-- 要过滤的项目 -->
  </filter-mapping>

目录结构

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值