Springフレームワークに基づくWebアプリケーションで、Springのアプリケーションコンテキスト構成ファイルはどのようにapplicationgContext.xml
自動的に読み込まれますか?
Webプロジェクトを実行するとき、アプリケーションサーバー(JBoss、Tomcatなど)は、最初にプロジェクトソースパス内のweb.xml
ファイルを読み取り、その中の構成を解析し、構成を見つけますContextLoaderListener
。そのため、ContextLoaderListener
クラスのcontextInitialized
メソッドが実行され、このinitWebApplicationContext()
メソッドでメソッドが呼び出されます。メソッド名によれば、このメソッドはWebApplicationContextを初期化するために使用されていることがわかります。initWebApplicationContext()
内部実装方法以降コードに基づいてweb.xml
構成されたcontextConfigLocation
指定された属性をロードするためにapplicationContext.xml
Springコンテナ初期設定ファイルに従ってファイルを。
そこweb.xml
に設定contextConfigLocation
パラメータがない場合、applicationgContext.xml
ファイルをロードできませんか?
構成contextConfigLocation
パラメータがない場合、アプリケーションはデフォルト/WEB-INF/applicationContext.xml
でアプリケーションのルートディレクトリでファイルを検索します。つまり、これはデフォルトでロードされるファイルパスです。
このWebアプリケーションでのWebApplicationContextの初期化が完了したら、ServletContextと何をする必要がありますか?
でinitWebApplicationContext
あろう初期化メソッドの内部context
に保存ServletContext
に保たれ、特に、Map
型属性、key
でありWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
、value
オブジェクトWebApplicationContextの特定のインスタンスがあります。
これをコードでServletContext
取得したい場合はWebApplicationContext
、どうすればよいですか?
Springフレームワークは、WebApplicationContextUtils
このツールクラスのgetWebApplicationContext
メソッドを通じて取得できるツールクラスを提供します。
たった今ServletContext
、それは何のために使われますか?
ServletContext
一部のメソッドはServlet
、Servlet
コンテナとの通信を容易にするために定義されています。Webアプリケーションでは、Servlet
それらすべてが共通のメソッドを共有します。Spring ServletContext
がWebアプリケーションと組み合わせて使用される場合、SpringコンテナServletContext
がApplicationContext
保存されServletContext
ます。 Mapプロパティ内。
そこを理解していたweb.xml
中でListener
、Filter
およびServlet
初期化順序それ?
まず、<listener>
ラベルで宣言されたリスナークラスをインスタンスcontextInitialized()
化し、リスナークラスインスタンスオブジェクトのメソッドを呼び出し、アプリケーションコンテキストデータを初期化します。次に、<filter>
ラベルで宣言されたフィルタークラスをインスタンス化し、フィルタークラスインスタンスオブジェクトのメソッドを呼び出しますinit()
。<servlet>
タグ内でタグが使用されている場合、<load-on-startup>
最小値から最大値の順にServlet
インスタンス化され、対応するinit()
メソッドが呼び出されます。
といえばServlet
、Spring MVCのDispatcherServlet
誰かが知っていましたか?その実装原理について教えてください。
DispatcherServlet
SpringMVCのコアディストリビューターであり、要求の分散を実装し、要求を処理するためのエントリポイントです。これは1 Servlet
です。アプリケーションが起動すると、DispatcherServlet
初期化によってinit
メソッドが実行さDispatcherServlet
れます。ソースコード内にあるinit
メソッドはそれを継承しますHttpServletBean
。この初期化メソッドでは、WebApplicationContext
オブジェクトがインスタンス化context
さServletContext
れ、初期化されたオブジェクトが格納されてServlet
Springコンテナに関連付けられます。では方法、そのようなファイルのアップロードポリシー、URLリクエストの処理戦略など様々な要求処理戦略を、初期化マッピング処理戦略、例外処理戦略、これらの戦略の実装のほとんどは開始論理的表示の検索を、見つけることができませんでしたリロードの場合、初期化、さまざまなリクエスト処理ストラテジーの登録、クラスの処理など、同じディレクトリ内のさまざまなストラテジー。DispatcherServlet
onRefresh
WebApplicationContext
DispatcherServlet
DispatcherServlet.properties
HandlerMapping
具体的には、DispatcherServlet
リクエストの配布はどのように機能しますか?
まず、Spring MVCフレームワークは、起動時にSpringコンテナー内のすべてのBeanを走査し、注釈付き@Controller
または@RequestMapping
注釈付きクラスのメソッドを走査し、クラスとメソッドの@RequestMapping
注釈値をマージし、注釈@RequestMapping
の関連パラメーター値(などvalue
)method
等)、パッケージRequestMappingInfo
、本Controller
例では、方法及びパッケージにメソッドパラメータ情報(等タイプ、注釈、) HandlerMethod
、およびその後にRequestMappingInfo
などkey
、HandlerMethod
するvalue
までに保つMap
の構造handlerMethods
。
次に、@RequestMapping
の注釈value
(即ち、経路要求)の値であることを、採取しurl
、そしてその後url
にkey
順番RequestMappingInfo
にvalue
まで堆積物で、Map
構造urlMap
性。
クライアントは、要求に応じて、要求を送信するとURL
するurlMap
見つけ、見つけRequestMappingInfo
記載次いで、及びRequestMappingInfo
にhandlerMethods
対応を見つけるために、ルックアップHandlerMethod
その後、HandlerMethod
カプセル化されHandlerExecutionChain
、次に、すべての容器を反復HandlerAdapter
この要求をサポート見つけ、実装クラスHandlerAdapter
、などRequestMappingHandlerAdapter
実行し、 Spring MVCインターセプターのフロントメソッド(preHandle
メソッド)、次にリクエストパラメーターを解析して変換し、(リフレクションを使用して)特定のController
対応するメソッドを呼び出してModelAndView
オブジェクトを返し、インターセプターのポストメソッド(postHandle
メソッド)を実行して結果を返します処理を実行し、最後にafterCompletion
メソッドを実行します。