๐ก
ํ๋ก์ ํธ ์งํ์ ์ํ ๊ธฐ๋ณธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
HttpServletRequest ์ Model ๋ฅผ ๊ตฌ๋ถํด์ ์ฌ์ฉํ ์ ์๋ค.
UserController
package com.tenco.blog_v1.user;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@Slf4j
@Controller
public class UserController {
/**
* ํ์๊ฐ์
ํ์ด์ง ์์ฒญ
* ์ฃผ์์ค๊ณ : http://localhost:8080/join-form
*
* @param model
* @return ๋ฌธ์์ด
* ๋ฐํ๋๋ ๋ฌธ์์ด์ ๋ทฐ ๋ฆฌ์กธ๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ฉฐ
* ๋จธ์คํ์น ํ
ํ๋ฆฟ ์์ง์ ํตํด์ ๋ทฐ ํ์ผ์ ๋ ๋๋ง ํฉ๋๋ค.
*/
public String joinForm(Model model) {
log.info("ํ์๊ฐ์
ํ์ด์ง");
model.addAttribute("name", "ํ์๊ฐ์
ํ์ด์ง");
return "user/join-form"; // ํ
ํ๋ฆฟ ๊ฒฝ๋ก : user/join-form.mustache
}
/**
* ๋ก๊ทธ์ธ ํ์ด์ง ์์ฒญ
* ์ฃผ์์ค๊ณ : http://localhost:8080/login-form
*
* @param model
* @return ๋ฌธ์์ด
* ๋ฐํ๋๋ ๋ฌธ์์ด์ ๋ทฐ ๋ฆฌ์กธ๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ฉฐ
* ๋จธ์คํ์น ํ
ํ๋ฆฟ ์์ง์ ํตํด์ ๋ทฐ ํ์ผ์ ๋ ๋๋ง ํฉ๋๋ค.
*/
public String loginForm(Model model) {
log.info("๋ก๊ทธ์ธ ํ์ด์ง");
model.addAttribute("name", "๋ก๊ทธ์ธ ํ์ด์ง");
return "user/login-form"; // ํ
ํ๋ฆฟ ๊ฒฝ๋ก : user/join-form.mustache
}
/**
* ํ์ ์ ๋ณด ์์ ํ์ด์ง ์์ฒญ
* ์ฃผ์์ค๊ณ : http://localhost:8080/user/update-form
*
* @param model
* @return ๋ฌธ์์ด
* ๋ฐํ๋๋ ๋ฌธ์์ด์ ๋ทฐ ๋ฆฌ์กธ๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ฉฐ
* ๋จธ์คํ์น ํ
ํ๋ฆฟ ์์ง์ ํตํด์ ๋ทฐ ํ์ผ์ ๋ ๋๋ง ํฉ๋๋ค.
*/
public String updateForm(Model model) {
log.info("ํ์ ์์ ํ์ด์ง");
model.addAttribute("name", "ํ์ ์์ ํ์ด์ง");
return "user/update-form"; // ํ
ํ๋ฆฟ ๊ฒฝ๋ก : user/join-form.mustache
}
}
๐ Spring์์ ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ทฐ๋ก ์ ๋ฌํ๋ ๋ฐฉ์
HttpServletRequest ๊ฐ์ฒด ์ฌ์ฉ
- HttpServletRequest๋ ๊ธฐ๋ณธ ์๋ธ๋ฆฟ ๊ฐ๋ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ชจ๋ HTTP ์์ฒญ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, ์ธ์ ์ด๋ ์ฟ ํค ๊ฐ์ ์ ๋ณด๋ ํจ๊ป ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์๋ธ๋ฆฟ API์ ์ฐ๊ด๋์ด ์์ด ๊ตฌ์กฐ๊ฐ ์ฝ๊ฐ ๋ณต์กํ ์ ์์ต๋๋ค.
Model ๊ฐ์ฒด ์ฌ์ฉ
- Model์ Spring MVC์์ ๋ฐ์ดํฐ ์ ๋ฌ ์ ์ฉ์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค.
- ์ปจํธ๋กค๋ฌ์์ ๋ทฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐํธํ๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
- ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๋ฉฐ, Spring ํ๋ ์์ํฌ์ ๊น์ด ์ฐ๊ด๋์ด ์์ด ์ ์ง๋ณด์๋ ์ฝ๋ ๊ฐ๋ ์ฑ
ํต์ฌ ์ ๋ฆฌ
- Model: ๊ฐ๋จํ๊ณ Spring MVC์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐฉ์์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ ํฉํฉ๋๋ค.
- HttpServletRequest: ๋ณต์กํ ์์ฒญ ์ฒ๋ฆฌ, ์ธ์ ๊ด๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ํฉํฉ๋๋ค. ์๋ธ๋ฆฟ ๊ธฐ๋ฐ ์์ ์ ์ ํฉํฉ๋๋ค.
HttpServletRequest ํด๋์ค ์ฌ์ฉ
package com.tenco.blog_v1.user;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Slf4j
@Controller
public class UserController {
/**
* ํ์๊ฐ์
ํ์ด์ง ์์ฒญ
* ์ฃผ์์ค๊ณ : http://localhost:8080/join-form
*
* @param model
* @return ๋ฌธ์์ด
* ๋ฐํ๋๋ ๋ฌธ์์ด์ ๋ทฐ ๋ฆฌ์กธ๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ฉฐ
* ๋จธ์คํ์น ํ
ํ๋ฆฟ ์์ง์ ํตํด์ ๋ทฐ ํ์ผ์ ๋ ๋๋ง ํฉ๋๋ค.
*/
@GetMapping("/join-form")
public String joinForm(Model model) {
log.info("ํ์๊ฐ์
ํ์ด์ง");
model.addAttribute("name", "ํ์๊ฐ์
ํ์ด์ง");
return "user/join-form"; // ํ
ํ๋ฆฟ ๊ฒฝ๋ก : user/join-form.mustache
}
/**
* ๋ก๊ทธ์ธ ํ์ด์ง ์์ฒญ
* ์ฃผ์์ค๊ณ : http://localhost:8080/login-form
*
* @param model
* @return ๋ฌธ์์ด
* ๋ฐํ๋๋ ๋ฌธ์์ด์ ๋ทฐ ๋ฆฌ์กธ๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ฉฐ
* ๋จธ์คํ์น ํ
ํ๋ฆฟ ์์ง์ ํตํด์ ๋ทฐ ํ์ผ์ ๋ ๋๋ง ํฉ๋๋ค.
*/
@GetMapping("/login-form")
public String loginForm(Model model) {
log.info("๋ก๊ทธ์ธ ํ์ด์ง");
model.addAttribute("name", "๋ก๊ทธ์ธ ํ์ด์ง");
return "user/login-form"; // ํ
ํ๋ฆฟ ๊ฒฝ๋ก : user/join-form.mustache
}
/**
* ํ์ ์ ๋ณด ์์ ํ์ด์ง ์์ฒญ
* ์ฃผ์์ค๊ณ : http://localhost:8080/user/update-form
*
* @param model
* @return ๋ฌธ์์ด
* ๋ฐํ๋๋ ๋ฌธ์์ด์ ๋ทฐ ๋ฆฌ์กธ๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ฉฐ
* ๋จธ์คํ์น ํ
ํ๋ฆฟ ์์ง์ ํตํด์ ๋ทฐ ํ์ผ์ ๋ ๋๋ง ํฉ๋๋ค.
*/
@GetMapping("/user/update-form")
public String updateForm(Model model) {
log.info("ํ์ ์์ ํ์ด์ง");
model.addAttribute("name", "ํ์ ์์ ํ์ด์ง");
return "user/update-form"; // ํ
ํ๋ฆฟ ๊ฒฝ๋ก : user/join-form.mustache
}
}
join-form.mustache
{{> layout/header}}
<main class="container p-5 content">
<div class="card">
<div class="card-header"><b>{{name}}</b></div>
<div class="card-body">
<form action="/join" method="post" enctype="application/x-www-form-urlencoded">
<div class="mb-3">
<input type="text" class="form-control" placeholder="enter username" name="username">
</div>
<div class="mb-3">
<input type="password" class="form-control" placeholder="enter password" name="password">
</div>
<div class="mb-3">
<input type="email" class="form-control" placeholder="enter email" name="email">
</div>
<button type="submit" class="btn btn-primary form-control">ํ์๊ฐ์
</button>
</form>
</div>
</div>
</main>
{{> layout/footer}}
login-form.mustache
{{> layout/header}}
<main class="container p-5 content">
<div class="card">
<div class="card-header"><b>{{name}}</b></div>
<div class="card-body">
<form action="/login" method="post" enctype="application/x-www-form-urlencoded">
<div class="mb-3">
<input type="text" class="form-control" placeholder="enter username" name="username">
</div>
<div class="mb-3">
<input type="password" class="form-control" placeholder="enter password" name="password">
</div>
<button type="submit" class="btn btn-primary form-control">๋ก๊ทธ์ธ</button>
</form>
</div>
</div>
</main>
{{> layout/footer}}
udpate-form.mustache
{{> layout/header}}
<main class="container p-5 content">
<div class="card">
<div class="card-header"><b>{{name}}</b></div>
<div class="card-body">
<form action="/user/update" method="post" enctype="application/x-www-form-urlencoded">
<div class="mb-3">
<input type="text" class="form-control" placeholder="enter username" name="username" disabled>
</div>
<div class="mb-3">
<input type="password" class="form-control" placeholder="enter password" name="password">
</div>
<div class="mb-3">
<input type="email" class="form-control" placeholder="enter email" name="email">
</div>
<button type="submit" class="btn btn-primary form-control">ํ์์ ๋ณด์์ </button>
</form>
</div>
</div>
</main>
{{> layout/footer}}