SpringMVC:インターセプタ、POST中国のゴミ問題
1、インターセプタ
スプリングMVCは、フィルタ(フィルタ)と同様インターセプタ(インターセプタ)サーブレットは、ユーザの要求し、それに応じて処理をインターセプトするための主です。
フィルタとインターセプターの差:ブロッカーはAOP思想の適用です。
フィルタ
- サーブレット仕様の一部は、任意のJava Webプロジェクトを使用することができます
- *に/ URLパターンを設定した後、アクセスしたいすべてのリソースを傍受することができます
迎撃機
- インターセプタはSpringMVCのフレームワークを使用するためのプロジェクトを使用して、自分自身のSpringMVCフレームワークです
- 訪問は、JSP / HTML / CSS /画像/ JSが傍受されることはありませんであればインターセプタは、アクセス制御方法を傍受します
カスタム実装インターセプタ:
実施することによりHandlerInterceptorAdapter
インタフェースを、そしてSpring MVCのカスタムインターセプタを使用することができます登録。
HandlerInterceptorAdapter
インターフェイスは、3つのメソッドを提供します。
preHandle()
サービス・プロセッサーは、要求を処理する前に呼び出されます- この方法は、コントローラのメソッドの前に実行されます
- 戻り値は、後続の動作を継続するかどうかを示します。
- それは行くことを示す、trueを返します。
- falseを返します、割り込み(通話傍受方法および次回の実行コントローラを含む)すべての後続の操作。
postHandle()
サービスプロセッサが実行する処理要求が完了した後、実行する前にビューを生成- コントローラのメソッド呼び出しと解析には、ビューの前に実行した後。
- この方法は、モデルとビューにさらに変更を加えることができます。
afterCompletion()
DispatcherServletのでは完全に呼び出した後、要求の処理を完了し、リソースをクリーンアップするために使用することができます。- この方法は、終了(すなわち、端面図のレンダリング)全体の要求の後に行われます。
- あなたはこの方法で仕事にいくつかのリソースのクリーンアップ、ログやその他の情報を得ることができます。
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
春web.xml構成:
<mvc:interceptors>
<bean class="com.xu.web.interceptor.MyInterceptor1"/> <!-- 1 -->
<mvc:interceptor> <!-- 2 -->
<mvc:mapping path="/**"/> <!-- 3 -->
<mvc:exclude-mapping path=""/> <!-- 4 -->
<bean class="com.xu.web.interceptor.MyInterceptor2"/> <!-- 5 -->
</mvc:interceptor>
<mvc:interceptor> <!-- 6 -->
<mvc:mapping path="/hello"/> <!-- 7 -->
<bean class="com.xu.web.interceptor.MyInterceptor3"/> <!-- 8 -->
</mvc:interceptor>
</mvc:interceptors>
1
示され、インターセプタに登録されているすべての要求のグローバルインターセプターインターセプターインターセプトされています2 | 6
示され、部分的に遮断、明示的にどの傍受リクエストインターセプタを設定する必要が迎撃迎撃の下で登録されています。3
示され、すべてのパスを表すブロック4
示され、前提の下ではない、いくつかの要求を横取り/除く、特定のリクエストを傍受表し7
示され、全てのブロック表現/hello
のパスが始まると
インターセプタが複数、配列プレス呼び出すときpreHandle
の方法を、次いで逆それぞれインターセプタ呼び出しpostHandle
及びafterCompletion
方法は、すなわち:
- 用A
- Bについて
- Cの場合
- C-ポスト
- C-後
- B-ポスト
- B-後
- ポスト
- A-後
2、POSTは、中国の文字化けを要求します
Spring MVCのは、ゴミ問題を解決するために、専用のフィルターPOSTリクエストを提供し、web.xmlファイルを使用するように設定する必要があります。
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
要求は、一般的な構成設定ファイルTomcatを修正することで解決することができます。