SpringMVCインターセプターとSpringMVC例外処理メカニズムの詳細な説明
SpringMVCインターセプター
インターセプターの役割
Spring MVCのインターセプターは、プロセッサーの前処理と後処理に使用されるサーブレット開発のフィルターフィルターに似ています。
インターセプターは、インターセプターチェーンと呼ばれるチェーンに特定の順序でリンクされます。インターセプトされたメソッドまたはフィールドにアクセスすると、インターセプターチェーン内のインターセプターが以前に定義された順序で呼び出されます。インターセプターは、AOPアイデアの具体的な実現でもあります。
インターセプターとフィルターの違い
インターセプタークイックスタート
カスタムインターセプターは非常にシンプルで、次の3つのステップのみがあります
。①HandlerInterceptorインターフェースを実装するインターセプタークラスを作成する
②インターセプターを構成する
③インターセプターのインターセプト効果をテストする
①HandlerInterceptorインターフェースを実装するためのインターセプタークラスを作成する
public class MyHandlerInterceptor1 implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse
response, Object handler) {
System.out.println("preHandle running...");
return true; }
public void postHandle(HttpServletRequest request, HttpServletResponse
response, Object handler, ModelAndView modelAndView) {
System.out.println("postHandle running...");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse
response, Object handler, Exception ex) {
System.out.println("afterCompletion running...");
} }
②インターセプターを設定する
<!--配置拦截器-->
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/>
<bean class="com.itheima.interceptor.MyHandlerInterceptor1"/>
</mvc:interceptor>
</mvc:interceptors>
③インターセプターのインターセプト効果をテストする(ターゲットメソッドを書く)
@RequestMapping("/quick23") @ResponseBody
public ModelAndView quickMethod23() throws IOException, ParseException {
System.out.println("目标方法执行....");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name","itcast");
modelAndView.setViewName("index");
return modelAndView; }
インターセプターメソッドの説明
SpringMVC例外処理
例外処理のアイデア
システムの例外には、予期される例外と実行時の例外、RuntimeExceptionの2種類があります。前者は例外をキャッチして例外情報を取得し、後者は主にコードの開発とテストを標準化することで実行時の例外の発生を減らします。
次の図に示すように、システムのDao、Service、およびControllerはすべて、throws Exceptionを介して上向きにスローされ、最後に、SpringMVCフロントエンドコントローラーが例外ハンドラーに渡されて例外処理が行われます。
例外処理の2つの方法
1. SpringMVCが提供する単純な例外ハンドラSimpleMappingExceptionResolverを使用し
ます。2。Springの例外処理インターフェイスHandlerExceptionResolverを実装して、独自の例外ハンドラをカスタマイズします。
単純な例外ハンドラSimpleMappingExceptionResolver
SpringMVCはこのタイプのコンバーターを定義しており、使用時にプロジェクトの状況に応じて、対応する例外とビューをマップおよび構成できます。
<!--配置简单映射异常处理器-->
<bean
class=“org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”> <property name=“defaultErrorView” value=“error”/> //默认错误视图
<property name=“exceptionMappings”> <map> //异常类型 错误视图
<entry key="com.itheima.exception.MyException" value="error"/>
<entry key="java.lang.ClassCastException" value="error"/>
</map>
</property>
</bean>
カスタム例外処理手順
①HandlerExceptionResolverを実装するための例外ハンドラークラスを作成する
②例外ハンドラーを設定する
③例外ページを書き込む
④例外ジャンプをテストする
①HandlerExceptionResolverを実装するための例外ハンドラクラスを作成します
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
//处理异常的代码实现
//创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("exceptionPage");
return modelAndView;
} }
②例外ハンドラを設定する
<bean id="exceptionResolver"
class="com.itheima.exception.MyExceptionResolver"/>
③例外ページを書く
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html> <head><title>Title</title>
</head> <body>
这是一个最终异常的显示页面
</body>
</html>
④テスト例外ジャンプ
@RequestMapping("/quick22")
@ResponseBody
public void quickMethod22() throws IOException, ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
simpleDateFormat.parse("abcde");
}