Web学習履歴(12) - filter_listener

fillets_listener

フィレット

リクエスト リソース (jsp、サーブレット、html) をフィルタリングするための特別なインターフェイスを実装する Java クラス

フィルタとは、サーバー上で実行され、リソース (サーブレットまたは jsp、html) を要求する前に実行されるプログラムです。フィルタは、javaweb テクノロジで最も実用的なテクノロジです。

機能
対象リソースの絞り込み(サーブレット、jsp)


xml 構成による使用方法

注釈として

フィルターのライフサイクル

init(FilterConfig): 初期化
doFilter(ServletReqeust req, ServletResponse resp, FilterChain chain): フィルタリングを実行するメソッド
destroy(): destroy

ライフサイクルの説明
1. サーバーの起動時にフィルターが初期化され、フィルターの init メソッドが実行される
2. リクエストのパスがフィルターの構成プロパティを満たすたびに、フィルターの doFilter メソッドが実行される3.
サーバーが正常にシャットダウンしたら、フィルターを破棄し、フィルターの destroy メソッドを実行します。

マップ パス

選択的フィルター リクエストの場合、フィルターにさまざまなマッピング パスを構成する必要があります。これにより、フィルターでフィルターしたい要求をフィルター処理できるようになります。

「/」で始まる完全なパスの一致フィルターは、「/」で始まり「*」で終わるパス ディレクトリの
一致のみをインターセプトできます現在のプロジェクトの下のすべてのパスは、「*」で始まる拡張子の一致をインターセプトできますサフィックスのインターセプト



傍受方法

フィルターを使用して、リソースにアクセスするさまざまな方法を区別できます。また、さまざまな傍受方法があります。

DispatcherType.REQUEST は
デフォルトで、ブラウザから送信されたリクエストとリダイレクトをフィルタリングします

DispatcherType.FORWARD は
、転送されたリクエストのみをフィルタリングします

@WebFilter(urlPatterns = "/demo02" ,dispatcherTypes = {
    
    DispatcherType.FORWARD,DispatcherType.REQUEST})
public class FileDemo02 implements Filter {
    
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    
        
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
    
        System.out.println("111");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
    
    

    }
}

フィルターチェーン

フィルターがリクエストを受け取ると、chain.doFilter を呼び出して、次に一致するフィルターにアクセスします。現在のフィルターが最後のフィルターである場合は、chain.doFilter を呼び出してターゲット リソースにアクセスします。

無効なシンボル

アイデア分析
スピーチを行うためのフォームを作成する
txt ファイルを作成し、その中に不正な文字を格納する
Filter を作成し、リクエストをインターセプトし、init メソッドで txt ファイル内の不正な文字をメモリに読み込み、
リクエスト内のパラメータを取得し、要求に応答する 不正な文字のパラメータを確認します.
音声に不正な文字が含まれていない場合は解放されます. 音声に不正な
文字が含まれている場合は、傍受され、ユーザーに不正な音声についてプロンプトが表示されます.

package illegalchec;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
@WebFilter("/*")
public class IllegaFilter implements Filter {
    
    
    private List<String> illegalWords = new ArrayList<String>();
    //new一个list
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    
    
        try{
    
    
            InputStream is = filterConfig.getServletContext().getResourceAsStream("IllegaWords.txt");
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
            String line = null;
            while((line = reader.readLine()) != null){
    
    
                illegalWords.add(line);

            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
    
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setContentType("text/html;charset = utf-8");
        request.setCharacterEncoding("utf - 8");
        String message = request.getParameter("message");
        for (String illegalWord : illegalWords){
    
    
            if (message != null && message.trim().contains(illegalWord)){
    
    
                response.getWriter().write("含有非法字符");
                return;
            }
        }
        filterChain.doFilter(request,response);
    }

    @Override
    public void destroy() {
    
    

    }
}

リスナー

リスナーは、他の JavaBean の変更を監視するために使用される Java クラスです
javaweb では、リスナーは
requestqa、session、3 つのドメイン オブジェクトの状態を監視する servletContext(application)です。

リスナーのアプリケーションは
主に Swing プログラミングと Android で使用され、 js でのイベントが
多数使用されます。

リスナーの用語
イベント ソース: リッスンされるオブジェクト ターゲット オブジェクト
リスナー オブジェクト: リッスンするオブジェクト
イベント: イベント ソース動作の名前

登録(バインディング):「イベントソース」に「リスナーオブジェクト」を登録
イベントオブジェクト:「リスナーオブジェクト」に「イベントソース」を取得

ServletContextListener は、
ServletContext オブジェクトの破棄と作成を監視します

作成: ServletContext サーバーが起動すると、サーバーは Web アプリケーションごとに個別の ServletContext を作成します。

破棄: サーバーがシャットダウンされたとき、またはプロジェクトから削除されたとき

ServletContextListenerの使用
ServletContextListener インターフェイスを実装するクラスを作成する
web.xml にリスナーを登録する

おすすめ

転載: blog.csdn.net/qq_49658603/article/details/108856128