2012-03-17 9 views

答えて

0

通常は、特定の条件に基づいてリクエストをフィルタ処理または変更する場合にフィルタを使用します。 S2を動作させるには、リクエストを制御、前処理、および/または後処理するときにServletを使用している間に、要求の実行を成功させるために特定の再処理と変更作業を実行する必要があります。

リクエストを制御するために、S2はサーブレットをフードで使用しますが、アプリケーション構造全体をよりクリーンで使いやすくするために隠しています。

これは、Java EE 6 Tutorialのフィルタのためのものです。

フィルタは、要求または応答のヘッダーとコンテンツ(またはその両方)を変換できるオブジェクトです。フィルタは、通常、フィルタ自体が応答を作成しないという点で、Webコンポーネントとは異なります。代わりに、フィルタは、あらゆる種類のWebリソースに「接続」できる機能を提供します。その結果、フィルタはフィルタとして動作しているWebリソースに依存するものであってはなりません。この方法では、複数のタイプのWebリソースで構成できます。

5

Struts2 Budi Karnival struts2の本では、コントローラとしてサーブレットにフィルタを使用するという明確な利点があります。フィルタを使用すると、静的なものを含め、アプリケーション内のすべてのリソースを簡単に選択することができます。

サーブレットでは、コントローラはアプリケーションの動的部分へのアクセスのみを処理します。以前のアプリケーションでweb.xmlファイルのurl-pattern要素は、静的リソースに対する要求がサーブレットコントローラによって処理されないように設定して

<servlet> 
    <servlet-name>Controller</servlet-name> 
    <servlet-class>...</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Controller</servlet-name> 
    <url-pattern>*.action</url-pattern> 
</servlet-mapping> 

ですが、コンテナによってことに注意してください。サーブレットコントローラで静的リソースを処理したくないのは、余分な作業が必要になるからです。

フィルタが異なります。フィルタは静的コンテンツの要求を通過させることができます。要求を渡すには、フィルタのdoFilterメソッドでfilterChain.doFilterメソッドを呼び出します。

したがって、コントローラとしてフィルタを使用すると、静的コンテンツの要求を含むアプリケーションへのすべての要求をブロックできます。次に、あなたの配備記述子に次の設定を持つことになります。このフィルタの

<filter> 
    <filter-name>filterDispatcher</filter-name> 
    <filter-class>...</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>filterDispatcher</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

利点:一つのことを確認するために、あなたは簡単に好奇心の目からあなたの静的なファイルを保護することができます。

ユーザーがJavaScriptファイルを表示しようとすると、次のコードは、エラーメッセージが送信されます:それはほとんどの決定の人からあなたのコードを保護しませんが、ユーザーがURLで、もはや入力することができます

public void doFilter(ServletRequest request, ServletResponse response,FilterChain  filterChain) throws IOException, ServletException { 
    HttpServletRequest req = (HttpServletRequest) request; 
HttpServletResponse res = (HttpServletResponse) response; 
String uri = req.getRequestURI(); 
if (uri.indexOf("/css/") != -1 && req.getHeader("referer") == null) { 
    res.sendError(HttpServletResponse.SC_FORBIDDEN); 
} else { 
    // handle this request 
} 
} 

をあなたの静的なファイルを見ることができます。同様に、画像を保護して、誰もあなたの費用でリンクできないようにすることができます。

もう一つの利点:Struts2のframework.Itでインターセプターの

紹介私たちのコーディング作業を削減するが、私たちは、コーディングやウェブで必要な変更のためのフィルタを使用していた任意のコードを書くことができますありません。 (フィルタよりも制御可能な)インターセプタに移動できるようになりました。すべての設定はstruts.xmlファイルで制御でき、web.xmlファイル

に触れる必要はありません
+0

@Punit_Patel Struts 1の 'ActionServlet'の' servlet-mapping'が '* .action'ではなく'/'に設定されていた場合、Struts 1は静的コンテンツはStrut 2の「FilterDispatcher」と同じ方法で動作しますか? – 8bitjunkie

+0

@ 7SpecialGems /とActionServletのURLマッピングを追加コードを書く必要がある場合たとえば、CSSファイルの場合は、CSSファイルを読み込み、レスポンスオブジェクトに書き込むためのコードを記述する必要があります。 Filterの場合は、フィルタのdoFilterメソッドでfilterChain.doFilterメソッドを呼び出すことができます。 –

関連する問題