[Spring boot]스프링 부트 프로젝트

# SpringBoot 프로젝트 생성법
1) 웹 제작(Spring initializer) : http://start.spring.io
    - Project 빌드     : Gradle - Groovy
    - spring boot 버전 : 2.7.16 선택
    - spring Metadata : Artifact : 프로젝트 명 넣기 (예: helloworld)
    - Packaging       : War 선택
    - Java            : jdk 11 선택
    - (오른쪽화면) Dependencies : ADD Dependencies 버튼 클릭 : 라이브러리 추가
      (1) Spring Boot DevTools
      (2) Lombok
      (3) Spring Web
    - GENERATE 버튼 클릭 : zip 압축된 spring 프로젝트 파일 다운로드 됨
2) 인텔리제이 Ultimate(상용) : 위의 기능이 내장되어 있음
    - 이름 : 프로젝트명 넣기 (예: helloworld)

# SpringBoot 환경 설정 :
1) 인텔리제이 툴 설정 : 에디터 - 파일 인코딩 - (우측화면) 프로퍼티 파일 인코딩 : UTF-8
   명확한 Native에서 ASCII로 변환(체크)
2)                    빌드,실행,배포 - 컴파일러 - (우측화면) 프로젝트 자동빌드(체크)
3)                    고급 설정 - (우측화면) 컴파일러 - 개발된 애플리케이션이 현재...(체크)

https://start.spring.io/

기본 세팅

GENERATE 클릭해서 압축 파일 받고 폴더에 넣고 압축 풀고 실행

 

build.gradle에 밑에 코드 추가하고 코끼리 버튼 클릭

   //    jsp 라이브러리 추가
   implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' // 추가
   implementation 'javax.servlet:jstl' // 추가

디폴트 인코딩 UTF-8 설정 확인

WebMvcConfig

package com.example.controllerexam.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * packageName : com.example.HelloSpringBoot.config
 * fileName : WebMvcConfig
 * author : kangtaegyung
 * date : 2023/07/29
 * description : JSP 설정 파일
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * -----------------------------------------------------------
 * 2023/07/29         kangtaegyung          최초 생성
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
}

HelloWorldController

package com.example.controllerexam.controller;

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


/**
 * packageName : com.example.helloworld.controller
 * fileName : HelloWorldController
 * author : GGG
 * date : 2023-10-04
 * description : Hello World Controller
 * 요약 :
 *      url 에 해당하는 jsp 파일로 연결하기
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-10-04         GGG          최초 생성
 */
@Controller
public class HelloWorldController {

    @GetMapping("/exam00/hello")
    public String Hello(Model model) {

        return "/exam00/hello.jsp";
    }
}

ControllerExamApplication

package com.example.controllerexam;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ControllerExamApplication {

    public static void main(String[] args) {
        SpringApplication.run(ControllerExamApplication.class, args);
    }

}

ServletInitializer

package com.example.controllerexam;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ControllerExamApplication.class);
    }

}

application.properties에 밑에 글 붙여넣기

# 서버 포트
server.port=8000
# jsp 파일 경로
spring.mvc.view.prefix=/WEB-INF/views/
# jsp 파일 확장자 정의
#spring.mvc.view.suffix=.jsp
# 자바 소스 수정시 자동 재시작
spring.devtools.restart.enabled=true

hello 파일만들고 밑에 코드 붙여넣고 tab + !

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

버전 11로 변경

결과

인텔리제이에서 스프링 파일 만들기

ControllerExamApplication

설치완료

Helloworld의 controller 폴더와 config 파일 복사해서 붙여넣기

HelloWorldController 파일 수정

package com.example.controllerexam.controller;

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


/**
 * packageName : com.example.helloworld.controller
 * fileName : HelloWorldController
 * author : GGG
 * date : 2023-10-04
 * description : Hello World Controller
 * 요약 :
 *      url 에 해당하는 jsp 파일로 연결하기
 *      @명칭 : 자바의 어노테이션이라고 하고, 주로 함수/클래스/변수 위에 붙여서 사용함
 *        작은 기능이 함수에 추가됨
 *        목적 : 사용하면 코딩량이 획기적으로 줄어듬
 *      @Controller : 클래스에 컨트롤러 기능을 부여하는 어노테이션
 *      @GetMapping("url")함수(){ return "jsp페이지명"; }
 *      => url이 웹브라우저 주소창에 입력되면 -> jsp페이지가 화면에 출력됨
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-10-04         GGG          최초 생성
 */
