์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array ๊ฐ์ฒด
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journey๐ณ๐
[62] 230328 Spring: ํ์๊ฐ์ , ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ [K-๋์งํธ ํธ๋ ์ด๋ 62์ผ] ๋ณธ๋ฌธ
[62] 230328 Spring: ํ์๊ฐ์ , ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ [K-๋์งํธ ํธ๋ ์ด๋ 62์ผ]
yjyuwisely 2023. 3. 28. 12:49230328 Tue 62nd class
Ch. 18 MVC ํจํด ๊ตฌํ
์ง๋: Ch. 18 MVC ํจํด ๊ตฌํ์ ๊ธฐ๋ฐํ ์์ฒด ์์
(๊ต์ฌ: ์ต๋ฒ๊ท ์ JSP 2.3 ์น ํ๋ก๊ทธ๋๋ฐ: ๊ธฐ์ด๋ถํฐ ์ค๊ธ๊น์ง, ์ ์: ์ต๋ฒ๊ท )
์ฑ
์์ ์ฝ๋: https://github.com/madvirus/jsp23
์ ์ ๋ธ๋ก๊ทธ: https://javacan.tistory.com/
์ต๋ฒ๊ท ์ JSP 2.3 ์น ํ๋ก๊ทธ๋๋ฐ: ๊ธฐ์ด๋ถํฐ ์ค๊ธ๊น์ง | ์ต๋ฒ๊ท - ๊ต๋ณด๋ฌธ๊ณ
์ต๋ฒ๊ท ์ JSP 2.3 ์น ํ๋ก๊ทธ๋๋ฐ: ๊ธฐ์ด๋ถํฐ ์ค๊ธ๊น์ง | [์ต๋ฒ๊ท ์ JSP 2.3 ์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด๋ถํฐ ์ค๊ธ๊น์ง]๋ JSP 2.3์ ์๋ก์ด ํน์ง ๋ฐ์๊ณผ JSP๋ฅผ ์ง์ํ๋ ์์์ธ ์๋ธ๋ฆฟ๊ณผ ํํ ์ธ์ด ๋ฑ์ ์๋ก์ด
product.kyobobook.co.kr
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
๋ค์ ๊ธฐ์ตํ ๊ฒ
Get ๋ฐฉ์
URL ์ฃผ์ ๋ค์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ถ์ฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ด๋ค.
(URL(Uniform Resource Locator): ์ธํฐ๋ท์์ ์น ํ์ด์ง, ์ด๋ฏธ์ง, ๋น๋์ค ๋ฑ ๋ฆฌ์์ค์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด)
Get ๋ฐฉ์์ด Post ๋ฐฉ์๋ณด๋ค ๋น๊ต์ ์ ์ก๋๋ ์๋๊ฐ ๋น ๋ฅด๋ ๋ณด์์๋ ์ทจ์ฝํ๋ค.
method๋ฅผ ๋ฐ๋ก ์ธ๊ธ ์ ํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก Get ๋ฐฉ์์ด๋ค.
ex) ๊ฒ์์ด
ex) file:///D:/221229/html/WebContent/ch03_02_req.html?id=1234&password=5678
Post ๋ฐฉ์
์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ฐ์ดํฐ๋ฅผ URL ์ฃผ์์ ๋ถ์ด์ง ์๊ณ HTTP Request ํค๋์ ํฌํจ์์ผ ์ ๋ฌํ๋ ๋ฐฉ์์ด๋ค.
Post ๋ฐฉ์์ด Get ๋ฐฉ์๋ณด๋ค ๋ณด์์๋ ๊ฐํ๋, ์๋๋ ๋๋ฆฌ๋ค.
๊ธธ์ด ์ ํ์ด ์์ผ๋ฉฐ, ๋ณด์์ด ์ ์ง๋๋ค.
ex) ๋ก๊ทธ์ธ
ex) file:///D:/221229/html/WebContent/ch03_02_req.html
2023.01.02 - [๐ณK-Digital Revision 2023โจ/HTML5] - [4] 230102 Ch. 3 HTML5 ๋ฉํฐ๋ฏธ๋์ด & ์ ๋ ฅ์์: ์น ๋ธ๋ผ์ฐ์ ์ ๋ฉํฐ๋ฏธ๋์ด, ์ค๋์ค, ๋น๋์ค, iframe,์ , HTML ์ ๋ ฅ ์์, ์ ๋ ฅ ํ๊ทธ #1 ยท #2, HTML5 ์ ๋ ฅ ์์ [K-๋์งํธ ํธ๋ ์ด๋ 4์ผ]
์ดํด๋ฆฝ์ค์ ์๋ฒ ์์ ์ด๋ก์ ๋ฒํผ์ ๋๋ฅด๊ณ ์๋ localhost:8081๋ก ๋ค์ด๊ฐ๋ค.

์ปจํธ๋กค๋ฌ๋ ์ด 6๊ฐ์ธ๋ฐ HomeController.java๋ฅผ ์คํํ๋ ์ด์ ๋ /์ ๋ต์ด ์๋ค.

