zoukankan      html  css  js  c++  java
  • filter-自己的理解

    在配置filter中的拦截功能时候 ,我们在web.xml中进行配置文件。filter过滤文件有系统自己带有的,还有就是我们手写的filter文件。网页调用servlter的时候,我们可以在此之前调用filter文件进行过滤然后在执行active里面的方法

    1.要想一个类文件成为一个过滤器文件,着该类实现java.selver.filter的接口。

    创建filter类要分为两个步骤

      建立filter处理类 

         FilterConfig可以获取部署描述符文件(web.xml)中分配的过滤器初始化参数。

         FilterConfig对象提供对servlet环境及web.xml文件中指派的过滤器名的访问。

    FilterConfig对象具有一个getInitParameter方法,它能够访问部署描述符文件(web.xml)中分配的过滤器初始化参数。

    web.xml文件配置Filter

    实现接口的3个方法

    《在此要看filter的api里面的方法》

    1.1 init(FilterConfig filterConfid);

      (服务器刚刚启动是会创建实例,这   个方法得到调用)这个方法可以读取web.xml中的servlet过滤的初始化参数

    1.2 doFilter(ServletResquest request,ServletReaponse reponse,FilterChain chain);

       ServletResquest 是接口 要用httpServletResquest的接口继承的  而   chain.toFilter();//chain.doFilter(request, response);  请求回转的方法

    1.3 destroy();

    下面是直接到页面

    //res.sendRedirect("../failure.jsp");

    下面这个是通过读取Filter文件进行跳转

    //res.getRequestDispatcher(login).forward(request, response);

    实例

    package com.ljq.servlet;

    import java.io.IOException;

    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 AuthorityFilter implements Filter {

        private FilterConfig config;

       

        // 实现初始化方法

        public void init(FilterConfig config) {

            this.config = config;

        }

        // 实现销毁方法

        public void destroy() {

            this.config = null;

        }

        // 执行过滤的核心方法

        public void doFilter(ServletRequest request, ServletResponse response,

                FilterChain chain) throws IOException, ServletException {

            // 获取该Filter的配置参数

            String encoding = config.getInitParameter("encoding");

            String login = config.getInitParameter("login");

           

            // 设置request编码用的字符集

            request.setCharacterEncoding(encoding);

            HttpServletRequest req = (HttpServletRequest) request;

           //获取session对象

            HttpSession session = req.getSession();

            // 获取客户请求的路径

            String requestPath = req.getServletPath();

           

           

            // 如果session范围的user为null,即表明没有登录

            // 且用户请求的既不是登录页面,也不是处理登录的页面

            if (session.getAttribute("username") == null

                    && !requestPath.endsWith(login)) {

                // forward到登录页面

                request.setAttribute("A", "您还没有登录");

                request.getRequestDispatcher

    (login).forward(request, response);

            }

            // 放行请求

            else {

                chain.doFilter(request, response);

            }

        }

    }

    Web.xml的实体类

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

        <!-- 定义Filter -->

        <filter>

            <filter-name>authority</filter-name>

            <filter-class>com.ljq.servlet.AuthorityFilter</filter-class>

            <!-- 下面3个init-param元素配置了3个参数 -->

            <init-param>

                <param-name>encoding</param-name>

                <param-value>UTF-8</param-value>

            </init-param>

            <init-param>

                <param-name>login</param-name>

                <param-value>/login.jsp</param-value>

            </init-param>

        </filter>

        <filter-mapping>

            <filter-name>authority</filter-name>

            <url-pattern>/*</url-pattern>

        </filter-mapping>

        <welcome-file-list>

            <welcome-file>index.jsp</welcome-file>

        </welcome-file-list>

    </web-app>

    文件是读取web.xml里面的<init-param></init-param>里面的属性  param-name得到value的值

    也可以这样子的格式

    下面只有一个过滤文件

    <filter> 

        <!-- Filter 的名字 --> 

        <filter-name>security</filter-name> 

        <!-- Filter 的实现类 --> 

    <filter-class> test.filter.SecurityFilter</filter-class>

    </filter> 

    <!-- 定义Filter 拦截地址 --> 

    <filter-mapping> 

        <!-- Filter 的名字 --> 

        <filter-name> security </filter-name> 

        <!-- Filter 负责拦截的URL --> 

        <url-pattern>/security/*</url-pattern> 

    </filter-mapping>

  • 相关阅读:
    《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇:简介及目录》(附上完整工程文件)
    Genesis-3D开源游戏引擎简介!
    《Genesis-3D开源游戏引擎--横版格斗游戏制作教程:简介及目录》(附上完整工程文件)
    《Genesis-3D开源游戏引擎-官方录制系列视频教程:进阶实例篇》
    《Genesis-3D开源游戏引擎-官方录制系列视频教程:基础操作篇》
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇07:全屏炸弹》
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇06:计分》
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇05:角色中弹》
    《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇04:碰撞检测》
  • 原文地址:https://www.cnblogs.com/zhx-PRE/p/4605860.html
Copyright © 2011-2022 走看看