@Controller
public class HelloWorldController {

    @GetMapping("/exam00/hello")
    public String Hello(Model model) {
        return "/exam00/hello.jsp";
    }

    @GetMapping("/exam00/hello2")
    public String Hello2(Model model) {
        return "/exam00/example01.jsp";
    }

//  TODO: 연습) url : "/exam00/hello2
//          => jsp : "/exam00/example01.jsp" : 화면에 Hello JSP & Spring boot 출력
//         함수를 만들어 주세요
}

결과

연습문제

HelloController

package com.example.controllerexam.controller.exam01;

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

/**
 * packageName : com.example.controllerexam.controller.exam01
 * fileName : HelloController
 * author : GGG
 * date : 2023-10-04
 * description : JSP, 타임리프  : SSR (Server Side Rendering)
 * 1) 구조 => Springboot 소스가 같이 있음
 * 2) html 파일을 Srpingboot 에서 만들어서 웹브라우저로 전송함
 * React/ Vue   : CSR (Client Side Rendering)
 * 1) 구조 => 소스가 분리됨
 * 2) html 파일을 최초 1회 전송하고
 * => 다음부터는 변경되는 부분만 서버에서 받고, 나머지는 웹브라우저에 자체 만듬
 *
 * @GetMapping(url)함수(){ return "jsp페이지명";}
 * => CRUD => Read 요청일때 사용하는 어노테이션
 * 요약 :
 * <p>
 * ===========================================================
 * DATE            AUTHOR             NOTE
 * —————————————————————————————
 * 2023-10-04         GGG          최초 생성
 */
@Controller
public class HelloController {

    @GetMapping("/exam01/hello")
    public String Hello(Model model) {
//    TODO: 해위맵 자료구조 : (키, 값) => jsp 페이지로 변수를(greeting, greeting2 ...) 전송
        model.addAttribute("greeting", "안녕 Springboot");
        model.addAttribute("greeting2", "Springboot 처음이지");
        model.addAttribute("greeting3", "수고해!!!");

        return "exam01/hello.jsp";
    }

    //  TODO: 연습 1) url : /exam01/hello2 => "exam01/example01.jsp" 에 "안녕 hello2 페이지 " 출력하기
//                                                                 "Springboot 처음이지"
//                                                                 "수고해!!!"
    @GetMapping("/exam01/hello2")
    public String Hello2(Model model) {
//    TODO: 해위맵 자료구조 : (키, 값) => jsp 페이지로 변수를(greeting, greeting2 ...) 전송
        model.addAttribute("greeting", "안녕 hello2 페이지");
        model.addAttribute("greeting2", "Springboot 처음이지");
        model.addAttribute("greeting3", "수고해!!!");

        return "exam01/example01.jsp";
    }

//  TODO: 연습 2) url : /exam01/hello3
//               jsp : "exam01/example02.jsp"
//               결과 :  "안녕 JSP 페이지야 "
//                      "JSP 에는 JSTL "
//                      "EL 표현식이 있습니다. "

    @GetMapping("/exam01/hello3")
    public String Hello3(Model model) {
        model.addAttribute("greeting", "안녕 JSP 페이지야");
        model.addAttribute("greeting2", "JSP 에는 JSTL ");
        model.addAttribute("greeting3", "EL 표현식이 있습니다. ");
        return "exam01/example02.jsp";
    }
    //  TODO: 예제 2) JSP 페이지로 모든 자료형을 보내기
//            url : /exam01/operation
//            jsp : exam01/operation.jsp
    @GetMapping("/exam01/operation")
    public String Operation(Model model) {

        String strNum = "10";
        int iNum = 100;
        String strVal = "a";
        boolean bVal  = true;

        model.addAttribute("strNum", strNum);
        model.addAttribute("iNum", iNum);
        model.addAttribute("strVal", strVal);
        model.addAttribute("bVal", bVal);

        return "exam01/operation.jsp";
    }

//  TODO: 연습 3)
//        url         : /exam01/hello4
//        jsp 페이지명 :  exam01/example03.jsp
//        결과        : boolean(bFlag), int(iParam),
//                     long(lParam), double(dParam) 변수 4개를
//                     만들어서 각각 자료형으로 전달해서 jsp 출력하세요
    @GetMapping("/exam01/hello4")
    public String hello4(Model model) {
        Boolean bFlag = true;
        int iParam = 10;
        long lParam = 15L;
        double dParam = 10;

        model.addAttribute("bFlag", bFlag);
        model.addAttribute("iParam", iParam);
        model.addAttribute("lParam", lParam);
        model.addAttribute("dParam", dParam);

        return "exam01/example03.jsp";
    }
}

hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO: jstl 표현식 사용을 위한 import --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<%-- jsp 주석 --%>
<%-- TODO: el(Expression Language) 표현식 : ${변수명}--%>
<p>${greeting}</p>
<p>${greeting2}</p>
<p>${greeting3}</p>

<%-- TODO: JSTL 표현식(참고) : <c:out value="${변수명}" /> --%>
<p><c:out value="${greeting}" /></p>
</body>
</html>

결과

example01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO: jstl 표현식 사용을 위한 import --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<%-- jsp 주석 --%>
<%-- TODO: el(Expression Language) 표현식 : ${변수명}--%>
<p>${greeting}</p>
<p>${greeting2}</p>
<p>${greeting3}</p>

<%-- TODO: JSTL 표현식(참고) : <c:out value="${변수명}" /> --%>
<p><c:out value="${greeting}" /></p>
</body>
</html>

결과

example02.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO: jstl 표현식 사용을 위한 import --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<p>${greeting}</p>
<p>${greeting2}</p>
<p>${greeting3}</p>
</body>
</html>

결과

operation.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO: jstl 표현식 사용을 위한 import --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <%-- bootstrap css cdn   --%>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<%-- TODO: spring 에서 전송한 값으로 사칙연산 , 논리연산 해보기  --%>
<div class="container p-3">
    <h2>산술연산자</h2>
    <div class="ms-3 mt-3">
        <%-- TODO: 문자열로 생긴 숫자는 자동으로 형변환 됨 (사칙연산시)     --%>
        <%--   jsp : java server page , 자바 문법 모두 사용가능 --%>
        <%--   jsp(.jsp) -> servlet(.java) --%>
        <p>덧셈 : ${strNum + 10}</p>
        <p>뺄셈 : ${strNum - 10}</p>
        <p>곱셈 : ${strNum * 10}</p>
        <p>나눗셈 : ${strNum / 10}</p>
        <p>나머지 : ${strNum % 10}</p>

        <p>숫자 연산 : ${iNum + 10}</p>

        <p>논리합 : ${bVal || false}</p>
        <p>논리곱 : ${bVal && false}</p>

        <p> 같음     : ${iNum == 100}</p>
        <p> 같지않음  : ${iNum != 100}</p>
        <p> 보다큼   : ${iNum >= 100}</p>
        <p> 보다작음  : ${iNum <= 100}</p>

        <p>조건(3항)  : ${(iNum == 100)? "100임" : "100이 아님"}</p>
<%--  TODO: empty(빈) : 변수의 값이 비었으면(null, 0, "") true, 아니면 false --%>
        <p>empty: ${empty iNum}</p>
        <p>empty: ${not empty iNum}</p

    </div>

</div>

</body>
</html>

결과

example03

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%--TODO: jstl 표현식 사용을 위한 import --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <%-- bootstrap css cdn   --%>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
</head>
<body>
<%--  TODO: el , jstl 표현식 --%>
<div class="container">
    <p>${bFlag}</p>
    <p>${iParam}</p>
    <p>${lParam}</p>
    <p>${dParam}</p>
</div>

</body>
</html>

결과

디자인패턴 Model View Controller
M 모델 클래스 (정보저장용)
V jsp, react
C 라우팅

'Spring Boot' 카테고리의 다른 글

[Spring Boot]JPAExam  (1) 2023.10.16
[Spring Boot] CRUD (create, read, update, delete)  (0) 2023.10.10
[Spring boot] 파라메터  (0) 2023.10.05