- joinForm.jsp 파일을 아래와 같이 수정합니다.

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

<%@ include file="../layout/header.jsp"%>

<div class="container">
	<form>
		<div class="form-group">
			<label for="username">Username</label>
			<input type="text" class="form-control" placeholder="Enter username" id="username">
		</div>
		
		<div class="form-group">
			<label for="password">Password</label>
			<input type="password" class="form-control" placeholder="Enter password" id="password">
		</div>
		
		<div class="form-group">
			<label for="email">Email</label>
			<input type="email" class="form-control" placeholder="Enter email" id="email">
		</div>
	</form>
	
	<button id="btn-save" class="btn btn-primary">회원가입완료</button>
</div>

<script src="/blog/js/user.js"></script>
<%@ include file="../layout/footer.jsp"%>

필자는 form태그의 action, method를 이용한 form submit이 아닌 ajax를 이용하여 데이터 통신을 위해 위와 같이 설정하였습니다.

 

 

- user.js

static 하위에 js 폴더를 만들고 user.js 파일을 생성합니다.

let index = {
	init: function() {
		$('#btn-save').on('click', () => {
			this.save();
		});
	}
	
	, save: function() {
		let data = {
			user: $('#username').val(),
			password: $('#password').val(),
			email: $('#email').val()
		}
	}
}

index.init();

joinForm.jsp의 button에 대해 이벤트를 부여하고 form태그 내의 값들을 지정하는 로직입니다.

 

 

 

강의 주소 : https://youtu.be/oOJR2XCagdA

Header, Footer와 같이 공통되는 영역에 대해서는 중복되는 코드를 줄이게 위해 아래와 같이 layout으로 설정합니다.

 

1. 기존에 작성되었던 index.jsp에서 스크립트 태그를 body 가장 하단에 위치시켜줍니다.

2. header.jsp로 아래의 내용을 복사해줍니다.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
</head>
<body>
	<nav class="navbar navbar-expand-md bg-dark navbar-dark">
		<a class="navbar-brand" href="/blog">Ukss</a>
		<button class="navbar-toggler" type="button" data-toggle="collapse"
			data-target="#collapsibleNavbar">
			<span class="navbar-toggler-icon"></span>
		</button>
		<div class="collapse navbar-collapse" id="collapsibleNavbar">
			<ul class="navbar-nav">
				<li class="nav-item"><a class="nav-link" href="/user/login">로그인</a>
				</li>
				<li class="nav-item"><a class="nav-link" href="/user/join">회원가입</a>
				</li>
			</ul>
		</div>
	</nav>
	<br />

3. footer.jsp로 아래의 내용을 복사해줍니다.

	<br/>
	<div class="jumbotron text-center" style="margin-bottom: 0">
		<p>Created by Ukss</p>
		<p>📞 010-1234-1234</p>
		<p>🏴 서울시 강남구 테헤란로</p>
	</div>

<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

4. index.jsp로 다시 돌아와 header.jsp, footer.jsp 파일들을 include 해줍니다.

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

<%@ include file="layout/header.jsp" %>

	<div class="container">
	
		<div class="card m-2">
			<div class="card-body">
				<h4 class="card-title">제목 적는 부분</h4>
				<p class="card-text">내용 적는 부분</p>
				<a href="#" class="btn btn-primary">상세보기</a> 
			</div>
		</div>
		
	</div>
<%@ include file="layout/footer.jsp" %>

 

이제, 로그인화면과 회원가입 화면을 만들어줍니다.

이를 위해 UserController를 아래와 같이 작성합니다.

package com.cos.blog.controller;

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

@Controller
public class UserController {
	
	@GetMapping("/user/joinForm")
	public String joinForm() {
	
		return "user/joinForm";
	}
	
	@GetMapping("/user/loginForm")
	public String loginForm() {
		
		return "user/loginForm";
	}

}

 

로그인(loginForm.jsp) 화면을 아래와 같이 작성합니다.

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

<%@ include file="../layout/header.jsp"%>

<div class="container">
	<form action="/action_page.php">
		<div class="form-group">
			<label for="username">Username</label> <input type="text" class="form-control" placeholder="Enter username" id="username">
		</div>
		<div class="form-group">
			<label for="password">Password</label> <input type="password" class="form-control" placeholder="Enter password" id="password">
		</div>
		<div class="form-group form-check">
			<label class="form-check-label"> <input class="form-check-input" type="checkbox"> Remember me
			</label>
		</div>
		<button type="submit" class="btn btn-primary">로그인</button>
	</form>
