SpringMVCにおけるスクリーンセーバーの詳細及びコード例


本論文で研究したのは主にSpringMVCの中のスクリーンセーバーの紹介及び実例コードであり、構成などの内容は以下の通りである。
Springmvcのプロセッサブロックは、プロセッサを前処理および後処理するためのServlet開発中のフィルタFilterと類似している。本文は主にスプリングmvcの中でスクリーンセーバーがどのように定義されているかをまとめ、スクリーンセーバーの実行状況と使用方法をテストします。
1.スプリングmvcスクリーンの定義と配置
1.1スプリングmvcスクリーンの定義
springmvcでは、スクリーンセーバーを定義し、Handler Interceptorインターフェースを実現し、このインターフェースで提供される3つの方法を以下のように実現する。

//     1
public class HandlerInterceptor1 implements HandlerInterceptor{
	@Override
	  public Boolean preHandle(HttpServletRequest request,
	      HttpServletResponse response, Object handler) throws Exception {
		System.out.println("HandlerInterceptor1....preHandle");
		//false    ,     ;true    
		return true;
	}
	@Override
	  public void postHandle(HttpServletRequest request,
	      HttpServletResponse response, Object handler,
	      ModelAndView modelAndView) throws Exception {
		System.out.println("HandlerInterceptor1....postHandle");
	}
	@Override
	  public void afterCompletion(HttpServletRequest request,
	      HttpServletResponse response, Object handler, Exception ex)
	      throws Exception {
		System.out.println("HandlerInterceptor1....afterCompletion");
	}
}
この三つの方法について簡単に分析してみます。
  • preHandle方法:Handler方法に入る前に実行します。身分認証、身分認証に使用できます。例えば、認証がログインしていないことを示す場合、この方法でブロックしてから実行しないといけません。
  • postHandle方法:Handler方法に入ったら、ModelAndViewに戻る前に実行します。この方法にはmodelAndViewのイメージが見られます。アプリケーションシーン:modelAndViewから出発します。共通のモデルデータ(例えばメニューナビゲーションなど)をここでビューに伝えてもいいし、ここで同じビューを指定してもいいです。
  • afterComplection方法:Handlerを実行した後に実行します。アプリケーションシーン:異常処理を統一し、ログ処理などを統一する。
  • 1.2スプリングmvcスクリーンの配置
    springmvcでは、スクリーンは具体的なHandlerMappingに対して配置されています。つまり、あるHandlerMappingにブロックが配置されていたら、このHandlerMappingによって成功したhandlerは最終的にこのスクリーンを使用します。例えば、私たちが構成ファイルに配置したマッパーがorg.springframe ebork.web.servlet.hander.BenName Handler Mappingであると仮定して、このようにスクリーンセーバーを配置することができます。
    
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
      <property name="interceptors">
        <list>
          <ref bean="handlerInterceptor1"/>
          <ref bean="handlerInterceptor2"/>
        </list>
      </property>
    </bean>
    <bean id="handlerInterceptor1" class="ssm.intercapter.HandlerInterceptor1"/>
    <bean id="handlerInterceptor2" class="ssm.intercapter.HandlerInterceptor2"/>
    スプリングmvcでは、グローバルに似たブロックはどう配置されていますか?以上も述べたように、springmvcのスクリーンセーバは具体的なマッパーに対して、この問題を解決するために、springmvcフレームは配置された大域的なスクリーンセーバを各HandlerMappingに注入して、これで大域的なスクリーンセーバーになります。設定は以下の通りです
    
    <!--       -->
    <mvc:interceptors>
      <!--      ,      -->    
      <mvc:interceptor>
        <mvc:mapping path="/**"/> <!--        url   url   -->
        <bean class="ssm.interceptor.HandlerInterceptor1"/>
      </mvc:interceptor>
      <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="ssm.interceptor.HandlerInterceptor2"/>
      </mvc:interceptor>
      <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="ssm.interceptor.HandlerInterceptor3"/>
      </mvc:interceptor>
    </mvc:interceptors>
    私たちはこのような構成を使っています。でブロックするurlを指定すればいいです。
    2.スプリングmvcブロックの実行テスト
    上のHandlerInterceptor 1にならってもう2つのスクリーンショットを書きます。HandlerInterceptor 2とHandler Interceptor 3は、上のように配置されています。それから、三つのブロックの実行状況をテストして、関連の総括を行います。
    2.1 3つのスクリーンセーバーを全部通す
    つまり、3つのブロックのpreHandle方法では、リターン値をtrueに変更して、ブロックの実行順序をテストします。テスト結果は以下の通りです。
    Handler Interceptor 1….preHandle
    Handler Interceptor 2…preHandle
    Handler Interceptor 3….preHandle
    Handler Interceptor 3…postHandle
    Handler Interceptor 2…postHandle
    Handler Interceptor 1…postHandle
    Handler Interceptor 3…afterComplection
    Handler Interceptor 2…afterComplection
    Handler Interceptor 1…afterComplection
    印刷の結果に基づいて総括を行います。すべてのスクリーンセーバが実行されるとき、preHandle方法は配置の順序に従って実行します。また、他の2つの方法は、構成の順序に従って逆方向に実行される。
    2.2ブロックが一つあって、通らない。
    第三ブロックのpreHandle方法で戻り値をfalseに変えます。前の二つかそれともtrueか、ブロックの実行順序をテストします。テスト結果は以下の通りです。
    Handler Interceptor 1….preHandle
    Handler Interceptor 2…preHandle
    Handler Interceptor 3….preHandle
    Handler Interceptor 2…afterComplection
    Handler Interceptor 1…afterComplection
    印刷の結果に基づいてまとめを行います。
    1.スクリーンセーバ1と2がセットされているので、スクリーン3のpreHandleは実行できます。つまり前のスクリーンショットを放して、後のスクリーンショットがpreHandleを実行できます。
    2.ブロッキング3は通過しないので、他の2つの方法は実行されていません。つまり、あるブロックが通らないと、他の2つの方法は実行されません。
    3.ブロックが一つある限り、すべてのブロックのpostHandle方法は実行しませんが、preHandleを実行して、実行しても、afterComplection方法を実行します。
    2.3の3つのブロックは全部通行できません。
    このような状況は実は上の状況を参考にしてもいいです。特例です。運行結果も見てみます。
    Handler Interceptor 1….preHandle
    明らかに、最初のスクリーンセーバーのpreHandle方法だけを実行しました。全部実行しないので、postHandle方法とafterComplection方法を実行するものは一つもありません。
    3.スクリーンショットの使用
    第二の状況から見て、例えば、今は異常処理を統一するロジックを書きます。このブロックをブロックチェーンの第一の位置に置いて、必ず実行します。なぜなら、実行しただけです。afterComplettetionを実行します。そして、スクリーンチェーンの第一に置くと、afterComplection方法は最後に実行されます。内部で統一異常処理を実行するロジックがあります。
    また、認証ブロックに登録して、ブロックリンクの最初の位置に置く(統一異常処理があれば、統一異常処理の後に置くべき)。権限検証ブロックは、ログイン認証ブロックの後に置かれます(ログインが通過した後に権限が確認されますので)。
    ここに登録検証のブロックを書いて、スプリングmvcのスクリーンセーバーの使い方を説明します。
    3.1需要
    まず需要を見ます。何をブロックしますか?ブロックしたら何をしますか?考えは以下の通りです
    1、ユーザがurlを要求する
    2、ブロックを検証する
    要求されたurlが公開住所(ログインなしでアクセスできるurl)であれば、実行させる。
    ユーザsessionが存在しない場合は、ログインページにジャンプします。
    ユーザsessionが存在すれば、実行し、操作を継続する。
    3.2登録を実現するためのコントローラの方法
    
    //  
    @RequestMapping("/login")
    public String login(HttpServletRequest request, String username, String password) throws Exception {
    	//            
    	//....
    	//          
    	HttpSession session = request.getSession();
    	session.setAttribute("username", username);
    	return "redirect:queryItems.action";
    }
    //  
    @RequestMapping("/logout")
    public String logout(HttpServletRequest request) throws Exception {
    	HttpSession session = request.getSession();
    	session.invalidate();
    	return "redirect:queryItems.action";
    }
    3.3ログイン検証ブロックの実現
    
    //     1
    public class LoginInterceptor implements HandlerInterceptor{
    	//  Handler      
    	//        、    。                ,             ,     
    	@Override
    	  public Boolean preHandle(HttpServletRequest request,
    	      HttpServletResponse response, Object handler) throws Exception {
    		//     url
    		String url = request.getRequestURI();
    		//  url      (                  )
    		//                 
    		if(url.indexOf("login.action") > 0) {
    			//        ,  
    			return true;
    		}
    		//  session
    		HttpSession session = request.getSession();
    		// session         
    		String username = (String) session.getAttribute("username");
    		if(username != null) {
    			return true;
    		}
    		//               ,       
    		request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
    		return false;
    	}
    	//    ,           ,     
    }
    次に、スクリーンショットを設定します。
    
    <!--       -->
    <mvc:interceptors>
      <!--      ,      -->  
      <mvc:interceptor>
        <mvc:mapping path="/**"/> <!--      url   url   -->
        <bean class="ssm.interceptor.LoginInterceptor"/>
      </mvc:interceptor>
      <!--       -->
    </mvc:interceptors>
    このように私達が任意に一つのurlを要求すると、先ほど定義したブロックに捕獲されて、sessionにユーザ情報があるかどうかを判断します。ないとログインページにジャンプしてログインします。
    
    <form action="${pageContext.request.contextPath }/login.action" method="post">
         :<input type="text" name="username" /><br>
        :<input type="password" name="password" /><br>
      <input type="submit" name="  " />
    </form>
    スクリーンショットの使用は基本的にここまでです。
    締め括りをつける
    以上が本文のSpring MVCの中のスクリーンセーバーの詳しい解とコードの例のすべての内容に関してで、みんなに対してある程度助けがあることを望みます。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。