지금 Spring framework + Jetty로 HelloWorld 웹 어플리케이션을 만들고 있습니다.

제목에서 보듯이 10년 만에 Java를 접할 수 있는 기회가 생겨서 지금 독학하고 있습니다.
가동 중인 기존 시스템의 학습이기 때문에 최신 기술 창고가 아니라 조금 낡은 조합이다.
웹 응용 프로그램을 배치하지 않고 로컬에서만 실행합니다.

사용한 도구와 필자의 지식 수준.

  • Mac book Pro
  • 반년 정도 사용하기 시작했다.사생활은 거의 Windows입니다.
  • Java
  • 약 10년 만에 터치.3년 정도 만졌어요.그때 마침 자바8을 발표했어요.
  • Maven
  • 아주 오래 전에 조금만 만져본 적이 있다.당시에는 주로 Ant였다.지금 Gradle이 주류예요?
  • Spring framework
  • 나는 이름을 안다.당시에는 Struts도 많았지만 지금은 Spring boot일 거예요.
  • IntelliJ IDEA Community
  • 나는 이름을 안다.당시에는 Eclipse만 사용했습니다.
  • Jetty Server
  • Java는 Tomcat 외에는 사용되지 않음
  • 환경 준비


    Java를 놓쳤기 때문에 직접 사용합니다.어른의 경우 14도 11도 아닌 Java8이기 때문이다.
    $ java -version
    java version "1.8.0_221"
    Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
    
    아무튼 맥이니까 brew로 Maven을 넣어요.
    $ brew install maven
    ()
    $ mvn -v
    Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
    ()
    Default locale: ja_JP, platform encoding: UTF-8
    OS name: "mac os x", version: "10.14.6", arch: "x86_64", family: "mac"
    

    IntelliJ 설치


    IntelliJ IDEA Community가 설치되어 있습니다.GUI로 넣었기 때문에 방법을 생략했습니다.
    취향에 따라 설정을 바꾸다.
    여기가 참고가 됐습니다.https://www.karakaram.com/intellij-idea-always-do-things/
    본인은 기본적으로 직접 사용하는 스타일이지만 정신위생적으로 좋지 않아서 키맵(특히 C-h, C-d)만 조금 했어요.

    항목 만들기


    먼저 GitHub에 빈 항목을 만든 다음 clone을 시작합니다.여기는 작업 목록입니다.
    $ git clone https://github.com/sekikatsu36/spring-sample.git
    $ cd spring-sample
    $ git config --local user.name "sekikatsu36"
    $ git config --local user.email "(略)"
    
    IntelliJ에서 Maven을 위한 새 프로젝트가 생성되었습니다.설정을 특별히 변경하지 않고 기본 설정을 유지합니다.


    이로써 초기 상태가 완성됩니다.
    $ ls -a
    .           .DS_Store       .gitignore      pom.xml         src
    ..          .git            .idea           spring-sample.iml
    

    스프링 프레임 설정


    인터넷에는 스프링 부트의 글이 많은데 스프링 프레임워크는 매우 적다.
    그럼에도 불구하고 스프링 프레임워크가 필요하기 때문에pom을 사용할 수 있도록 합니다.xml을 수정합니다.
    이것이 완성형이다.
    pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example.api</groupId>
        <artifactId>spring-sample</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    
            <!--  pom.xml内でバージョンを変数的に扱えるようにする -->
            <spring.version>5.2.5.RELEASE</spring.version>
            <jetty.version>9.4.11.v20180605</jetty.version>
        </properties>
    
        <dependencies>
            <!-- spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <!-- jetty -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.1</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.4.14.v20181114</version>
                </plugin>
            </plugins>
        </build>
    </project>
    
    최초 단계에서는 propertiesdependencies만 썼다.다른 점에 관해서는 나중에 추가로 설명하겠습니다.

    참조에 오류가 발생했을 때


    자신의 환경에서 찾을 수 없는 오류가 발생했다org.springframework.spring-webmvc:5.2.5.RELEASE.
    저장소에 존재합니다.
    다음을 수행합니다.
    mvn clean install
    
    결과
  • 로그 표시Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/spring-webmvc/5.2.5.RELEASE/spring-webmvc-5.2.5.RELEASE.jar
  • /Users/(ユーザ名)/.m2/repository/org/springframework/spring-webmvc/5.2.5.RELEASE 추가됨
  • IntelliJ에서 오류가 계속 표시되지만 Maven을 다시 로드하면 오류가 사라집니다
  • 소스를 쓰다


    기본적으로 https://qiita.com/kasa_le/items/6aaf17823db67c951fb0에 따라 하면 된다.
    하지만 이 기사는 IntelliJ IDEA Ultimate 였기 때문에 IDEA Community보기 만들기 이후 이렇게 움직이지 않았다.
    한 마디로 하면 컨트롤러의 제작과view 폴더의 제작이 이루어지기 전에 이렇게 끝납니다.
    다음 상태.
    /src/main
      /java/org/example/controllers
        IndexController.java
      /webapp/WEB-INF
        /views
        web.xml
        dispatcher-servlet.xml
    

    JSP 파일 만들기


    Community 버전의 경우 Spring 지원이 없기 때문에 파일 새로 만들기JSP/JSPX에는 나타나지 않습니다.https://www.jetbrains.com/ja-jp/idea/features/editions_comparison_matrix.html
    그래서 보통 선택File, 모두 자제한다.
    index.jsp
    <%@ page import="org.example.controllers.IndexController" %>
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>Spring Test Page</title>
        </head>
        <body>
            <p>${someAttribute}</p>
        </body>
    </html>
    
    

    Jetty로 시작합니다.


    어른들 때문에 Tomcat이 아니라 Jetty를 사용합니다.
    IntelliJ IDEA의 Ultimate(유상 버전)라면 Tomcat이 기본적으로 내장되어 있는 것 같습니다(?)하지만 커뮤니티이기 때문에 도저히 사용할 수 없습니다.
    Jetty는 사전 설치가 필요 없어서 편해요.
    참조http://zetcode.com/spring/jetty/,pom.xml에 다음 내용을 추가했습니다.
    
       <packaging>war</packaging>
    
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>9.4.14.v20181114</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    이런 상태에서.
    mvn jetty:run
    
    실행, 액세스http://0.0.0.0:8080 시 HelloWorld를 안전하게 표시합니다.
    maven-compiler-plugin에서 원본과 대상을 지정하지 않은 버전이 5인 것 같습니다. 오류가 발생했습니다.http://orionb312.hatenablog.com/entry/2018/03/06/233734
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project spring-sample: Compilation failure: Compilation failure: 
    [ERROR] ソース・オプション5は現在サポートされていません。7以降を使用してください。
    [ERROR] ターゲット・オプション5は現在サポートされていません。7以降を使用してください。
    

    끝내다


    완성된 물건은 아래와 같다.
    https://github.com/sekikatsu36/spring-sample
    아무튼 스프링이 이동하는 곳을 확인했어요.
    좀 더 하고 싶은 곳.
  • 웹페이지가 아닌 API를 하고 싶다 (Jersey 사용?)
  • 디버깅을 원합니다(현재는 단점일 뿐)
  • PaaS 또는 SaaS
  • 좋은 웹페이지 즐겨찾기