zoukankan      html  css  js  c++  java
  • Java学习笔记之:Java Servlet 过滤器配置

    一、步骤

    1.创建一类实现Filter接口,重写父类的方法

    public class SimpleFilter implements Filter {
    
        public void destroy() {
            // TODO Auto-generated method stub
            
        }
    
        public void doFilter(ServletRequest arg0, ServletResponse arg1,
                FilterChain arg2) throws IOException, ServletException {
            // TODO Auto-generated method stub
            
        }
    
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
            
        }
    
    }

    2.配置web.xml文件,

    <!-- filter配置 -->
    <filter>
    <filter-name>filter</filter-name>
    <filter-class>com.mxp.filter.UserFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>filter</filter-name>
    <!-- <url-pattern>*.do</url-pattern> --><!-- url的配置方式 -->
    <url-pattern>/*</url-pattern><!-- 通配过滤的是所有url -->
    </filter-mapping>

     3.在dofilter()方法中处理可以放行的请求

    二、过滤器的生命周期

     1.服务器启动的时候执行初始化方法,它的初始化方法在servlet的init()方法之前执行

     2.在用户每一次发起url请求的时候会执行dofilter()方法,在doget()和dopost()方法之前执行.需要注意的是filter过滤的是url,而servlet的doget和dopost方法处理的是request请求

     3.在服务器销毁的时候执行destroy()方法

    三、实例

    1.index.jsp添加一个超链接

    <a href="login.do">测试</a> <br>

    2.新建servlet文件,用来处理超链接的请求

    public class UserServlet extends HttpServlet {
    
        @Override
        public void init() throws ServletException {
            // TODO Auto-generated method stub
    
            System.out.println("servletinit");
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            System.out.println("servletdo");
            req.getRequestDispatcher("main.jsp").forward(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            doGet(req, resp);
        }
    }

    3.添加过滤器

    public class UserFilte implements Filter {
    
        // 销毁
        public void destroy() {
            System.out.println("destroy");
        }
    
        // 过滤
        public void doFilter(ServletRequest arg0, ServletResponse arg1,
                FilterChain arg2) throws IOException, ServletException {
            System.out.println("UserFilte do");
            arg2.doFilter(arg0, arg1);//相当于放行
        }
    
        // 初始化
        public void init(FilterConfig arg0) throws ServletException {
    
            System.out.println("UserFilteinit");
        }
    
    }

    4.web.xml配置

        <servlet>
            <servlet-name>USER</servlet-name>
            <servlet-class>com.hgd.servlet.UserServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>USER</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    
        <filter>
            <filter-name>filter</filter-name>
            <filter-class>com.hgd.filter.UserFilte</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>filter</filter-name>
            <url-pattern>*.do</url-pattern>
        </filter-mapping>
        

    5.部署并打开主页,在控制台可以看到当服务器运行过滤器已经初始化了

    6.点击“测试”超链接,从控制台输出可以看出只有当过滤器请求通过了才会执行servlet中的dopost或doget方法

     

  • 相关阅读:
    C++中的空类,编译器默认可以产生哪些成员函数
    野指针(Wild pointer)和悬垂指针(dangling pointer)
    WHY C++ ?(by Herb Sutter) & C++17 standard
    mapreduce 多路输出
    stdout 编码 vim 删除左边,右边
    积累碎片shell
    python logging模块
    shell 流程控制
    shell 变量
    时间管理法则
  • 原文地址:https://www.cnblogs.com/huguodong/p/5995833.html
Copyright © 2011-2022 走看看