# 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) 고급 설정 - (우측화면) 컴파일러 - 개발된 애플리케이션이 현재...(체크)
기본 세팅
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 |