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>
posted on 2020-06-15 20:28  秋野ys。  阅读(144)  评论(0编辑  收藏  举报