Filter的基本功能:对 Servlet容器调用Servlet的过程进行拦截,从而在 Servlet进行响应处理的前后实现一些特殊的功能。
所用到的Jar包:javax.servlet-api-3.0.1.jar
在web项目中添加一个Filter,
首先要船建一个类,实现Filter这个接口,在doFilter()这个函数里添加拦截(过滤)的逻辑代码,
然后在项目中的web.xml中注册你所实现的filter,并设置请求哪些资源需要经过过滤器。
LoginFilter代码(对没有登陆的用户请求进行拦截):
package com.hgd.filter;
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.HttpSession;
public class LoginFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("FilterWorking...");
HttpServletRequest req = (HttpServletRequest)request;
HttpSession session = req.getSession();
if(session==null||session.getAttribute("userinfo")==null&&session.getAttribute("admininfo")==null){
req.getRequestDispatcher("login.jsp").forward(req, response);//未登陆,跳转到登录页面
}
else
chain.doFilter(request, response);//已经登陆,放行
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
web项目中WEB-INFO目录下的web.xml配置:
<filter>
<!-- filter的名称 -->
<filter-name>loginfilter</filter-name>
<!-- 全类名 -->
<filter-class>com.hgd.filter.LoginFilter</filter-class>
</filter>
<!-- 映射 -->
<filter-mapping>
<filter-name>loginfilter</filter-name>
<!-- 设置需要过滤才能请求的资源(这里是用户请求所有的JSP页面时都需要过滤) -->
<url-pattern>*.jsp</url-pattern>
</filter-mapping>