์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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/
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
๋ค์ ๊ธฐ์ตํ ๊ฒ
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์ด ๋ค์ด๊ฐ ๊ฒ์ ์ ์ ์๋ค.