Javaのフィルタの機能、種類、適用シナリオは何ですか?

王林
リリース: 2023-05-26 10:26:52
転載
1230 人が閲覧しました

    Filter の使用方法

    Java Web アプリケーションでは、Filter の使用は非常に簡単です。javax.servlet.Filter インターフェースを実装するクラスを記述するだけです。次に、フィルターを使用するように web.xml 構成ファイルでフィルターを構成します。以下はフィルターのコード例です:

    public class MyFilter implements Filter {
        public void init(FilterConfig filterConfig) throws ServletException {
            // 初始化操作
        }
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            // 过滤器逻辑处理
            chain.doFilter(request, response);
        }
        public void destroy() {
            // 销毁操作
        }
    }
    ログイン後にコピー

    web.xml 構成ファイルでフィルターを構成します:

    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.example.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    ログイン後にコピー

    上記のコードの タグは、フィルターの名前とクラス パスを指定します。フィルター: タグは、フィルターのマッピング ルール、つまりフィルターがインターセプトする URL を指定します。

    Filter のライフ サイクル

    Filter のライフ サイクルには、init()、doFilter()、destroy() の 3 つのメソッドがあります。

    init() メソッド: Filter の作成時に呼び出され、Filter を初期化するために使用されます。このメソッドは 1 回だけ呼び出されます。

    インターセプターが各リクエストをキャプチャすると、 doFilter() メソッドが呼び出され、リクエストとレスポンスが処理されます。次のフィルターの実行を継続する必要がある場合は、chain.doFilter(request, response) メソッドを呼び出す必要があります。そうでない場合は、このメソッドを呼び出す必要はありません。

    destroy() メソッド: フィルターが破棄されるときに呼び出され、リソースを解放するために使用されます。

    フィルターの実行順序

    web.xml 設定ファイルでは複数のフィルターを設定でき、その実行順序は設定ファイルで定義された順序で実行されます。例:

    <filter>
        <filter-name>FilterA</filter-name>
        <filter-class>com.example.FilterA</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterA</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>FilterB</filter-name>
        <filter-class>com.example.FilterB</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterB</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    ログイン後にコピー

    上記の構成では、FilterA が最初に実行され、次に FilterB が実行されます。

    フィルターの詳細

    自動ログイン

    Web アプリケーションでは、通常、自動ログイン機能を実装する必要があります。つまり、ユーザーが正常にログインした後は、自動ログイン機能を実装する必要があります。ユーザー名とパスワードは、次回訪問時に再度入力する必要があるため、直接アクセスするだけです。以下は簡単な自動ログインのアイデアです:

    • ユーザーがログインすると、ユーザー名とパスワードが Cookie に保存されます。

    • ユーザーがログインしているかどうかをフィルターで判断します。ログインしていない場合は、Cookie が存在するかどうかを判断します。Cookie が存在する場合は、Cookie 内のユーザー名とパスワードをログイン画面に自動的に入力します。フォーム。ログインを再度確認してください。

    次は、サーブレットにログインするための簡単なコード例です:

    public class LoginServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获取用户名和密码
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            // 验证用户名和密码
            if ("admin".equals(username) && "123456".equals(password)) {
                // 登录成功,保存用户信息到Session中
                HttpSession session = request.getSession();
                session.setAttribute("username", username);
                // 保存自动登录信息到Cookie中
                Cookie cookie = new Cookie("autologin", username + ":" + password);
                cookie.setMaxAge(7 * 24 * 60 * 60); // 设置Cookie过期时间为一周
                response.addCookie(cookie);
                // 跳转到首页
                response.sendRedirect(request.getContextPath() + "/index.jsp");
            } else {
                // 登录失败,返回登录页面
                response.sendRedirect(request.getContextPath() + "/login.jsp");
            }
        }
    }
    ログイン後にコピー

    次は、フィルターに自動的にログインするための簡単なコード例です:

    public class AutoLoginFilter implements Filter {
        public void init(FilterConfig filterConfig) throws ServletException {
            // 初始化操作
        }
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            // 判断用户是否已经登录
            HttpSession session = ((HttpServletRequest) request).getSession();
            String username = (String) session.getAttribute("username");
            if (username == null) {
                // 判断是否存在Cookie
                Cookie[] cookies = ((HttpServletRequest) request).getCookies();
                if (cookies != null) {
                    for (Cookie cookie : cookies) {
                        if ("autologin".equals(cookie.getName())) {
                            // 自动填充用户名和密码
                            String[] values = cookie.getValue().split(":");
                            String autologinUsername = values[0];
                            String autologinPassword = values[1];
                            request.setAttribute("autologinUsername", autologinUsername);
                            request.setAttribute("autologinPassword", autologinPassword);
                        }
                    }
                }
            }
            chain.doFilter(request, response);
        }
        public void destroy() {
            // 销毁操作
        }
    }
    ログイン後にコピー

    BeanUtils の使用

    ##Web 開発では通常、フォーム データを JavaBean オブジェクトに変換する必要があり、この機能は BeanUtils ツール クラスを使用して実現できます。 BeanUtils を使用してフォーム データを JavaBean オブジェクトにカプセル化すると、フォーム データの処理が簡素化されます。以下は BeanUtils の使用例です。

    public class UserServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获取表单数据
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            int age = Integer.parseInt(request.getParameter("age"));
            // 将数据封装成User对象
            User user = new User();
            try {
                BeanUtils.setProperty(user, "username", username);
                BeanUtils.setProperty(user, "password", password);
                BeanUtils.setProperty(user, "age", age);
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 保存用户信息
            UserService userService = new UserService();
            userService.saveUser(user);
            // 跳转到用户列表页面
            response.sendRedirect(request.getContextPath() + "/user/list.jsp");
        }
    }
    ログイン後にコピー
    上記のコードでは、フォーム データは BeanUtils.setProperty() メソッドを通じて User オブジェクトにカプセル化されます。

    以上がJavaのフィルタの機能、種類、適用シナリオは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:yisu.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート