JavaWeb三大组件
:サーブレット、フィルター、リスナー
1.Filter(フィルタ)
1.1。コンセプト
Web中的过滤器
:リソースへのアクセス・サーバは、フィルタは、いくつかの特別な機能を完了するために、要求を傍受することができた場合
1.2。ロールフィルタ
一般用于完成通用的操作
このようなログイン認証、統一符号化処理、敏感文字フィルタリングなど
1.3。クイックスタートフィルター
ステップ:
- 1。
定义一个类,实现接口Filter
新しい直接フィルタ
フィルターテンプレートを変更することができ、及び方法同様の変更サーブレットテンプレート:
- 2。
覆写方法
- 3。
配置拦截路径
- 1。
注解的配置
- 2。
web.xml配置
クイックスタートコードは次のとおりです。
package xpu.edu.web.Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")//访问所有资源之前都会执行该过滤器
public class FilterDemo1 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("FilterDemo1...");
//放行,不然访问不到资源
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
1.4。フィルターの詳細
1.4.1。フィルタの実行フロー
执行过滤器
执行放行后的资源
回来执行过滤器放行代码下面的代码
package xpu.edu.web.Filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class FilterDemo2 implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//对request对象请求参数增强
System.out.println("FilterDemo2执行了");
//放行
chain.doFilter(req, resp);
//对response对象的响应消息增强
System.out.println("FilterDemo2回来了");
}
public void init(FilterConfig config) throws ServletException {
}
}
1.4.2ライフサイクルフィルタ方式
init
:サーバーが開始された後は、Filterオブジェクトを作成し、initメソッドを呼び出します、一度だけ実行通常、リソースをロードするために使用されますdoFilter
:リソースを傍受したときにすべての要求が実行され、複数の実行destroy
:サーバーがシャットダウンされた後、サーバーが正常にシャットダウンされている場合、フィルタオブジェクトは、破壊され、それがdestroyメソッドを実行しますが、一度だけ実行一般的にリソースを解放するために使用されています
1.4.3。設定の説明をフィルター
拦截路径的配置
- 1.特定のリソースのパス:例えば「/index.jsp」としてのみアクセスindex.jspをリソース、フィルタが実行されます
- 2.ディレクトリ傍受:例えば、「/ユーザ/ *」のように、すべてのリソース・フィルターは、ユーザーアクセスの下で実行されます。
- 3.拡張傍受:例えば、「*の.jspファイル」として、リソースへのアクセスすべてのJSP接尾フィルタが実行されます
- 4.インターセプトすべてのリソース:「/ *」、フィルタを実行するためにすべてのリソースにアクセスする必要があります
拦截方式的配置
- 傍受方法:リソースは、このようなへのアクセスを要求するために、ブラウザまたは転送として、アクセスされていますか
- 傍受方法の設定
1. Notes構成:dispatcherTypesプロパティ、5つの値(実際に列挙)があります。
- REQUEST:デフォルトのブラウザに直接リソースを要求
- FORWARD:リソースへのアクセスを転送
- INCLUDE:リソースへのアクセスを含んでいます
- ERROR:エラージャンプリソース
- ASYNC:非同期アクセスリソース
- 複数の値を設定します:
2.web.xmlの
設定<ディスパッチャ> </ディスパッチャ>タグに
1.4.4。フィルタ・チェーン(フィルタの複数)
二つのフィルター、バックフィルタ2の前面にフィルタ1が存在する場合、それらは执行顺序
次のとおりです。
- フィルター1
- フィルター2
- 実装するためのリソース
- フィルター2
- フィルター1
2つのフィルタがあり、1をフィルタリングしたり、最初の2をフィルタリングする方法を知っていますか?問題があります:和配置有关
- 1.設定注釈:クラス名に基づいて比較文字列比較ルールは、最初の値が小さくなっています。以下のような:AFilterとBFilter、AFilter最初の実行
- 2.web.xml構成<フィルタマッピング>誰でも上記で定義され
2.Listener(リスナー)
2.1。コンセプト
リスナー:Web的三大组件之一
、イベントの検出メカニズム
- イベント:一つのこと
- イベントソース:ローカル出来事
- リスナー:オブジェクト
- イベントは、イベントソース、リスナーのコードの実行に発生したときに、イベント、イベントソース、バインドリスナー:リスナーを登録します
2.2.ServletContextListener
ServletContextListener:作成し、2つのメソッドを持っているServletContextオブジェクトを、リスニング破壊します:
- (ServletContextEvent SCE)contextDestroyedを無効:オブジェクトが破壊されるのServletContext場合、このメソッドが呼び出され
- (ServletContextEvent SCE)contextInitializedを無効:ServletContextオブジェクトが作成された後、このメソッドが呼び出され
ステップ:
- 1.インタフェースのServletContextListenerを実装するクラスの定義
- 2.メソッドのオーバーライド
- 3.設定
- web.xmlの
- コメント