์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |
- 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: ์คํ๋ง์ MVC ์ค C(์ปจํธ๋กค๋ฌ) ์์ฉํ๊ธฐ, MVC ๊ตฌ์กฐ ์ดํด [K-๋์งํธ ํธ๋ ์ด๋ 62์ผ] ๋ณธ๋ฌธ
[62] 230328 Spring: ์คํ๋ง์ MVC ์ค C(์ปจํธ๋กค๋ฌ) ์์ฉํ๊ธฐ, MVC ๊ตฌ์กฐ ์ดํด [K-๋์งํธ ํธ๋ ์ด๋ 62์ผ]
yjyuwisely 2023. 3. 28. 09:46230328 Tue 62nd class
Ch. 18 MVC ํจํด ๊ตฌํ
์ง๋: Ch. 18 MVC ํจํด ๊ตฌํ์ ๊ธฐ๋ฐํ ์์ฒด ์์
(๊ต์ฌ: ์ต๋ฒ๊ท ์ JSP 2.3 ์น ํ๋ก๊ทธ๋๋ฐ: ๊ธฐ์ด๋ถํฐ ์ค๊ธ๊น์ง, ์ ์: ์ต๋ฒ๊ท )
์ฑ
์์ ์ฝ๋: https://github.com/madvirus/jsp23
์ ์ ๋ธ๋ก๊ทธ: https://javacan.tistory.com/
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
http://localhost:8080/ -> Controller -> View(/WEB-INF/views/home.jsp)
public String home( ) {
return "home"; // /WEB-INF/views/home.jsp
}
http://localhost?id=aaaa&password=1234 --> Controller(Homecontroller) --> View(/WEB-INF/views/home.jsp)
public String home(String id, String password) {
return "home"; // /WEB-INF/views/home.jsp
}
์คํ๋ง์ ์๋ ์์งํด์ค๋ค. (์๋ฐ๋ ๋ ๊ฐ๋ง ์ผ์น์์ผ์ฃผ๋ฉด ๋๋ค.)
home์ ์๋ฐ์ ๋ฉ์๋์ด๋ค. ๋ฉ์๋๊ฐ ์ด๋ฐ ์์ผ๋ก ํ์ฉ๋๋ค.
์ฝ๋) 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";
}
}
์์๋๋ก C(org.hj.controller), M(org.hj.model), V(views)์ด๋ค.
http://localhost?id=aaaa&password=1234 --> Controller(Homecontroller) --> View(/WEB-INF/views/home.jsp)
(๋ชจ๋ธ์ ์ฌ์ฉํ์ง ์์ ๋ฐฉ์)
public String home(String id, String password) {
return "home"; // /WEB-INF/views/home.jsp
}
http://localhost?id=aaaa&password=1234 --> Controller(Homecontroller) --> View(/WEB-INF/views/home.jsp)
public String home(LoginVO log) {
return "home"; // /WEB-INF/views/home.jsp
}
id๋ public void setId(String id) ์ฝ๋์, password๋ public void setPassword(String password) ์ฝ๋์ ์ฐ๊ฒฐ๋๋ค.
ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋๋ ์ ๋ฐฉ์๋ณด๋ค๋ ์๋ ๋ฐฉ์์ผ๋ก ํด์ผ ํจ์จ์ ์ด๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ์ด ๋๋ค.
MVC ์ค์์ Model์ ์ฐ๋ ์ด์ ์ด๋ค. :)
์ฝ๋) src/main/java/org.hj.model LoginVO.java
public class LoginVO {
private String id;
private String password;
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;
}
}
์น ๋์์ด๋(V), ์น ๊ฐ๋ฐ์(M, C)๊ฐ ๋์์ ์ผํ๊ฒ ํ๋ค.
Updates: ์ฌ์ฉ์๊ฐ www.naver.com URL ์ด๋ค.
๋ชจ๋ธ์ ํ์๊ฐ ์๋๋ค. (๋ฐ์ดํฐ ์ค์ ๊ฒ ์์ผ๋ฉด ๊ทธ๋ฅ ๊ฐ๋ค.)
์ง๊ธ ํ์ผ์์๋ 3.0์ด์์ผ๋ก ์ง์ ๋์ด ์์ด์ ๋ณ๊ฒฝํ ๊ฑด ์๋ค.
์ฝ๋) pom.xml ์ผ๋ถ
<!-- Servlet -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
์ด์ ํ ๋ด์ฉ์ธ๋ฐ ์ฒซ๋ฒ์งธ ๋ฐฉ์์ ์ ํํ์๊ณ , ๋ ์ค ํ๋์ ๋ฐฉ์์ผ๋ก ํ๋ก์ ํธ์ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
์ผ์ผ์ด ๋ค ์ค์ ํด์ผํ๋ JSP์๋ ๋ค๋ฅด๊ฒ ์คํ๋ง์ ํ๊ฒฝ ์ค์ ์ด ๋ค ๋ง์ถฐ์ ธ์๋ค.
์ฐ๋ฆฌ๋ ๋๋ฒ์งธ ๋จ๊ณ์ Spring MVC๋ง ์ ๊ฒฝ์ฐ๋ฉด ๋๋ค.
1. Request ์์๋ ์ฌ์ฉ์ ํ๋ฉด์ด ์๋ค. ์ฌ์ฉ์ ํ๋ฉด -> 1. request
์ผ์ผ์ด JSP์ request.getParameter() ์ ํด๋ ๋๋ค. ์ฐธ๊ณ : https://chan-t-story.tistory.com/16
Request์ฒ๋ฆฌ ํ ๊ฒ Controller ์์ ๋ค์ด๊ฐ์๋ค.
์ฌ๊ธฐ์๋ ๋งค๊ฐ ๋ณ์๋ง ์ผ์น์ํค๋ฉด ๋๋ค.
์ด๋ค ๋ชจ๋ธ์ธ์ง ๋งค๊ฐ ๋ณ์์ ์ธ๊ธํ๋ฉด ๋๋ค. (๋ณ์ ์ด๋ฆ ๋ง์ถฐ์ค๋ค.)
๋ฐ์ดํฐ ์ค์ ๊ฒ ์์ผ๋ฉด ๋ฐ๋ก View๋ก ๊ฐ๋ฉด ๋๋ค. (๋ชจ๋ธ ์์ด๋ ๋๋ค.)
์คํ๋ง์๋ ์๋์ผ๋ก ๋ค ๋์ด์๋ค.
DI(Dependency Injection) - ์คํ๋ง์ด ๊ฐ์ฒด๋ฅผ ๋์ ์์ฑํ์ฌ ์ฃผ์
ํ๋ค.
@Autowired
๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์คํ๋ง์ ์ ๋ํ ์ด์ ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ๋ ๋ฐฉ์์๋ @Autowired ์ธ์ Setter ๋๋ ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ์๋ค. ์ํ์ฐธ์กฐ ๋ฌธ์ ์ ๊ฐ์ ์ด์ ๋ก @Autowired ๋ณด๋ค๋ ์์ฑ์๋ฅผ ํตํ ๊ฐ์ฒด ์ฃผ์ ๋ฐฉ์์ด ๊ถ์ฅ๋๋ค. ํ์ง๋ง ํ ์คํธ ์ฝ๋์ ๊ฒฝ์ฐ์๋ ์์ฑ์๋ฅผ ํตํ ๊ฐ์ฒด์ ์ฃผ์ ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ํ ์คํธ ์ฝ๋ ์์ฑ์์๋ง @Autowired๋ฅผ ์ฌ์ฉํ๊ณ ์ค์ ์ฝ๋ ์์ฑ์์๋ ์์ฑ์๋ฅผ ํตํ ๊ฐ์ฒด ์ฃผ์ ๋ฐฉ์์ ์ฌ์ฉํ๊ฒ ๋ค.
์ฐธ๊ณ https://wikidocs.net/160890
์ด๋ ธํ ์ด์ (@, annotation)์ด๋?
Annotation์ Java5๋ถํฐ ์๋กญ๊ฒ ์ถ๊ฐ๋ ๋ฌธ๋ฒ์์์ด๋ค.
์ฌ์ ์ ์ผ๋ก๋ "์ฃผ์"์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์๋ฐ ์ฝ๋์ @๋ฅผ ์ด์ฉํด ์ฃผ์์ฒ๋ผ ๋ฌ์ ํน์ํ ์๋ฏธ๋ฅผ ๋ถ์ฌํด์ค๋ค.
ํ๋ก๊ทธ๋จ ์ฝ๋์ ์ผ๋ถ๊ฐ ์๋ ํ๋ก๊ทธ๋จ์ ๊ดํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ , ์ฝ๋์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ์ ํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๊น๋ํด์ง๊ณ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
์ฐธ๊ณ
์ด๋
ธํ
์ด์
์ ์์๊ฐ ์๋์ ์๋ค. ex) Controller, RequestMapping
์ฝ๋) HomeController.java
@Controller //Controller ์ด๋
ธํ
์ด์
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET) //RequestMapping ์ด๋
ธํ
์ด์
public String home(Locale locale, Model model) {
return "home"; //home์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์คํํ๋ค. //๋ฉ๋ชจ์ฅ์ URL์ฃผ์๊ฐ ํธ์ถํ ๊ฒ์ด๋ค.
// /WEB-INF/views/home.jsp
}
์์) ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ๊ฐ์ ์ด๋ค ํด๋์ค์ธ์ง ์ ์ ์๋ค.
์ปจํธ๋กค๋ฌ, ๋ชจ๋ธ ๋ฑ์ ๋ด๋นํ๋ ๊ฐ์์ ํด๋์ค๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ค.
package org.hj.controller;
@Controller
public class A { //ํด๋์ค - controller ์ญํ ์ ํ๋ ํด๋์ค
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
return "home";// /WEB-INF/views/home.jsp
}
}
@Service
public class B { //ํด๋์ค - service ์ญํ ์ ํ๋ ํด๋์ค
BoardMapper bm; //board ํ
์ด๋ธ mapper
BoardAttachMapper bam; //attach ํ
์ด๋ธ mapper
}
์ปจํธ๋กค๋ฌ๋ ์๋์ ๊ฐ๋ค.
์ฝ๋) servlet-context.xml ์ผ๋ถ
<beans> ... </beans> ์์ ๋ฑ๋ก์ ํ๋ค.
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="org.hj.controller" />
</beans:beans>
ํ๋ก ํธ ์ชฝ์ด sevlet-context.xml
๋ฐฑ์๋ ์ชฝ์ด root-context.xml์ด๋ค.
๋ ๊ฐ์ ๋ฐฉ์์ ๊ฐ๋ค.
package org.hj.controller;
@Controller
@RequestMapping(value = "sample") // ์ ์ฌ๋ผ์ด๋ ์ผ์ ์๋ ๋ฐฉ์
public class A { //ํด๋์ค - controller ์ญํ ์ ํ๋ ํด๋์ค
@RequestMapping(value = "aaa", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
return "home";// /WEB-INF/views/home.jsp
}
}
@Controller
public class A { //ํด๋์ค - controller ์ญํ ์ ํ๋ ํด๋์ค
@RequestMapping(value = "sample/aaa", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
return "home";// /WEB-INF/views/home.jsp
}
}
์ถ์ฝํด์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
package org.hj.controller;
@Controller
@RequestMapping(value = "sample") // ์ ์ฌ๋ผ์ด๋ ์ผ์ ์๋ ๋ฐฉ์
public class A { //ํด๋์ค - controller ์ญํ ์ ํ๋ ํด๋์ค
//@RequestMapping(value = "aaa", method = RequestMethod.GET)
@GetMapping(value = "aaa")
public String home(Locale locale, Model model) {
return "home";// /WEB-INF/views/home.jsp
}
}
public class A { //ํด๋์ค - controller ์ญํ ์ ํ๋ ํด๋์ค
//@RequestMapping(value = "aaa", method = RequestMethod.POST) ๋๋ ์๋ ๋ฐฉ์
@POSTMapping(value = "aaa")
public String home(Locale locale, Model model) {
return "home";// /WEB-INF/views/home.jsp
}
}
ex01 ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํ๋ฉด ๋ฐ๋ก request.getParameter() ํ ํ์์์ด ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๋ณํํ๋ค.
์ฝ๋) 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 + "]";
}
}
์๋ฐ์๋ ๋ ๊ฐ์ง ์ข
๋ฅ์ ๋ฐฐ์ด์ด ์๋ค.
1. ๊ณ ์ ๋ฐฐ์ด
int[]score = new int[5];
๊ณ ์ ๋ฐฐ์ด์ ๋จ์ : ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น
2. ๊ฐ๋ณ ๋ฐฐ์ด
ArrayList<Integer> score = new ArrayList<Integer>
๊ฐ๋ณ ๋ฐฐ์ด์ ์ฅ์ : ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฐฉ์ง, ๋ถ์กฑํ ์๋ ์ ์ฅํ ์ ์๊ฒ ํ๋ค.
Array: ์๋ ์ ๋ ฌ ๊ธฐ๋ฅ์ด ์๋ค. ๊ฒ์์ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
Hashing map: ์๋ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์์ง๋ง ๊ฐ ํค์ ๋ํ ๊ฐ์ ์ ์ฅํ๋ค.
์ธ๋ฑ์ค๊ฐ ํค์ด๋ฏ๋ก (ex. a, b, c, d) ํค๋ฅผ ์ด์ฉํด์ ๊ฒ์์ด ์ฉ์ดํ๋ค.
Model model: ๋ชจ๋ธ ํด๋์ค๋ฅผ ์ ์ธํ๋ค.
model.addAttribute: ๋ชจ๋ธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค.
Model: ์ปจํธ๋กค๋ฌ์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ JSP๋ก ์ ๋ฌํ๋ ๊ฐ์ฒด
Model: ์๋ฒ์์ ํ๋ฉด์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค. (ํ๋ฉด์ ๋ฟ๋ ค์ค๋ค.)
"serverTime"์ด๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ด ์ค์ด์ home.jsp๋ก ์ด๋ํ๋ค.
JSP์ ResultSet๊ณผ ๋น์ทํ๋ค.
๊ทธ๋ฅ int page๋ฉด ํ๋ฉด์ผ๋ก ์ ๊ฐ๋ค.
@ModelAttribute("page")๊ฐ ์์ ์์ผ๋ฏ๋ก ํ๋ฉด์ผ๋ก ์ ๋ฌํ๋ค.
${sampleDTO}, ${page}: sampeDTO, page๋ฅผ ์ถ๋ ฅํ๋ค.
์ด๋
ธํ
์ด์
์ด๋ผ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ ํด์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ผ๋ก ์ค๋ค.
localhost:8080/sample/ex04?name=aaa&age=11&page=9
RedirectAttribute: ์ปจํธ๋กค๋ฌ์์ ๋ ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉ๋๋ค.
- String
- void
- VO, DTO
- ResponseEntity ํ์
- Model, ModelAndView
- HttpHeaders
(๋ฉ์๋์ ๊ตฌ์ฑ: ๋ฆฌํด ํ์ , ๋ฉ์๋ ์ด๋ฆ, ๋งค๊ฐ ๋ณ์)
Controller์ ๋ฆฌํดํ์
- String ํ์
๋ฆฌํด ํ์ ์ด String์ด๋ฉด ๋ฌธ์์ด ๋ค์ .jsp๋ฅผ ๋ถ์ธ๋ค.
sample/aaa ์ธ๋ฐ ์ค์ ๋ก ํ๋ฉด์ ์คํํ๋ ๊ฒ์ bbb.jsp์ด๋ค.
- ๊ธฐ๋ณธ: forward ๋ฐฉ์
.jsp๋ฅผ ๋ถ์ฌ์ ์คํํ๋ค.
// ๊ฒ์ํ ๋ชฉ๋ก ๋ฆฌ์คํธ
public String list (Model model, CriteriaVO cri) {
System.out.println(cri);
// list.jsp ์คํ ํ ๋ select ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์๋ผ
model.addAttribute("list", bs.list(cri));
// list.jsp ์คํ ํ ๋ PageVO์ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์๋ผ.
// ์์ฑ์ ํธ์ถ(๋งค๊ฐ๋ณ์๊ฐ 2๊ฐ์ธ ์์ฑ์)
// boardํ
์ด๋ธ(๊ฒ์ํํ
์ด๋ธ)์ ์ ์ฒด ๊ฑด์(selectํด์)๋ฅผ ์๋์ 190๋์ ์ ๋์
int total=bs.total(cri);
//model.addAttribute("paging", new PageVO(cri, 190));
model.addAttribute("paging", new PageVO(cri, total));
return "board/list";
}
// ๊ฒ์ํ ์์ธ ํ์ด์ง
@RequestMapping(value = "/board/detail", method = RequestMethod.GET)
// public String detail(int bno){
public String detail (BoardVO board, Model model) {
System.out.println(board);
// bs.detail(bno);
model.addAttribute("detail", bs.detail(board));
return "board/detail";
}
- redirect ๋ฐฉ์
redirect:/detail์ .jsp๋ฅผ ๋ถ์ด์ง ์๋๋ค.
๋ ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ๋ฅผ ์คํ์ํจ๋ค. (ํ๋ฉด์ ์คํ์ํค๋ ๊ฒ์ด ์๋๋ค.)
// ๊ฒ์ํ ์์
@RequestMapping(value = "/board/modify", method = RequestMethod.POST)
public String modify (BoardVO board, RedirectAttributes rttr) {
bs.modify(board);
rttr.addAttribute("bno", board.getBno());
// ์์ ํ๊ณ ๋ ๋ค ํ์ธ์ ์ํด ์์ธํ์ด์ง๋ก ํ๋ฉด์ด๋
return "redirect:/detail";
}
// ๊ฒ์ํ ์ญ์
@RequestMapping(value = "/board/remove", method = RequestMethod.POST)
public String remove (BoardVO board) {
bs.remove(board);
return "redirect:/list";
}
๊ฒ์ํ ์์ ์ board:/detail์ด ๊ฒ์ํ ์์ธ์ board/detail์ ์คํ์ํจ๋ค.
๋ฆฌ๋ค์ด๋ ํธํ ๊ณณ์๋ค๊ฐ "bno"๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค.
๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ ๋ณด๋ด๊ณ ์๋ฉธํ๋ค.
๊ฒ์ํ ์ญ์ ์ redirect:/list๊ฐ ๊ฒ์ํ ๋ชฉ๋ก ๋ฆฌ์คํธ์ board/list๋ฅผ ์คํ์ํจ๋ค.
- void ํ์
๋ฆฌํด ํ์
์ด void์ผ ๊ฒฝ์ฐ localhost:8080/sample/ex05์์ jsp ๋ถ์ฌ์(sample/ex05.jsp) ์คํํ๋ค.
URL์ฃผ์์ ์คํํ๊ณ ์ ํ๋ .jsp๊ฐ ๋์ผํ๋ฉด ๊ตณ์ด ๋ฆฌํด ํ์
์ ํ์์๋ค. (void๋ก ๋๋ฉด ๋๋ค.)
๋์ผํ์ง ์์ผ๋ฉด, ๋ฆฌํด ํ์
์ ๋ฌ์ผํ๋ค.
SampleDTO๋ ๋ชจ๋ธ ํ์
์ด๋ค.
return dto: SampleDTO์ ์ ์ฅ๋ ๊ฐ์ ์น ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ธ๋ค.
๊ฐ์ฒด ํ์
์ JSONํ์
์ผ๋ก ์ฒ๋ฆฌํ๋ค.
JSON is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays.
์์ @ResponseBody๋ฅผ ๋ถ์ฌ์ ๊ฐ์ฒด ํ์ ์์ ์๋ฆฐ๋ค.