Spring Bootの基本的な学習ノート11:SpringBootでのSpringMVC統合のサポート

記事のディレクトリ

ゼロ、学習目標

  1. SpringBootでのSpringMVC自動構成を理解する
  2. SpringBootでのマスターSpringMVC関数の拡張とカスタマイズ

Web開発では、静的リソースへのアクセスサポート、ビューパーサーの構成、コンバーターとフォーマッターのカスタマイズ、ファイルのアップロードとダウンロードなどの機能が含まれ、Webサーバーに関連付けられたサーブレット関連コンポーネントのカスタマイズも必要です。 Spring Bootフレームワークは、Web開発を実現するために一般的に使用されるいくつかのWebフレームワークの統合をサポートし、デフォルトでWeb開発のいくつかの一般的な機能をサポートします。

1つは、SpringMVCの自動構成です。

(1)自動構成の概要

Spring Bootプロジェクトでは、Web依存関係スターターが導入spring-boot-starter-webされると、SpringMVCフレームワークによって統合されたSpringBootによって実装されるいくつかのXxxAutoConfiguration自動構成クラスが自動的に有効になり、追加の構成なしでWeb開発をほぼ実行できます。

(2)Spring Bootは、SpringMVCの自動構成機能を統合します

  1. 組み込みの2つのビューリゾルバー:ContentNegotiatingViewResolverおよびBeanNameViewResolver;
  2. 静的リソースをサポートし、WebJars;
  3. コンバーターとフォーマッターは自動的に登録されます。
  4. Httpメッセージコンバーターをサポートします。
  5. メッセージコードパーサーは自動的に登録されます。
  6. 静的プロジェクトのホームページをサポートしますindex.html;
  7. カスタムアプリケーションアイコンをサポートしますfavicon.ico;
  8. Webデータバインダーを自動的に初期化しますConfigurableWebBindingInitializer

次に、SpringMVC関数拡張の実装

ここに画像の説明を挿入

(1)SpringBootプロジェクトを作成します-SpringMvcDemo2021

  • SpringInitializrメソッドを使用してSpringBootプロジェクトを作成し、[依存関係]依存関係の選択でWeb依存関係スターターとThymeleaf依存関係スターターを選択します
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ここに画像の説明を挿入

(2)現在のプロジェクトを変換する-前のプロジェクトのコンテンツを移植する

  • 10回目の講義ケース[Thymeleaf18N]のhtmlテンプレートファイル、国際設定ファイル、グローバル設定ファイル、および関連するJavaファイル(エントリファイルを除く)を現在のプロジェクトの対応する場所にコピーします。
    ここに画像の説明を挿入
  • アプリケーションを起動し、成功するかどうかを確認します
    ここに画像の説明を挿入
  • ログインページにアクセスします-http:// localhost:8080 / toLoginPage
    ここに画像の説明を挿入
  • [すべてのユーザーを表示]ページにアクセスします-http:// localhost:8080 / allUsers
    ここに画像の説明を挿入

(3)MVC構成ファイルを記述し、ビュージャンプを定義します

1.コントローラーLoginControllerのtoLoginPage()メソッドのコメントをコメントアウトします。

ここに画像の説明を挿入

2.インターフェイスWebMvcConfigurerを実装し、addViewControllersメソッドを書き直します

ここに画像の説明を挿入

package net.hw.lesson11.config;

import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import sun.misc.Contended;