</div>
<%@ include file="../layout/footer.jsp"%>

 

 

회원가입(joinForm.jsp) 화면을 아래와 같이 작성합니다.

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

<%@ include file="../layout/header.jsp"%>

<div class="container">
	<form action="/action_page.php">
		<div class="form-group">
			<label for="username">Username</label> <input type="text" class="form-control" placeholder="Enter username" id="username">
		</div>
		<div class="form-group">
			<label for="email">Email</label> <input type="email" class="form-control" placeholder="Enter email" id="email">
		</div>
		<div class="form-group">
			<label for="password">Password</label> <input type="password" class="form-control" placeholder="Enter password" id="password">
		</div>
		<button type="submit" class="btn btn-primary">회원가입완료</button>
	</form>
</div>
<%@ include file="../layout/footer.jsp"%>

 

 

 

 

 

강의 주소 : https://youtu.be/7uz311JqQKI

1. blog package 하위에 controller package를 생성 후 아래의 클래스를 생성합니다.

- UserController.java

- BoardController.java

 

2. src/main/webapp/WEB-INF/views/ 하위에 아래의 jsp를 생성합니다.

- index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<nav class="navbar navbar-expand-md bg-dark navbar-dark">
		<a class="navbar-brand" href="/blog">Ukss</a>
		<button class="navbar-toggler" type="button" data-toggle="collapse"
			data-target="#collapsibleNavbar">
			<span class="navbar-toggler-icon"></span>
		</button>
		<div class="collapse navbar-collapse" id="collapsibleNavbar">
			<ul class="navbar-nav">
				<li class="nav-item"><a class="nav-link" href="/user/login">로그인</a>
				</li>
				<li class="nav-item"><a class="nav-link" href="/user/join">회원가입</a>
				</li>
			</ul>
		</div>
	</nav>
	<br>

	<div class="container">
	
		<div class="card m-2">
			<div class="card-body">
				<h4 class="card-title">제목 적는 부분</h4>
				<p class="card-text">내용 적는 부분</p>
				<a href="#" class="btn btn-primary">상세보기</a>
			</div>
		</div>
		
	</div>
	
	<div class="jumbotron text-center" style="margin-bottom: 0">
		<p>Created by Ukss</p>
		<p>📞 010-1234-1234</p>
		<p>🏴 서울시 강남구 테헤란로</p>
	</div>

</body>
</html>

 

 

기본적인 HTML 구조를 완성합니다.

 

 

강의 주소 : https://youtu.be/f2IXBWi_8sA

1. Get요청(select)

http://localhost:8000/blog/user?username=ssar

특징 : body로 데이터를 담아 보내지 않습니다.

 

2. Post, Put, Delete 요청(데이터를 변경)

- 데이터를 담아 보내야 할 것이 많음.

- username, password, email, address, gender, createDate

- form 태그 method='Post'

- form 태그 -> get요청, post요청 (key=value)

- 자바스크립트로 요청을 해야함.

 

통일 : 자바스크립트로 ajax요청 + 데이터는 json으로 통일!! - 사용O

form:form 태그 -> post요청, put요청, delete요청, get요청 가능 - 사용X

 

3. 오브젝트로 데이터 받기

post방식의 key=value (x-www-form-urlencoded)

username=ssar

password=1234

오브젝트에 없는 key로는 값을 받을 수 없습니다.(없는 key를 보낸다고해서 오류가 나지는 않습니다.)

 

 

강의 주소 : https://youtu.be/gt17FdIl-3w

@ControllerAdvice
@RestController
public class GlobalExceptionHandler {

	@ExceptionHandler(value=Exception.class)
	public String handleArgumentException(IllegalArgumentException e) {
		return "<h1>"+e.getMessage()+"</h1>";
	}
}

@ControllerAdvice : 모든 Exception에 대해 수렴되게 하는 어노테이션입니다.

@ExceptionHandler(value=Exception.class) : Exception의 종류를 선언하여, 해당 Exception에 대해서 받을 수 있습니다.

 

 

 

강의 주소 : https://youtu.be/qYxWWWVpJkA

+ Recent posts