1. ํ์ ๊ฐ์ ํ๋ฉด HTML ๋ฆฌ๋ทฐ
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.8.2/css/all.min.css" />
<!--Style ํ๊ทธ ์ด์ฉํด์ HTML ์์ CSS๋ฅผ ๋ฃ์ด์คฌ๋ค.-->
<style>
* { box-sizing:border-box; }
form {
width:400px;
height:600px;
display : flex;
flex-direction: column;
align-items:center;
position : absolute;
top:50%;
left:50%;
transform: translate(-50%, -50%) ;
border: 1px solid rgb(89,117,196);
border-radius: 10px;
}
.input-field {
width: 300px;
height: 40px;
border : 1px solid rgb(89,117,196);
border-radius:5px;
padding: 0 10px;
margin-bottom: 10px;
}
label {
width:300px;
height:30px;
margin-top :4px;
}
button {
background-color: rgb(89,117,196);
color : white;
width:300px;
height:50px;
font-size: 17px;
border : none;
border-radius: 5px;
margin : 20px 0 30px 0;
}
.title {
font-size : 50px;
margin: 40px 0 30px 0;
}
.msg {
height: 30px;
text-align:center;
font-size:16px;
color:red;
margin-bottom: 20px;
}
.sns-chk {
margin-top : 5px;
}
</style>
<title>Register</title>
</head>
<body>
<!--form ํ๊ทธ -> ์ฌ์ฉ์๋ก๋ถํฐ ์
๋ ฅ์ ๋ฐ์ ๋ฐฑ์๋์ ์ ์ถํ๋ ค๋ฉด,
์
๋ ฅ ๋ฐ๋ ๋ด์ฉ๋ค ์ ๋ถ form ํ๊ทธ๋ก ๊ฐ์ธ์ผ ํ๋ค.-->
<form>
<div class="title">Register</div>
<!--์๋ฌ ๋ฉ์ธ์ง๊ฐ ๋จ๋ ์์น id ="msg"์ธ div์ ๋น๊ณต๊ฐ์ผ๋ก ์๋ฌ ๋ฉ์ธ์ง๊ฐ ๋ค์ด์ด-->
<div id="msg" class="msg"> </div>
<!--label์ for์ ๋ ์ด๋ธ๊ณผ ๊ฐ์ด ๋ฌถ์ผ input์ id๋ฅผ ์น๋ฉด ๋๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ์ input๋ค์ด id ๋ง๊ณ ๋ค class๋ฅผ ์ด๋ค.
์๋ for = "๋ฌถ์ผ input์ id"๋ก ๋ ์ด๋ธ๊ณผ ์ธํ์ ์๋ก ๋ฌถ์ผ๋ฉด,
๋ ์ด๋ธ ํด๋ฆญ ์ ํด๋น input์ ์
๋ ฅ์ฐฝ์ด ๋๋ฌ์ง๋๋ก ํ ์ ์๋ค.-->
<label for="">์์ด๋</label>
<!--input์ type์ ์
๋ ฅ ๋ฐ์ ๊ฐ์ ์๋ฃํ์ ์ค์ ํ๋ ๊ฒ์ด๋ค.
( text == ๊ธ์ ์ซ์ // number == only ์ซ์๋ง )
name ="A"์์ A๋ ํด๋น ์ธํ์ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ๊ณผ ๊ฐ์ด ๋ฐฑ์๋๋ก ๋์ด๊ฐ๋ค.
๋ฐ๋ผ์ A๋ ํด๋น ์ธํ์ ์ค๋ช
ํ ์ ์๋ ๋ง์ด ๋ค์ด๊ฐ์ผ ํ๋ค.
placeholder๋ ์
๋ ฅ ์ฐฝ ์ ๋๋ ์ ๋ ํ์์ผ๋ก ํฌ๋ฏธํ๊ฒ ๋จ๋ ๊ธ์์ด๋ค.
ํด๋น input์ ์ด๋ป๊ฒ ์์ฑํด์ผ ํ๋์ง ๊ฐ์ด๋๋ผ์ธ์ ์ ์ํ๋ ๊ฒ์ด ์ข๋ค. -->
<input class="input-field" type="text" name="id" placeholder="8~12์๋ฆฌ์ ์๋์๋ฌธ์์ ์ซ์ ์กฐํฉ">
<label for="">๋น๋ฐ๋ฒํธ</label>
<input class="input-field" type="text" name="pwd" placeholder="8~12์๋ฆฌ์ ์๋์๋ฌธ์์ ์ซ์ ์กฐํฉ">
<label for="">์ด๋ฆ</label>
<input class="input-field" type="text" name="name" placeholder="ํ๊ธธ๋">
<label for="">์ด๋ฉ์ผ</label>
<input class="input-field" type="text" name="email" placeholder="example@fastcampus.co.kr">
<label for="">์์ผ</label>
<input class="input-field" type="text" name="birth" placeholder="2020/12/31">
<!--sns-chk๋ผ๋ ํด๋์ค div์ checkbox ํ๊ทธ๋ค์ ๋ฌถ์ด ๋จ๋ค.-->
<div class="sns-chk">
<!--label๊ณผ input์ id๋ก ์ฐ๊ฒฐํ์ง ์๊ณ , input์ label๋ก ๊ฐ์ธ์๋ ํํ์ด ๊ฐ๋ฅํ๋ค.
input์ type์ checkbox๋ก ์ค์ ํ๋ฉด, ์ฒดํฌ ๋ฐ์ค๊ฐ ๋์จ๋ค.
check box type์์ value๋ ๋ฒํผ ๋ด์ ํ
์คํธ๋ก ๋ฒํผ ๋๋ ์ ๋, ํด๋น ๋ด์ฉ์ด ์ ์ก๋๋ค.-->
<label><input type="checkbox" name="sns" value="facebook"/>ํ์ด์ค๋ถ</label>
<label><input type="checkbox" name="sns" value="kakaotalk"/>์นด์นด์คํก</label>
<label><input type="checkbox" name="sns" value="instagram"/>์ธ์คํ๊ทธ๋จ</label>
</div>
<!--button์ default type์ submit์ด๋ค. submit์ ๋๋ฅด๋ฉด
form ํ๊ทธ์ action์ ์ ํ ๋ชฉ์ ์ง๋ก ์ฌ์ฉ์๊ฐ ์ ์ ๊ฐ๋ค์ด ๋ฐฐ๋ฌ ๋๋ค.-->
<button>ํ์ ๊ฐ์
</button>
</form>
<!--JS ๋ถ๋ถ: ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋์ฐ๊ธฐ ์ํด ์กด์ฌํ๋ค.-->
<script>
<!-- ํจ์ ์ ์ธ html form ๋ด์ฉ ์์ฒด๋ฅผ ์ธ์๋ก ๋ฐ์.-->
function formCheck(frm) {
<!--๋ณ์ msg ์ ์ธ setMessage์ ๋งค๊ฐ ๋ณ์๋ก์ ์ด์ฉ-->
var msg ='';
if(frm.id.value.length<3) {
<!--id ๊ธธ์ด๊ฐ 3๋ฏธ๋ง์ด๋ฉด, ์๋ฌ ๋์ฐ๊ธฐ(๋ฐ์ setMessageํจ์ ์กด์ฌ)-->
setMessage('id์ ๊ธธ์ด๋ 3์ด์์ด์ด์ผ ํฉ๋๋ค.', frm.id);
return false;
}
return true;
}
function setMessage(msg, element){
<!-- getElementById - id= "msg"์ธ ํ๊ทธ๋ฅผ ์ฐพ๋๋ค.
๊ทธ ํ๊ทธ์ ๋ด์ฉ๋ฌผ๋ก ''๋ด์ฉ์ ๋ฃ๋๋ค. iํ๊ทธ๋ ์๋ฌด ์๋ฏธ ์์ด ๊ธฐ์ธ์ด๋ ํ๊ทธ-->
document.getElementById("msg").innerHTML
= `<i class="fa fa-exclamation-circle">${msg}</i>`;
<!--select() ํจ์๋ ๊ฐ ์
๋ ฅ์ด ์๋ชป ๋์์ ๋,
์๋ฌ ๋ฉ์ธ์ง ๋์ฐ๊ณ , ์๋์ผ๋ก ์๋ชป ์
๋ ค๋ ์์๊ฐ ์ ํ๋๊ฒ ํ๋ ํจ์์ด๋ค.-->
if(element) {
element.select();
}
}
</script>
</body>
</html>
ํ์ง๋ง ํด๋น HTML์ ๊ฐ์ ์ฑ์์ ๋ด๋ณด๋๋ค๊ณ ํด๋ ์๋ํ์ง ์๋๋ค. ์๋ํ๋ฉด ํด๋น ๋ฌธ์์ form ํ๊ทธ์ ๊ฐ์ ๋ณด๋ผ ๋ชฉ์ ์ง์ ์์ฒญ API๊ฐ ๋ญ์ง ํ๋๋ ์ ์ผ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ์ ์ผ์ ๋ ๋ชฉ์ ์ง์ default๋ ์๊ธฐ ์์ ์ด๊ณ REST - API๋ GET์ด ๋๋ค.
๋ฐ๋ผ์ ํด๋น ๋ด์ฉ์ ์จ์ form ํ๊ทธ๋ฅผ ์์ ํ๋ค. ๋๋ ์์ฒญ ๋ด์ฉ์ ch2์ registerinfo๋ก ๋ณด๋ผ ์์ ์ด๋ค.
๋ํ GET ์์ฒญ์ ์์ฒญ ๋ด์ฉ์ด ์คํธ๋ง ์ฟผ๋ฆฌ๋ก ๋ธ๋ผ์ฐ์ ์ ์ ํ๋ ๊ฒ ์ซ๋ค ๋ฐ๋ผ์ ๋ฐ๋๊ฐ ์๋ POST๋ก API ์์ฒญ์ ๋ฐ๊พธ๊ฒ ๋ค.
<form action = "/ch2/registerInfo.jsp" method = "POST" onsubmit="return formCheck(this)">
form ํ๊ทธ์ ์์ฑ์๋ onsumit์ด๋ ์ด๋ฒคํธ ๋ฑ๋ก ์์ฑ์ด ์๋ค.
์ด๋ฒคํธ ๋ฑ๋ก์ด๋ ํผํ๊ทธ์ ๋ด์ฉ์ ๋ํด ์ด๋ ํ ๋์์ ์ถ๊ฐ๋ก ํ๋๋ก ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
onsubmit = "return formcheck(this)" ๋ formcheck๋ ํจ์๋ฅผ ์๋์์ผ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ ํ๋ผ๋ ๋ป์ด๊ณ , this๋ฅผ ์ธ์๋ก ๋ฃ์ ๊ฒ์ ํ์ฌ ์์ฑ๋ form์ ํจ์์ ์ธ์๋ก ๋ฃ๊ฒ ๋ค๋ ๋ป์ด๋ค.
onsubmit = ture ์ผ ๊ฒฝ์ฐ ํด๋น ํผ์ ๋ชฉ์ ์ง๋ก ์ ์กํ๊ณ false์ผ ๊ฒฝ์ฐ ์ ์กํ์ง ์๋๋ค.
--์ ๋ ฅ์ ์ฌ๋ฐ๋ฅด๊ฒ ํด์ ๋ด์ฉ์ด ๋ชฉ์ ์ง๋ก ๋์ด๊ฐ๋ค๊ณ ํด๋ณด์.
2. ์ ์ก๋ ๋ด์ฉ์ ๋ฐ๋ registerInfo.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>
<h1>id=${param.id}</h1>
<h1>pwd=${param.pwd}</h1>
<h1>name=${param.name}</h1>
<h1>email=${param.email}</h1>
<h1>birth=${param.birth}</h1>
<h1>sns=${param.sns}</h1>
</body>
</html>
<!--param์ EL์ ๋ด๋ถ ๊ฐ์ฒด์ด๋ค.
param.id๋ name=id์ธ ํ๊ทธ์ value๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.-->
์ด์ํ์ -
๋ด๊ฐ sns์ facebook, kakaotalk, instagram ๋ค ์ฒดํฌํด๋ facebook๋ง ๋ฌ๋ค.
๊ทธ ์ด์ ๋
<h1>sns=${param.sns}</h1>
์ด์ ๊ฐ์ด sns์ ํ๋ผ๋ฏธํฐ ๋ณ์๋ฅผ ํ๋๋ง ์ค์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๊ฒฝ์ฐ, ๋งจ ์ฒ์ ๊ฐ์ธ ํ์ด์ค๋ถ๋ง ๋ค์ด์ค๊ณ ๋๋จธ์ง๋ ๋ฒ๋ ค์ง๋ค. ํด๋น ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ด ๊ณ ์น๋ค.
<!-- ๋จผ์ sns๋ผ๋ name์ input์ ๋ฐฐ์ด๋ก ๋ฐ๋๋ค. -->
<h1>sns=${paramValues.sns}</h1>
<!--๋ฐฐ์ด์ ์์๋๋ก ์ถ๋ ฅํ๋ค.-->
<h1>sns=${paramValues.sns[0]}</h1>
<h1>sns=${paramValues.sns[1]}</h1>
<h1>sns=${paramValues.sns[2]}</h1>
3. ์คํ๋ง ์ปจํธ๋กค๋ฌ๋ฅผ ์ด์ฉ, ๋ฐฑ์๋ ๊ฑฐ์ณ์ ์นํ์ด์ง๊ฐ ์๋ํ๋๋ก ํ๊ธฐ
์ง๊ธ๊น์ง๋ ๋ชจ๋ HTML ๋ฌธ์ ์ฌ์ด์์ ์๋ค๊ฐ๋ค ํ์๋ค.
์ด๋ ๊ฒ ํ๋ฉด, ๊ฒฐ๊ณผ ๋ด์ฉ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ํ๋ ๋ฑ์ ๊ณ ์ฐจ์ ์์ ์ ํ ์ ์๋ค.
์ง๊ธ ๋น์ฅ์ ์ด๋ฐ ๊ณ ์ฐจ์ ์์ ์ ํ์ง ์๊ฒ ์ง๋ง HTML ๋ด์ฉ์ ๋ชจ๋ JAVA ์ฝ๋์ ์ด์ด๋ณด์.
(1) HTML ๋ชจ๋ JSP๋ก ๋ณํ
์ปจํธ๋กค๋ฌ์ ๋ฆฌํด๊ฐ์ผ๋ก html์ ์ธ ์ ์๊ธด ํ๋ฐ, ์ผ๋จ ํธ์์ ์ ๋ถ jsp๋ก ๋ฐ๊พธ์
HTML์ JSP๋ก ๋ฐ๊พธ๋ ค๋ฉด ์๋จ์ JSTL์ ์ฌ์ฉํ๊ฒ ๋ค๋ c tag library ์ ์ธ๊ณผ ์ธ์ฝ๋ฉ์ ๋ญ๋ก ํด์ผํ๋์ง ์ ์ธํ๋ ๋ด์ฉ์ ์ ์ด์ผํ๋ค.
<%@ page contentType="text/html;charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
** ์ฐธ๊ณ **
ํ์ฅ์๋ฅผ ๋ฐ๋ก html > jsp ๋ก ๋ฐ๊พธ๋ฉด ํ๊ธ์ด ๋ค ๊นจ์ง ์ ์๋ค.
์ด ๊ฒฝ์ฐ preference > HTML files, Jsp files ์ ์ธ์ฝ๋ฉ์ด utf-8์ด ์๋ ๋ค๋ฅธ ๊ฑธ๋ก ๋์ด ์์ด์ ์ด๋ค. ์ด๋ฅผ utf-8๋ก ๊ณ ์ณ์ฃผ๋ฉด ๋๋ค.
(2) ์ปจํธ๋กค๋ฌ ๋ฑ๋ก ๋ฐ RequestMapping
package com.fastcampus.ch2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //ctrl + shift + o ๋๋ฅด๋ฉด ์๋ import
public class RegisterController {
@RequestMapping("/register/add")
public String register() {
return "registerForm"; //WEB-INF/registerForm.jsp
}
//registerForm์ action url value="/register/save" ๋ก ๋ฐ๊ฟ์ฃผ์.
@RequestMapping("/register/save")
public String save(){
return "registerinfo";
}
}
(3) ๋ณํํ registerform.jsp ์์ ๋ณ๊ฒฝํด์ค์ผํ ๋ด์ฉ
<!--์ปจํธ๋กค๋ฌ๋ก ๊ฐ๋๋ก ๋ณ๊ฒฝ ์ด๋ ์๋์ฃผ์ ์ ๊ธฐ๋ณด๋จ jstl ์ด์ฉ-->
<!--๊ฐ์ ๋ง action = /ch2/regoster/save-->
<!--์ ์๋์ฃผ์๋ฅผ ์ ๊ธฐ๋ณด๋จ jstl์ ์ด์ฉํ ๊น?
๋ด์ฉ์ ์ ค ์๋๊ฐ๋ฆฌ์ธ ch2๋ฅผ context root๋ผ๊ณ ๋ถ๋ฅธ๋ค. (๋ด์ฉ๋ฌผ์ ๋ฟ๋ฆฌ)
ํด๋น ๋ฃจํธ๋ ์ฐ๋ฆฌ๊ฐ ์๋ฐ ํ์ผ์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ฎ๊ธฐ๋ฉด ๋ฐ๋ ์ ์๋ค.
๋ฐ๋ ๊ฒฝ์ฐ ์๋์ฃผ์๋ก๋ ๋ ์ด์ ์ด ์ ์๋ค.
๋ฐ๋ผ์ context root๋ฅผ ์ ์ ์ด๋ ๋๋ c:url value = "" ํ๊ทธ๋ฅผ ์ด์ฉํ๋ค.-->
<form action = "<c:url value="/register/save"/>"
<!--msg El์ ํ๋ฒ ๋ ${}๋ก ๊ฐ์ธ์ฃผ๊ธฐ-->
document.getElementById("msg").innerHTML
= `<i class="fa fa-exclamation-circle"> ${'${msg}'}'</i>`;
<!--Why? ์๋ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ6์์ ๋์จ template literal์ด๋ ๋ฌธ๋ฒ์ด EL๊ณผ ๋๊ฐ์.
๊ทธ๋ฆฌ๊ณ ${msg}๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ธ๋ ค๊ณ ๋ฃ์ด๋์ ๋ด์ฉ์ด๋ค.
ํ์ง๋ง ํด๋น ๋ด์ฉ์ ์๋ฒ์์ EL์ ์ํด ์ฝํ๊ณ ์ฌ์ฉ๋์ด ์์ง๋๋ค.
์๋ํ๋ฉด ๋ฐฑ์๋์ ์ฐ๊ฒฐํ๋ฏ๋ก์ ๋ด์ฉ์ด ๋จผ์ ์๋ฒ์์ ์คํ๋๊ณ , ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
(javaScript๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ)
๋ฐ๋ผ์ EL์ ์ํด ์ฝํ์ ์์ง๋๋ ์ฉ์ผ๋ก ${}๋ก ๊ฐ์ธ์ค๋ค.-->
3. ์ค์ค๋ก ํด๋ณด๊ธฐ (jsp ๋ ๊ฐ ์ปจํธ๋กค๋ฌ ๋ค ์ง์ฐ๊ณ ๋ค์ ์ฐ๊ธฐ)
requestform ๊ณ์ ํ๋๋ฐ ์๋๋ค. ์ค๋ฅ ์ฐพ๋๋ฐ 1์๊ฐ ๋ฐ ๊ฑธ๋ ธ๋ค. ๋ฌธ์ ๋ ๋ด๊ฐ ๊ธ์ 3์ด์ ์ฐ๋ผ๊ณ ํด๋๊ณ ๊ธ์ 3๊ฐ๋ฅผ ์จ๋๊ณ ์ ์ค๋ฅ ๊ตฌ๋ฌธ์ด ์ ๋จ์ง ํ๊ณ ์ฐพ๊ณ ์์๋ค. ํ
์ปจํธ๋กค๋ฌ๊น์ง๋ ์๋ฃ