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>