Servlet过滤器主要就是拦截请求和响应,通常说的未登录的用户不能进入信息修改页面之类的,核心就是写一个类实现Filter,然后在xml里配置一下,就搞定了。。。。如果有错误的地方可以指出,我也会及时改正,这里也只是我一开始学习的时候写的,后期往后学习的过程中我也会不断完善、修改和补充。。。。。
(1)流程中,Filter在Servlet之前,Servlet就不写了,主要是doFilter()这个方法,init只会执行一次,在这里一般进行初始化的操作,而doFilter它是每请求一次就执行一次,这个方法里面就是自己自定义过滤的内容了,我这里是简单演示下过滤的是登录,如果你的xml配置的是所有路径,那么每次浏览器请求一次,都会经过过滤器一次,最后下面的destroy就是销毁了,整个流程挺简单的,清晰易懂,当然只是表层的东西,想要深层学习还得专研。
import javax.servlet.*; import java.util.*; //先实现Filter类 public class FilterTest implements Filter { public void init(FilterConfig config) throws ServletException { // 这里获取配置信息设置的初始化参数 String qyfilter = config.getInitParameter("qyfilter"); // 输出一下 System.out.println(qyfilter); } //然后具体就是这个方法了,一些拦截过滤的操作,这里演示一个-------验证当前页面是否进行了登录 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { String name = request.getParameter("name"); String pass = request.getParameter("pass"); if(name==null&&pass=null){//账号密码是否为空
response.setContentType("text/html;charset=utf-8");
response.sendRedirect("index.jsp");
}else{ chain.doFilter(request,response);//通过 } } public void destroy( ){ } }
(2)这里附上过滤器在xml里的配置,首先上面这个filter是初始化参数,param-name就是初始化参数名,后面的value就是参数值,这个对应的是init方法,在init里直接用FilterConfig的getInitParameter方法就可以获取value值,init-parm常见的是配置全站字符集,解决全网站的乱码问题,下面mapping就是过滤的路径了,我这里设置的是所有的路径都会被过滤,可以根据自己的项目需求来决定。
这里有个有注意的是url-pattern,/*是拦截所有请求,如果你写了一个servlet,验证账号密码并创建session,然后写一个过滤器是验证其他页面是否进行了登录,那么这个过滤器起码就不能拦截这个servlet,不然就尴尬了。
<filter> <filter-name>FilterTest</filter-name> <filter-class>FilterTest</filter-class> <init-param> <param-name>qyfilter</param-name> <param-value>初始化</param-value> </init-param> </filter> <filter-mapping> <filter-name>FilterTest</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>