🐕

【初心者向け 089】ジョジョと勉強するSpring入門(プロジェクト環境設定)

2023/09/01に公開
2

はじめに

今日は、初めてSpringBootを実習し、記事を作成してみました。まったく初めての領域になるので、ゆっくり紹介していきたいと思います。

インストール

IntelliJ

https://www.jetbrains.com/idea/download/?section=windows

IntelliJは、EcilipseのようにJavaのプログラミングでよく使われるIDEです。
IntelliJは二つに分けられ、優良バージョンと無料バージョンがあります。

上段の青いラベルはIntelliJ IDEA Ultimateという優良バージョンで、我々は勉強のため、ダウンロードするバージョンはIntelliJ IDEA Community Editionです。
下段にスクロールすれば、ダウウンロード画面がでます。

JDK11

https://www.oracle.com/java/technologies/downloads/#java11

Javaの場合、11のバージョンのインストールをオススメします。
私の場合、8を基本pathに設定しておりますが、
実習では11を使用する予定です。

SpringBoot

https://start.spring.io/

SpringBootを基盤にしたプロジェクトを自動設定してくれるサイトです。
現時点、3.1xバージョンを提供していますが、java11の場合は、2.7xバージョンで設定します。 Gradleの場合、groovyとkotlinしかありませんでしたので、適用に選びました。
今後、問題になる場合、修正します!



インストールが終わり、Generateをクリックすれば、Spring projectのzipをダウンロードすることができます。これをintelliJにいimportします。

Open As Projectをクリックしますと、必要なlibraryが自動的にダウンロードされます。
最初に選んだgradleという設定のおかげです。

左側から色々なフォルダーがあります。
先ほどBuild.gradleは、設定情報などが書いています。importしたライブラリとjavaのバージョンなどを先ほどのURLから記入しますと自動で作成してくれます。

まず、HelloSpringAppliationと実行して、以下のようなメールが出たら大成功です。

sqlplus / as sysdba
SELECT DBMS_XDB.GETHTTPPORT() FROM DUAL;
EXEC DBMS_XDB.SETHTTPPORT(変更したいport番号);

Library

gradleを通して、webstarter, Thymeleafだけでなく、このライブラリを依存(Dependancy)関係にあるライブラリを自動的に引っ張ってダウンロードします。
様々なライブラリがありますが、一番有名なライブラリを話してみます。

Springboot Library

・spring-boot-starter-web
spring-boot-starter-tomcat
spring-web-mvc

WAS
WEBサーバーには主に2種類があり、クライアントのデーターのようにクライアントそれぞれの異なる情報があります。例えば、ログイン画面の名前とか会員情報などは人ぞれぞれで、そのようなページを動的情報といいます。
このように、DBと連携し、動的な情報を処理するサーバーをWASといいTOMCATはWASのような役割を担当しています。

・spring-boot-starter-thymeleaf
spring-boot-core
spring-boot-logging

Log
ログを記録するlogbackというライブラリとslf4jというインタフェースのようなものがあるようです。事務では、プログラムの状況と例外などをキャッチするため、printlnではなくlogを記録して、プログラムのイベントと状況を記録するようです。

Test library

junit:テストフレームワークです。
mockito:テストを実装(実行)するときに、作るダミーのようなDBをmockと言いますが、そのようなモックのライブラリです。
assertj のようにテストに使用するテストライブラリがあるようです。
spring-test : 統合テストを支援します。


View環境設定

静的ページ

このように、index.htmlという静的ページをWelcome pageとしてWEB Serverに乗せることができます。しかし、この場合はサーバーにたった一つのページをアップしていることにすぎません。

静的のページはcontroller を使わず、spring projectのフォルダー内にあるstaticフォルダーにあるhtmlをviewに転送されます。

Thymeleafは/に.htmlがありませんでしたが、staticの場合はhtmlをurlに入力し、アクセスしました。まず、コントローラーがあるかチェックし、ない場合自動的にstatic folderのhtmlファイルを優先的に探索します。

Thymeleafエンジン

Thymeleafは、View Templete Engineとして、サーバーからクライアントに応答するクライアント画面を作る役割をします。

例えば、Googleにログインすることを想像してみましょう。
承太郎さんがGoogleにログインする時とは 「承太郎さん、こんにち」 はというメッセージを表示され、仗助さんがGoogleにログインをする時には、「仗助さん、こんにち」 のように、同じURLだとしても、ログイン情報などによって、ダイナミックに表示されることが分かります。このように、訪問者のリクエストに応じてコンテンツを表示させるために使うのがThymeleafエンジンです。

まず、javaフォルダーにController のパッケージとクラスを作成します。

Controller&Templates


https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard

Controller
package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class JoJoController {
    @GetMapping("jotaro")
    public String jotaro(Model model){
         model.addAttribute("data","オラオラオラオラオラオラ!!!");
         return "jotaro";
    }
    @GetMapping("joske")
    public String joske(Model model) {
        model.addAttribute("data","ドラドラドラドラ!");
        return "joske";
    }
}

その後、resource -> templatesからこのようにhtmlを作成します。

Jotaro
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content = "text/html; charset=UTF-8" />
    <title>JoJo</title>
</head>
<body>
<p th:text="'こんにちは、丈太郎さん ' + ${data}" > </p>
<image src="https://i.ytimg.com/vi/o5lj1Pgjruo/maxresdefault.jpg";></image>
</body>
</html>
Joske
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content = "text/html; charset=UTF-8" />
    <title>JoJo</title>
</head>
<body>
<p th:text="'こんにちは、仗助さん' + ${data}" > </p>
<image src="https://i.ytimg.com/vi/M_UKhPK9tnI/maxresdefault.jpg";></image>
</body>
</html>

以上で、Controllerとtemplatesが完成されました。
先ほど、Springを通して、listeningしたlocalhost:8080にアクセスし、/jotaro, /joskeを
入力すれば、 datavalueを置換することが分かります。

key:data
Jotaroの場合valueは、
model.addAttribute("data","オラオラオラオラオラオラ!!!")
Joskeの場合valueは、
model.addAttribute("data","ドラドラドラドラ!")

@RequestParam

@RequestParamを追加することで、addAttributeattribute valueではなく、パラメターからの値を入れることもできます。

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("hello","hello!!");
        return "hello";
    }

    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam(value ="name") String name, Model model){
        model.addAttribute("name",name);
        return "hello-template";
    }
}
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello, ' + ${name}" > hello! empty</p>
</body>
</html>

この場合、attribute name = "key"に代入した変数nameの値がtemplatesの${name}に置換され、hello! emptyというメッセージは、p th:text=" 'hello ' + ${name}" に大体されます。 このような役割をするのがテンプレートエンジンの役割です。

Build

IntelliJだけでなく、WindowはCMD、MacはTerminalを通して、Buildすることができます。
Buildとはサーバーに何かを反映(depoy)する前にする事前準備です。
コンパイル、テスト、パッケージングなど、コードを実行できるようにする過程のことをいいます。過去はmavenを通してBuildを行ったようですが、今はgradleを利用します。
コードもとても簡潔で、性能も優秀ですからです。

buildの成功した場合、二つのjarファイルが生成されます。
18mbぐらいのjarファイルがありますが、cmdからjava -jar xxxxxxx.jarと入力すれば、8080ポートにlisteningすることができます。

Discussion

AirichanAirichan

JOJO、見たことはないけど
この説明の仕方面白いです笑笑
いいですね😆笑

Hyon🇰🇷Hyon🇰🇷

ありがとうございます😂
面白く読んで頂い嬉しいです!👍