[Spring]第3週-Mustace構成画面を使用


Spring BootとAWSが単独で実施するWebサービス-04章

テンプレートエンジン


指定したテンプレートフォーム+データを統合してHTMLドキュメントを出力するソフトウェア
Webサイトの画面を作成するためのフォーム
  • サーバテンプレートエンジン:JSP、Freemakerなど
  • サーバ上でJavaコードを使用して文字列を作成し、HTMLに変換してブラウザ
  • に転送する.
  • クライアントテンプレートエンジン:react、Vueなど
  • の単一ページアプリケーションを使用してブラウザに
  • 画面を作成
  • サーバjsonまたはxml形式のデータのみを転送->クライアント組立
  • スプリングガイドを使用してサーバ側でJavaScriptを提示することは容易ではない
  • .

    麝香草


    最も簡単なテンプレートエンジンは、
  • JavaScript、Python、phpなどの多くの言語をサポートします.
    テンプレートエンジン
  • は、
  • JSPなどのHTMLテンプレートを作成する
  • Javaで使用する場合はサーバ、JavaScriptで使用する場合はクライアントテンプレートエンジン
  • Javaで使用されるサーバテンプレートエンジン(JSP、Velocity、Freemaker、Thymeleafなど)の利点と比較
  • 単純構文
  • 論理コードX->を使用して、ビューをサーバから明示的に分離する
  • .
  • すべてのクライアント/サーバテンプレート
  • に使用できる構文
  • は、インテリジェントコミュニティのバージョンとして
  • も提供しています.
    ファイルの場所:src/main/resources/templates

    index.ひげが生える


    ロール:最初のページ
    htmlドキュメントの簡単な作成

    Web/Index Controlクラスの作成


    ロール:URLをマストリッチにマップ
  • Masterの役割:コントローラが文字列を返すと、前のパス(/src/main/resources/templates)と後のファイル拡張子(.mustache)
  • が自動的に指定されます.
    @GetMapping("/")
        public String index() {
            return "index";
        }
    /src/main/resources/templates/index.Muscacheに切り替え、URLリクエストの結果を渡すためにタイプと値を指定する管理者によって処理されます.

    テスト




    投稿登録画面の実装


    先週PostsApiコントローラを使ってAPIを実現しました
  • ガイドバー、jQuery(フロントエンドライブラリ)利用:外部CDN利用
  • レイアウト(共通領域を個別のファイルに分割して必要な場所に書き込む)、
  • を追加します.
  • cssをヘッダーに、JavaScriptをフッターに、ページのロード速度を速める
  • ブートストラップとjクエリーの関係(ブートストラップを実行できるのはjクエリーのみ)
  • {{>layout/header}}
        <h1>스프링 부트로 시작하는 웹 서비스</h1>
        <div class="col-md-12">
            <div class="row">
                <div class="col-md-6">
                    <a href="/posts/save" role="button" class="btn btn-primary">글 등록</a>
                </div>
            </div>
        </div>
    {{>layout/footer}}
  • の文書登録ボタンを押して「/posts/save」(API呼び出しが挿入されていないJavaScriptコード)
  • に移動します.

    IndexControllerクラスに追加

    ...
    @GetMapping("/posts/save")
        public String postsSave() {
            return "posts-save";
        }
    ...

    posts-save.ひげを作成してサーバーを実行



    登録投稿のAPIの追加



    ✔src/main/resources/staticの静的ファイル(JavaScript、CSS、画像など)URLに/(絶対パス)


    データベースに正常に保存されます.

    完全なクエリー機能の実現

  • index.ひげにMusthech文法を使う
  • {#posts}:postsという名前のリスト巡回
  • {変数名}:リストから抽出するオブジェクトを使用するフィールド
  • Posts Repositoryインタフェースにクエリー
  • を追加
    public interface PostsRepository extends JpaRepository<Posts, Long> {
        @Query("SELECT p FROM Posts p ORDER BY p.id DESC")
        List<Posts> findAllDesc();
    }
  • PostsListResponseDtoクラス
  • を作成
  • PostsServiceクラスにコードを追加
    マッピングによりPostsListResponseDtoを>ListのPostsListに変換
  • @RequiredArgsConstructor
    @Service
    public class PostsService {
        private final PostsRepository postsRepository;
        ...
        @Transactional(readOnly = true)
        public List<PostsListResponseDto> findallDesc() {
            return postsRepository.findAllDesc().stream()
            	.map(PostsListResponseDto::new)
            	.collect(Collectors.toList());
        }
    }
  • IndexControllerクラスの変更
  • モデル:ストレージサーバテンプレートエンジンで使用可能なオブジェクト
  • postsService.findAllDesc()をインポートした結果をpostsとしてインデックスします.ヒゲに伝える
  • private final PostsService postsService;
    
    @GetMapping("/")
    public String index(Model model) { // 서버 템플릿 엔진에서 사용할 수 있는 객체를 저장
        model.addAttribute("posts", postsService.findAllDesc());
        return "index";
    }