1. @ RequestMapping์ ์ ๋ฌธํ
@RequestMapping์ผ๋ก URL๊ณผ ์ปจํธ๋กค๋ฌ๋ฅผ Mapping ํด๋ฒ๋ฆฌ๋ฉด ์ฌ์ฉ์๋ GetMapping PostMapping ๋ ๋ฐฉ๋ฒ ๋ค ์ฌ์ฉํ์ฌ ์ปจํธ๋กค๋ฌ๋ฅผ ์ด์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ํ์๊ฐ์ ์ GetMapping์ผ๋ก ์คํธ๋ง ์ฟผ๋ฆฌ์ ํ์ ๊ฐ์ ๋ด์ฉ์ ๋ค ์ ์ ์ฑ ์์ฑํ ์๋ ์๊ณ , PostMapping์ผ๋ก ๊ฐ์ธ ์ ๋ณด๋ ์ ๋ถ body์ ๋ฃ์ด ๊ธฐ์ ํ ์ ๋ ์๋ค.
๋น์ฐํ์ง๋ง, GetMapping์ผ๋ก ๊ฐ์ธ์ ๋ณด๋ฅผ ์์ฑํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ๋ ธ์ถ๋๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ผ๋ก ์ข์ง ์๋ค.
์ด์ ๊ฐ์ด ํน์ ์ํฉ์ ๋ํด Getmapping ํน์ PostMapping์ผ๋ก๋ง ์ปจํธ๋กค๋ฌ์ ๋ธ๋ผ์ฐ์ ๊ฐ Mapping ๋๊ฒ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์ด์ ๋ํด์ ๋ ผํด๋ณธ๋ค.
(1) @ RequestMapping์ full ํํ
//๊ฐ์ํ ๋ฒ์ ผ
@RequestMapping("/register/add")
// ์ค์ ๋ด์ฉ ๋ค ์ด ๊ฑฐ -> method = ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ค ์ธ ์ ์๋๊ฒ default ์ด๋ค.
@RequestMapping(value = "/register/add", method={RequestMethod.GET, RequestMethod.POST})
์ฌ์ค full ๋ด์ฉ์ ๋ค ์ด ๋ค method์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์ถ์ REST API ์์ฒญ์ด ๋ฌด์์ธ์ง ์ ๋ ๊ฒ์ผ๋ก ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ํ์ง๋ง ์ด๋ ์ฝ๋ ์น๊ธฐ ๋ณต์กํ๊ณ ๋ฒ๊ฑฐ๋กญ๋ค.
//POST Mapping ์ผ๋ก๋ง ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
// ์ด ๊ฒฝ์ฐ method = ๋ฐฐ์ด ์ด ์๋๋ผ = ๋ณ์ ํํ๋ก ๋ํ๋ด๋ ๋๋ค.
@RequestMapping(value="/register/add", method=RequestMethod.POST)
(2) @GetMapping, @PostMapping
Spring 4.3๋ถํฐ ์ ๋ฐ์ดํธ ๋ @GetMapping๊ณผ @PostMapping ์ ์ด์ฉํ๋ฉด ๋ ๊ฐ๋จํ๊ฒ ํํํ ์ ์๋ค.
// GetMapping์ผ๋ก๋ง ํด๋น url ์ ๊ทผ
@GetMapping("/register/add")
// PostMapping์ผ๋ก๋ง ํด๋น url ์ ๊ทผ
@PostMapping("/register/add")
**์ฐธ๊ณ **
๋ง์ฝ ๋น์ ์ Spring์ด 4.3๋ณด๋ค ๋ฒ์ ผ์ด ๋ฎ๋ค๋ฉด STS๋ Intellj์์ ์ ๋ฐ์ดํธ ํด์ค์ผ ํ๋ค.
๋จผ์ pom.xml ํ์ผ์ ์ด์ด๋ผ. (์ฌ๊ธฐ๊ฐ Spring์ ๋ชจ๋ ์ ๋ณด๊ฐ ๋ด๊ธด Spring์ ๋์ด๋ค.)
์์ฑ์์ Spring frameWork-version์ 5.0.7๋ก ๋ฐ๊ฟ๋ผ.
๊ทธ ๋ค์ ์ง๊ธ ์์ ์ด ์ฌ์ฉํ๋ project ๋๋ฅด๊ณ maven > update Project ๋ฅผ ํด๋ฆญํ๋ผ.
๊ทธ๋ฌ๋ฉด Maven Dependencies์ ๋ชจ๋ ํ์ผ์ ๋ฒ์ ผ์ด 5.0.7์ด ๋ ๊ฑธ ๋ณผ ์ ์๋ค.
2. view Controller
(1) ์ด๋ ๋ ์ฌ์ฉ?
์ฌ์ค ์ ๋ฒ ์์ ์์ ๋ฐฐ์ด ํ์ ๊ฐ์ ํ๋ฉด์ ๋์ฐ๋ ์ปจํธ๋กค๋ฌ์ ๋งค์๋๋ ํ๋ ์ญํ ์ด ๋ธ๋ผ์ฐ์ ์์ ๋งคํ๋ ์ฃผ์๋ฅผ ์น ๊ฑธ ํ์ธํ๋ฉดregisterForm.jsp๋ผ๋ view๋ก ๊ฐ๋ผ๊ณ ํด์ฃผ๋ ๊ฒ ๋ฐ์ ์๋ค. ๊ทธ ์ธ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์๋ค.
@GetMapping("/register/add") // ์ ๊ทํ์ ๊ฐ์
ํ๋ฉด
public String register(){
return "registerForm";
}
์ด๋ฐ ๊ฒฝ์ฐ๋ผ๋ฉด, ํด๋น ๋งค์๋๋ฅผ ์ฐ์ง ์๊ณ /register/add๋ผ๋ ์ฃผ์๋ฅผ ์น๋ฉด registerForm์ผ๋ก ๊ฐ๋ผ๊ณ Web-app ์ ์ฒด์ ์ค์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
(2) ์ฐ๋ ๋ฒ
WebApp > resources > WEB-INF > spring > appServlet > servlet-context.xml ๋ก ๋ค์ด๊ฐ๋ฉด ๋๋ค.
์ฐธ๊ณ ๋ก Servlet-context๋ Spring ์ Web๊ด๋ จ ์ค์ ์ด๊ณ , root-context๋ Web ์ ์ธ ๋ชจ๋ ์ค์ ์ ํ๋ ๊ณณ์ด๋ค.
์ฌ๊ธฐ์ ๋งจ ๋ง์ง๋ง์
<view-controller path="/register/add" view-name="registerForm"/>
๋ฅผ ์น์.
์ด๋ /register/add ๋ผ๋ ๊ฒฝ๋ก๋ก ์์ฒญ ๋ค์ด์ค๋ฉด ๋ฌด์กฐ๊ฑด registerForm์ผ๋ก ์๋ตํ๋ผ๋ ์๋ฆฌ์ด๋ค.
(3) ์ ์ฝํ ์ฝ๋
@GetMapping("/register/add") // ์ ๊ทํ์ ๊ฐ์
ํ๋ฉด
public String register(){
return "registerForm";
}
์ด ์ฝ๋ ์์ฒด๋ฅผ ์ ์จ๋ ๋๋ค.
3. Redirection
์ ๋ฒ ์๊ฐ์ ์ฐ๋ฆฌ๋ ํ์๊ฐ์ ์์ฑ์ ์๋ชป ๋๋์ง ๊ฒ์ฌํ๊ณ ๋ญ๊ฐ ์๋ชป ๋์๋์ง ์๋ ค์ฃผ๋ ํจ์๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก jsp ๋ด์ ์์ฑํ์๋ค.
์ด๋ฒ์๋ ํด๋น ๋ด์ฉ์ controller ์์์ ์์ฑํด๋ณด์.
์ผ๋จ ๊ฒ์ฌํ๋ ๋ถ๋ถ์ ๋์ค์ ๊ตฌํํ์. ์ค๋์ ๋ฌด์กฐ๊ฑด ์๋ชป๋ ๊ธฐ์ ์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ๊ทธ ๊ฒฝ์ฐ ์ด๋ค ์์ผ๋ก ์ฒ๋ฆฌ ํด์ผํ๋์ง ํ์ธํ๋ค.
์๋ชป ์ ์์ผ๋ ์ด๋๊ฐ ์๋ชป ๋์๋์ง ์๋ ค์ฃผ๊ณ ์ฌ์์ฑ ํ๋๋ก ๊ฐ์ ํ์ด์ง๋ฅผ ๋ค์ ๋ณด์ฌ์ฃผ๋ ๊ฒ ๋ฐ๋์งํ๋ค.
// ์ ํจ์ฑ ๊ฒ์ฌ -> ๋ฌด์กฐ๊ฑด ์๋ชป๋์ด!
private boolean isValid(User user) {
return true;
}
// User๋ ํด๋์ค๋ ์์ฒญ์ ๋ชจ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ์ ์๋๋ก ์์ฑ๋์ด ์์.
// ์์ฒญ์ด ๋ค์ด์์ ๋ ํด๋น ๋ด์ฉ๋ค์ user ๊ฐ์ฒด์ ๋ณ์ ์์ ๋ฃ์ด์ฃผ๋ ์ญํ ์ Spring์ด ํด์ค.
@PostMapping("/register/save")
public String save(User user, Model m) throws Exception {
// 1. ์ ํจ์ฑ ๊ฒ์ฌ
if(!isValid(user)) {
// ์ด์ ๋ฐฐ์ธ ๋ด์ฉ
// ์๋ชป๋์์ ๋๋ ์๋ชป ๋์๋ค๋ ๋ฉ์ธ์ง๋ฅผ ๋์ฐ๊ณ ,
// ์ฌ์์ฑ์ ์ํด ๋ค์ ๋๊ฐ์ ํ๋ฉด์ ๋ณด์ฌ์ค์ผํจ.
}
}
(1) ํ๋ ๋ฒ 2๊ฐ์ง
a. URL ์ฌ์์ฑ
@PostMapping("/register/save")
public String save(User user, Model m) throws Exception {
// 1. ์ ํจ์ฑ ๊ฒ์ฌ
if(!isValid(user)) {
// ์๋ฌ ๋ฉ์ธ์ง ์์ฑ
String msg = URLEncoder.encode("id๋ฅผ ์๋ชป ์
๋ ฅํ์
จ์ต๋๋ค.", "utf-8");
//URL ์ฌ์์ฑ(reWriting)
return "redirect:/register/add?msg="+msg;
}
}
์ฌ๊ธฐ์๋ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ์์ฑํ๊ณ , ํด๋น ๋ฉ์ธ์ง๋ฅผ Get ๋ฐฉ์์ผ๋ก ์ง์ด๋ฃ์ด URL ์ ์ฌ์์ฑํ๋ค.
๊ทธ๋ผ ์ด์ ๊ฐ์ด ๋์จ๋ค.
์ฌ๊ธฐ์ String msg ์์ ์ด์ํ ๋ช ๋ น์ด๋ค์ด ์๋ฉ ๋ถ์ ๊ฒ์ ์ ์ ์๋ค. ์ ๊ทธ๋ฐ ๊ฒ์ผ๊น?
์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. ์ฐ๋ฆฌ๊ฐ Get ๋ฐฉ์์ผ๋ก ๋ธ๋ผ์ฐ์ ์ ์คํธ๋ง์ฟผ๋ฆฌ๋ฅผ ๋ฐ๋ก ์ ์ ๋ ํ๊ธ์ ๊ฐ์ผ๋ก ์ง์ด๋ฃ์ด๋ ์๊ด ์์๋ค. ์๋ํ๋ฉด ๋ธ๋ผ์ฐ์ ์์ ์๋์ผ๋ก ํ๊ธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์์๋ค์ ์ ์๋ ์ ๋์ฝ๋๋ก ๋ฒ์ญํด์ ๋ฃ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ์์ ๊ฐ์ด ์ฐ๋ฆฌ๊ฐ ์๋ฒ์์ ์ง์ ์ฟผ๋ฆฌ๋ฌธ์ ๋ง๋ค์ด ์ง์ด๋ฃ์ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์ค๋ก ๋ฒ์ญ๊ธฐ๋ฅผ ๋๋ฆฌ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋จ๊ฑฐ๋ ํ๋ฉด์ ํ๊ธ์ด ๊นจ์ ธ์ ๋์จ๋ค. ๋ฐ๋ผ์ ๋ฐ๊ณผ ๊ฐ์ URLEncoder ๊ฐ์ฒด๋ฅผ ์จ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์์๋ค์ ์ ์๋ ์ ๋์ฝ๋๋ก ์ํธํ ํด์ค์ผ ํ๋ค.
// URLEncoder ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ
// URLEncoder.encode("์ํธํ ์ํฌ ๋ด์ฉ","์ํธํ ๋ฐฉ์")
String msg = URLEncoder.encode("id๋ฅผ ์๋ชป ์
๋ ฅํ์
จ์ต๋๋ค.", "utf-8");
b. Model ์ด์ฉ
@PostMapping("/register/save")
public String save(User user, Model m) throws Exception {
// 1. ์ ํจ์ฑ ๊ฒ์ฌ
if(!isValid(user)) {
// ์๋ฌ ๋ฉ์ธ์ง ์์ฑ
String msg = URLEncoder.encode("id๋ฅผ ์๋ชป ์
๋ ฅํ์
จ์ต๋๋ค.", "utf-8");
//๋ชจ๋ธ์ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋ฃ๋๋ค?
m.addAttribute("msg",msg);
return "redirect:/register/add";
}
}
ํด๋น ๋ชจ๋ธ m์ "/register/save"๋ก ๋งคํ๋ ๋งค์๋ ๋ด์์๋ง ์ธ ์ ์๋ ๋ชจ๋ธ์ด๋ค.
๋ฐ๋ผ์ "/register/add"๋ก ๋์๊ฐ๋ ํ ์ํฉ์์๋ m์ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋ฃ์ด๋ดค์ ์ธ ์๊ฐ ์๋ค.
์ด์งํผ m์ด ๊ฐ ์ ์๋ ์์ญ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๊ฒฝ์ฐ ๋๋ํ Spring์ด ๋ชจ๋ธ์ ๋ฃ์ ๊ฐ์ ํ ๋๋ก ์๋์ผ๋ก URL์ ์ฌ์์ฑ ํด์ค๋ค.
๋ฐ๋ผ์ ์์ 2์ฝ๋๋ "redirect:/register/add?msg="+msg์ ๊ฐ์ ๋ป์ด๋ค.
4. ์ค์ค๋ก ํด๋ณด๊ธฐ
@RequestMapping(value = "/register/add", method = {RequestMethod.GET, RequestMethod.POST})
public String save(User user, Model m){
//servlet-context์ ์ ๋ ๋ง
//<view-controller path = "/register/add" view-name = "registerForm"/>
if(!isValid) {
// ์๋ฌ ๋ฉ์ธ์ง ์ธ์ฝ๋ฉ
String msg = URLEncoder.encode("id๋ฅผ ์๋ชป ์
๋ ฅํ์
จ์ต๋๋ค.", "utf-8")
//URL ์ฌ์์ฑ
return "redirect:/register/add?msg="+msg;
// ๋ชจ๋ธ ์ด์ฉํ๋ฉด Spring์ด ๋ด๊ฐ ๋ฉ์ฒญํ ์ค ์๊ณ ๋์์ค.
m.addAttribute("msg",msg)
return "redirect:/register/add"
}
}