/**
 * 功能:自定义MVC配置
 * 作者:华卫
 * 日期:2021年02月27日
 */
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    
    
     /**
     * 添加视图控制器
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    
    
        // 当通过login.html访问时,直接跳转到login视图对应的页面,即login.html页面
        registry.addViewController("login.html").setViewName("login");
        // 通过toLoginPage访问时,也直接跳转到视图名login对应的页面,login.html页面
        registry.addViewController("toLoginPage").setViewName("login");
    }
}
  • 注:カスタムMVC構成クラスには注釈を付ける必要があります@Configuration
  • 注:toLoginPage()メソッドでは、属性はモデルを介して設定されます。モデルcurrentYearは、ログインページにジャンプするときにフロントエンドに渡されますが、現在定義されているView Controllerを介して直接渡されるため、データ転送は行われません。ログインページコードを変更する必要があります。プログラムでエラーが報告されないように、当面は年を表示しないでください。

3.ログインページを変更し、年を示すコードをコメントアウトします

ここに画像の説明を挿入

3.アプリケーションを起動し、効果をテストします

  • アクセスhttp://localhost:8080/toLoginPage
    ここに画像の説明を挿入
  • アクセスhttp://localhost:8080/login.html
    ここに画像の説明を挿入
  • どちらの方法でもlogin.htmlページにジャンプできます。もちろん、現時点では年は表示されません。

(4)ログインページに年を表示するインターセプターを作成します

インターセプターの役割は、ユーザーがリソースにアクセスする前にログインしているかどうかを判断するなど、アクセス要求の前後に関連する処理を実行することです。ログインしている場合はアクセスでき、そうでない場合はアクセスできません。この場合、アクセス要求後に当年の年データを取得し、ログインページに移動して表示します。

1.インターフェイスHandlerInterceptorを実装し、postHandle()メソッドを実装します

ここに画像の説明を挿入
ここに画像の説明を挿入

  • 注:リクエストを処理する前にpreHandle()メソッドを書き換え、リクエストを処理するためにpostHandle()メソッドを書き換え、リクエストの完了後にafterCompletion()メソッドを書き換える必要があります。
package net.hw.lesson11.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Calendar;

/**
 * 功能:自定义拦截器
 * 作者:华卫
 * 日期:2021年02月27日
 */
@Component
public class MyInterceptor implements HandlerInterceptor {
    
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, ModelAndView modelAndView) throws Exception {
    
    
        request.setAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR));
    }
}

2. MyMvcConfigのaddInterceptors()メソッドを書き直して、カスタムインターセプターをロードします

ここに画像の説明を挿入

3.ログインページを変更し、年を示すコメントをキャンセルします

ここに画像の説明を挿入

  • currentYearデータはコントローラーからではなくインターセプターから取得されるため、コンパイルでは解析できないというエラーが報告されます。データはランタイムリクエストの後でのみ取得できるため、コンパイルでは次のようになります。エラーを報告します。

4.アプリケーションを起動し、効果をテストします

  • アクセスhttp://localhost:8080/toLoginPage
    ここに画像の説明を挿入
  • アクセスhttp://localhost:8080/login.html
    ここに画像の説明を挿入
  • 年は両方の方法で表示でき、カスタムインターセプターのpostHandle()が有効になったことを示します。

(5)ログインブロッカーを作成して、ログインしていないユーザーがすべてのユーザー情報を表示できないようにします。

  • ログインしていないユーザーはユーザー情報を表示できない必要がありますが、インターセプターを定義する前に、パスを介してhttp://localhost:8080/allUsersすべてのユーザー情報を表示できます
    ここに画像の説明を挿入

1.ログインコントローラでtoLoginPageメソッドのアノテーションを復元します

ここに画像の説明を挿入

2.カスタムMVC構成で対応するViewControllerをコメントアウトします

ここに画像の説明を挿入

3.ログインコントロールのlogin()メソッドを変更します

ここに画像の説明を挿入

4.カスタムインターセプターのpreHandle()メソッドを書き直します

ここに画像の説明を挿入

  • ログインしていないユーザーを傍受し、ログインページに直接リダイレクトして、強制的にログインさせます

5.カスタムMVC構成ファイルでインターセプトできないパスを除外します

ここに画像の説明を挿入

6.アプリケーションを起動し、効果をテストします

ここに画像の説明を挿入

  • http://localhost:8080/allUsersログインするに、ログインページに直接アクセスしてジャンプしてください。ログインに成功すると、すべてのユーザー情報を表示できます。

3.クラス後の開発演習

1.ユーザーエンティティクラスを変更し、パスワードフィールドを追加します

2.セッションに保存されているユーザー文字列をユーザーオブジェクトに変換します

3. JPAおよびその他の方法を使用してユーザーをデータベースに保存し、データベースを使用してユーザー情報を照会してから、ログインして判断します。

おすすめ

転載: blog.csdn.net/howard2005/article/details/114162744