์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด value = "/"์ธ ๊ฒ HomeController.java ๋ฟ์ด๋ฏ๋ก ๊ทธ๋ ๋ค.
value๋ ์์ฒญ๋ฐ์ url์ ์ค์ ํ๊ฒ ๋๋ค.
method๋ ์ด๋ค ์์ฒญ์ผ๋ก ๋ฐ์์ง ์ ์ํ๊ฒ ๋๋ค.(GET, POST, PUT, DELETE ๋ฑ)
์ฐธ๊ณ : https://mungto.tistory.com/436
@RequestMapping(value = "/", method = RequestMethod.GET)

์ฝ๋) HomeController.java
package org.hj.controller; import java.util.Locale; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) // ์ ๊ทผ์ ์ด์ ๋ฐํํ์
๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์, ๋งค๊ฐ๋ณ์) //public ์ ๊ทผ ์ ํ์, String ๋ฆฌํด ํ์
, home ๋ฉ์๋, (๋งค๊ฐ๋ณ์ํ์
,๋งค๊ฐ๋ณ์๋ช
) public String home(Locale locale, Model model) { //์ง๊ธ์ ์ฐ์์ด ์๋ค. (๊ทธ๋ฅ ์๋ ๊ฒ.) return "home"; //home์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์คํํ๋ค. //๋ฉ๋ชจ์ฅ์ URL์ฃผ์๊ฐ ํธ์ถํ ๊ฒ์ด๋ค. // /WEB-INF/views/home.jsp } @RequestMapping(value = "/drop", method = RequestMethod.GET) // ์ ๊ทผ์ ์ด์ ๋ฐํํ์
๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์, ๋งค๊ฐ๋ณ์) public String drop() { return "drop"; } }
return "home";์ home.jsp๋ฅผ ์คํํ ๊ฒฐ๊ณผ๊ฐ ์๋์ ๊ฐ๋ค.
home์ index.jsp๋ก ๋ฐ๊ฟ์ ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๊ฑฐ๋ ์ํ๋ ๋ฉ์ธ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.

์ฐ๋ฆฌ๊ฐ ํ ๊ฒ์ ์ ๋ถ GET ๋ฐฉ์์ด๊ณ
form ํ๊ทธ๋ง POST ๋ฐฉ์์ด๋ค.
ํ์๊ฐ์ , ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ

๋ ๊ฐ์ ํ์ผ์ด ๋ค๋ฅด๋ฏ๋ก void ํ์ ์ผ๋ก ์ฃผ๋ฉด ์ ๋๋ค.
์ฝ๋) ํ์๊ฐ์ ํ์ด์ง๊ฐ ๋ฌ๋ค. memberin.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>ํ์๊ฐ์
</h1> <form action="/member" method="post"><!-- ๋ฉ์๋๋ฐฉ์:POST --> ์์ด๋ <input type="text" name="id"> ๋น๋ฐ๋ฒํธ <input type="text" name="password"> ๋ณ๋ช
<input type="text" name="name"> <input type="submit" value="๊ฐ์
ํ๊ธฐ"> </form> </body> </html>

์ฝ๋) ํ์ ๊ฐ์ , ํ์ ๊ฐ์ ์๋ฒ, ๋ก๊ทธ์ธ, ๋ก๊ทธ์ธ ์๋ฒ MemberController.java
package org.hj.controller; import javax.servlet.http.HttpSession; import org.hj.model.LoginVO; import org.hj.service.LoginService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class MemberController { @Autowired LoginService ls; // ํ์๊ฐ์
//ํ๋ฉด ์คํ์ ์ํ ๋ฉค๋ฒ (GET๋ฐฉ์) @RequestMapping(value = "/member", method = RequestMethod.GET) //member ๋ฉ์๋ GET ๋ฐฉ์ public String member () { return "member/memberin"; } // ํ์๊ฐ์
์๋ฒ //์ค์ ๋ก ๊ฐ์
ํ๊ธฐ ์ํ ๋ฉค๋ฒ (POST๋ฐฉ์) @RequestMapping(value = "/member", method = RequestMethod.POST) //๋ ๋ค GET์ด๋ฉด ์ถฉ๋์ด ์ผ์ด๋๋ค. ๋ฉ์๋ ๋ฐฉ์์ด POST์ด๋ค. // int a //member๋ ์ฐธ์กฐ ๋ณ์ public String memberPost (LoginVO member) { System.out.println(member); //member.toString()์ด ์๋ต๋ ๊ฒ์ด๋ค. return "board/list"; //board ํด๋์ list.jsp๋ฅผ ์คํํ๋ค. ๊ฒ์ํ ๋ชฉ๋ก์ ๋ณด์ฌ์ค๋ค. } // ๋ก๊ทธ์ธ ํ์ด์ง @RequestMapping(value = "/login", method = RequestMethod.GET) public String login () { System.out.println("aaaa"); return "member/login"; } // ๋ก๊ทธ์ธ ์๋ฒ @RequestMapping(value = "/login", method = RequestMethod.POST) public String loginPost (HttpSession session, LoginVO member) { /* System.out.println("contorller="+member); System.out.println(ls.login(member));*/ session.setAttribute("login", ls.login(member)); if (ls.login(member)==null) { return "member/login"; } else { return "redirect:/list"; } } // ํ์๊ด๋ฆฌํ์ด์ง // ํ์์ ๋ณด์์ ๋ฐ ์ญ์ }
๊ฒฐ๊ณผ) localhost:8081/member๋ก ์ ์ํ๊ณ ์๋์ ํ์๊ฐ์ ํ์ด์ง๊ฐ ๋ด๋ค.

