MVC 패턴
- 프로그램을 Model - View - Controller 로 나누어 개발하는 디자인 패턴
Model
- Controller가 호출을 하면 DB와 연동하여 데이터와 연관된 비즈니스 로직을 처리 (CRUD)
View
- Controller로부터 받은 Model의 결과값을 사용자에게 화면으로 출력
Controller
- Model과 View 사이의 인터페이스(데이터 교환의 중간자) 역할
- 사용자로부터 View에 요청이 있으면 Controller는 해당 업무를 수행하는 Model을 호출하고
Model이 업무를 모두 수행하면 다시 결과를 View에 전달하는 역할을 합니다.
JSP를 사용하기 위한 설정
1. Spring Starter Project를 생성할 때 기존 5가지 의존성은 그대로 추가한다
- Spring Boot Devtools
- Spring Boot Actuator
- JDBC API
- Oracle Driver
- Spring Web
2. Spring Starter Project 생성 후 추가로 2가지 의존성을 직접 pom.xml에 추가해야 한다
1) JSTL (JavaServer Pages Standard Tag Library)
<!-- JSP를 사용하기 위한 의존성 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
2) Tomcat Embeded Jasper
<!-- 내장 서버에 JSP 처리 관련 규칙을 알려주는 의존성 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
** 의존성 검색
** 의존성을 복사하여 pom.xml에 붙여넣기 할 때 version은 반드시 지워야 한다 (자동으로 관리됨)
3. Web, XML, Java EE and OSGI Enterprise Development 설치
1) Help - Install New Software 선택
2) Spring Tool Suite 4 - https://download.springsource.com/release/TOOLS/sts4/update/latest 검색 후
맨 아래 Web, XML, Java EE and OSGI Enterprise Development 선택 후 finish
3) 설치 후 다음과 같이 JSP 파일을 만들 수 있게 된다
Spring boot와 JSP의 연동
1) src - main - webapp - WEB-INF에 views라는 폴더를 생성하고 hello.jsp 파일을 생성한다
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1>HelloJsp</h1>
2) src/main/java에 HomeController를 생성한 후 /hello Mapping을 통해 hello.jsp 파일을 리턴하도록 만든다
package com.kh.spring11.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/hello")
public String hello() {
return "/WEB-INF/views/home.jsp";
}
}
3) 인터넷 주소창에 다음 주소를 입력하면 다음과 같이 hello.jsp에 입력한 HelloJsp라는 글자를 볼 수 있다
view resolver
- controller의 return 경로를 입력할 때 사전에 설정해 둔 prefix(접두사)와 suffix(접미사)를 자동으로 붙여준다
- src/main/resources - application.properties에서 설정할 수 있다
# server
server.port=8888
# actuator
management.endpoints.web.exposure.include=beans,mapping,env
# jdbc
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=khacademy
spring.datasource.password=khacademy
# view resolver
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
** view resolver를 설정하면 controller에서 return 경로를 다음과 같이 축약형으로 쓸 수 있다
- prefix에서 설정한 /WEB-INF/views/를 home 앞에 붙인다
- suffix에서 설정한 .jsp를 home 뒤에 붙인다
package com.kh.spring11.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/hello")
public String hello() {
return "/WEB-INF/views/home.jsp";
return "home";
}
}
JSP 기초
JSP (Java Server Page)
HTML 페이지 안에 Java 코드 대신 템플릿 코드를 삽입하여 웹서버에서 동적으로 웹 페이지를 생성하여
웹브라우저가 표현할 수 있도록 전달해 주는 기술
JSP 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
- page language : 페이지에서 사용할 언어 (현재 Java만 사용 가능)
- contentType : 사용자(브라우저)가 받게 될 내용의 형태
** text/html은 text라는 대분류 속에 있는 html이라는 의미
** text/plain이면 작성한 코드 그대로를 사용자에게 보낸다
** audio/mp3이면 사용자에게 mp3 형태를 사용자에게 보낸다
- charset : 사용자가 받게 될 내용의 인코딩(변환) 형태 (UTF-8)
- pageEncoding : 서버에서 내부적으로 인코딩(변환)이 일어날 때 적용될 인코딩 방식
** 주석의 종류
<!-- --> | 사용자에게 보이는 주석 |
<%-- --%> | 사용자에게 보이지 않는 주석 |
<%@ @> | 설정용 주석 |
HTML (Hyper Text Markup Language)
- 하이퍼텍스트를 편집하기 위한 언어
** 하이퍼텍스트 : 일반 텍스트 문서와는 달리 링크를 통해 서로 연결되어 네트워크처럼 구성된 문서
- 태그(tag)를 기반으로 동작
- 시작 태그와 종료 태그가 있으며 해당 범위 내에 해당 태그의 효과를 부여
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
큰 틀에서
<html></html> | 문서의 범위 지정 |
<head></head> | 화면에 표시하지 않을 정보를 설정할 영역 지정 |
<body></body> | 화면에 표시할 정보를 설정할 영역 지정 |
<head></head> 내에서
<meta> | - 웹 페이지의 보이지 않는 정보를 제공 |
<title></title> | - 브라우저 툴바의 제목을 정의 - 즐겨 찾기에 추가 될 때의 페이지 제목 표시 - 검색 엔진의 검색 결과에서 페이지의 제목 표시 |
예외)
<!DOCTYPE> : 사용할 HTML 버전을 명시한다 (<!DOCTYPE html>의 경우 HTML 5를 의미한다)
<h#></h#> 태그
- 헤드라인 태그
<h1></h1> |
h1 |
<h2></h2> |
h2 |
<h3></h3> |
h3 |
<h4></h4> |
h4 |
<h5></h5> |
h5 |
<h6></h6> |
h6 |
<a></a> 태그
- 다른 페이지로의 연결(하이퍼 링크)을 정의
- href라는 속성으로 경로 설정
<a href = "경로"></a> | 태그 범위 내에 해당 경로로 이동하게 하는 하이퍼링크 부여 |
** 경로 - 절대 경로와 상대 경로
<!-- 절대 경로(absolute path) 방식 -->
<a href = "http://localhost:8888/tag/test01"></a>
<a href = "//localhost:8888/tag/test01"></a>
<a href = "/tag/test01"></a>
<!-- 상대 경로(relative path) 방식 -->
<a href = "test01"></a>
절대 경로(absolute path) 방식 : 어떤 위치에서든 동일한 위치를 지정
- http://호스트명:포트명/경로
- url에서 http:는 반드시 포함하므로 생략 가능
- 서버의 위치와 포트 번호인 //localhost:8888 생략 가능
상대 경로(relative path) 방식 : 현재 위치에서부터 시작하는 경로
- 엔드 포인트(마지막 /의 위치)가 같다면 엔드 포인트까지의 경로인 /tag/ 생략 가능
./ | 현재 위치 |
../ | 현재 위치 기준 상위 디렉토리 위치 |
<img> 태그
- 이미지 태그
- src라는 속성으로 이미지의 위치 설정
** project 외부의 이미지는 불러올 수 없으므로 사전에 src/main/resources - static 폴더에 넣어두어야 한다
- width와 height 속성으로 이미지의 크기 설정
** 크기를 숫자로 설정하면 픽셀(px) 단위로 설정된다
** 크기를 % 단위로도 설정할 수 있다 - 이 경우 창 크기에 따라 크기가 자동 조정된다
** width를 % 단위로 설정할 경우 height는 비율에 맞게 자동으로 조정된다
- alt라는 속성으로 이미지가 없을 때 나올 글자 설정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 절대 경로 -->
<img src = "http://localhost:8888/image/cheetah.jpg" width = "1920">
<img src = "http://localhost:8888/image/cheetah.jpg" width = "20%">
<img src = "/image/cheetah.jpg" width = "20%">
<!--
상대 경로
- 현재 위치 : http://localhost:8888/tag/test03
- 목적 위치 : http://localhost:8888/image/cheetah.jpg
** 상위 경로로 가기 : ../
-->
<img src = "../image/cheetah.jpg" width = "20%">
<!-- alt 속성 -->
<img alt = "치타 이미지" src = "../image/cheeta1h.jpg" width = "20%">
</body>
</html>
<form></form> 태그
- 사용자로부터 입력을 받을 수 있는 HTML 입력 폼(form)을 정의
- action이라는 속성으로 폼을 전송할 위치를 설정
- method라는 속성으로 폼을 전송할 방식을 설정 (post로 한다)
- <input> 태그를 통해 사용자로부터 입력을 받을 수 있는 입력 필드(input field)를 정의
- <button></button> 태그를 통해 입력 값을 전송
<input> 태그
- name이라는 속성으로 전송할 데이터의 이름(변수명)을 설정
요청 메소드
GET 요청
- 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용
- URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링 (query string) 이라고 부른다.
- GET 요청은 길이 제한이 있다
- GET 요청은 중요한 정보를 다루면 안된다 (모든 파라미터 노출)
POST 요청
- 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용
- HTTP 메시지 body 부분에 담아서 전송된다
- POST 요청은 데이터 길이에 제한이 없다
- POST 요청은 브라우저 히스토리에 남지 않는다
'국비교육 > 국비교육' 카테고리의 다른 글
STS (Spring Tool Suite) (0) | 2022.09.04 |
---|---|
day29 - 0902 (0) | 2022.09.01 |
day27 - 0831 (0) | 2022.08.31 |
day26 - 0830 (0) | 2022.08.30 |
day25 - 0829 (0) | 2022.08.30 |