ํ์๊ฐ์ ์ ํ๋ค.

์ฝ๋) ํ์ ๊ฐ์
, ํ์ ๊ฐ์
์๋ฒ, ๋ก๊ทธ์ธ, ๋ก๊ทธ์ธ ์๋ฒ MemberController.java ์ผ๋ถ
// ํ์๊ฐ์
์๋ฒ //์ค์ ๋ก ๊ฐ์
ํ๊ธฐ ์ํ ๋ฉค๋ฒ (POST๋ฐฉ์) @RequestMapping(value = "/member", method = RequestMethod.POST) //๋ ๋ค GET์ด๋ฉด ์ถฉ๋์ด ์ผ์ด๋๋ค. ๋ฉ์๋ ๋ฐฉ์์ด POST์ด๋ค. // int a //member๋ ์ฐธ์กฐ ๋ณ์ public String memberPost (LoginVO member) { System.out.println(member); //member.toString()์ด ์๋ต๋ ๊ฒ์ด๋ค. return "board/list"; //board ํด๋์ list.jsp๋ฅผ ์คํํ๋ค. ๊ฒ์ํ ๋ชฉ๋ก์ ๋ณด์ฌ์ค๋ค. }
return "board/list";: board ํด๋์ list.jsp๋ฅผ ์คํํ๋ค.
๊ฒฐ๊ณผ) ํ์ ๊ฐ์ ํ ๋ฐ๋ก ๊ฒ์ํ ๋ชฉ๋ก์ด ๋ฌ๋ค.



์ ์ธ ๊ฐ ํ์ผ์(memberin.jsp, MemberController.java, LoginVO.java)์ id, password, name์ ์ผ์น์ํค๋ฉด ์คํ๋ง์ ์๋์ผ๋ก ์์งํ๋ค.
์ฝ๋) LoginVO.java
package org.hj.model; public class LoginVO { private String id; private String password; private String addr; private String phone; private String email; private String name; private int age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "LoginVO [id=" + id + ", password=" + password + ", addr=" + addr + ", phone=" + phone + ", email=" + email + ", name=" + name + ", age=" + age + "]"; } }
์์์ ๋ํด์ ~๋ฅผ ์์๋ฐ๊ฒ ๋ค๋ผ๊ณ ์ ์๋ฅผ ์ ํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฒด์ ์ต์์ ํด๋์ค์ธ ์ค๋ธ์ ํธ ํด๋์ค๋ฅผ ์์๋ฐ๊ฒ ๋์ด์๋ค.
์ด๋ค ํด๋์ค๋ฅผ ๋ถ๋ชจ ํด๋์ค๋ก ์์๋ฐ๊ฒ ๋ค๊ณ ํ๋ฉด ์ค๋ธ์ ํธ ํด๋์ค๋ ๊ด๋ จ ์๋ค.
์ค๋ธ์ ํธ ํด๋์ค ์์ toString()์ด๋ผ๋ ๋ฉ์๋๊ฐ ์๋ค.
toString()์ ์คํํ๋ฉด ํด๋น๋๋ ๊ฐ์ฒด์ ์ฃผ์, ์ฆ ์ฌ๊ธฐ์๋ LoginVO์ ์ฃผ์๊ฐ์ ์ถ๋ ฅํ๊ฒ ๋์ด์๋ค.
ํ์ง๋ง ๋ถ๋ชจ ํด๋์ค์ toString()์ด ๋ง์์ ๋ค์ง ์๊ณ , ์ฃผ์๊ฐ ๋์ ๋ค์ด๊ฐ ๋ด์ฉ(id, password, name ๋ฑ)์ด ๊ถ๊ธํ๋ฏ๋ก ๋ฐ๊พผ ๊ฒ์ด๋ค. ์ ์ฝ๋๋ฅผ ์ง์ฐ๊ณ ์คํํ๋ฉด LoginVO์ ์ฃผ์๊ฐ์ด ๋์จ๋ค.
์ฐธ๊ณ : https://kephilab.tistory.com/92
์ฝ์์ฐฝ์ ๋ณด๋ฉด ์ ๋ ฅํ๋ id, password, name์ด ๋ค์ด๊ฐ ๊ฒ์ ์ ์ ์๋ค.

