일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바
- html
- 페이지분석
- 크롤링 오류
- 자바 예외
- 웹브라우저 수용도
- SQL입문
- DoitSQL입문
- 키-값 데이터베이스
- 숫자형식오류
- SQL
- R1C3
- dbms
- 숫자 형식
- 배열 3요소
- 배열 예제
- DoitSQL
- Doit입문SQL
- 함수
- HTML역사
- 함수 선언
- 생성자
- 예제
- 우아한테크
- DoIt
- 자바 오류
- 크롤링
- 데이터베이스
- 웹 브라우저 전쟁
- 예외
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바
- html
- 페이지분석
- 크롤링 오류
- 자바 예외
- 웹브라우저 수용도
- SQL입문
- DoitSQL입문
- 키-값 데이터베이스
- 숫자형식오류
- SQL
- R1C3
- dbms
- 숫자 형식
- 배열 3요소
- 배열 예제
- DoitSQL
- Doit입문SQL
- 함수
- HTML역사
- 함수 선언
- 생성자
- 예제
- 우아한테크
- DoIt
- 자바 오류
- 크롤링
- 데이터베이스
- 웹 브라우저 전쟁
- 예외
- Today
- Total
프로그래밍
[SpringBoot] day88 : 스프링부트 방식으로 MVC 구현(값 주고 받기) 본문
2023.09.14.목
스프링부트 방식으로 MVC 구현(값 주고 받기)
스프링부트 방식으로 값을 주고 받는 기본적인 MVC 구조를 구현해보자
우선 Lombok, JSP 컴파일러, JSTL 라이브러리 등을 추가해주었다
2023.09.13 - [환경설정] - [Spring Boot] 스프링부트 설치 및 초기 설정
[Spring Boot] 스프링부트 설치 및 초기 설정
2023.09.13.수 스프링부트 초기 설정 2023.09.13 - [Spring Boot] - [SpringBoot] 스프링 VS 스프링부트(Spring VS SpringBoot) [SpringBoot] 스프링 VS 스프링부트(Spring VS SpringBoot) 2023.09.13.수 스프링 VS 스프링부트 스프링
dev-9rm.tistory.com
2023.09.14 - [환경설정] - [Spring Boot] 스프링부트 롬복(Lombok)설치 및 초기 설정
[Spring Boot] 스프링부트 롬복(Lombok)설치 및 초기 설정
2023.09.14.목 롬복(Lombok) Lombok(롬복)은 Java 라이브러리로 반복되는 getter, setter, toString 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리이다 자바 클래스에서 VO getter setter toString equals
dev-9rm.tistory.com
파일구조
위와 같이 파일이 구성되어 있다
Controller
@Controller
public class CTRL {
@RequestMapping("/") //루트 요청
public @ResponseBody String root() { // ViewResolver가 동작하지 않고 단순 문자열 값을 리턴
return "루트요청";
}
}
기본적인 루트 요청시 @ResponseBody 어노테이션 설정을 활용하여
ViewResolver를 작동시키지 않고 리턴 String 값이 경로가 아닌 단순 문자열 값임을 알려줌
@RequestMapping("/test")
public String test(VO vo, Model model) { //커맨드객체 방식
System.out.println("vo: "+vo);
model.addAttribute("apple",vo.getId());
return "test"; // WEB-INF/views/test.jsp
}
가장 기본적으로 많이 써왔던 커맨드객체 방식이다
ViewResolver 설정을 마쳤기 때문에 해당 리턴의 경로로 이동하게 된다
@RequestMapping("/test2")
public String test(@ModelAttribute("ari")VO vo) {
System.out.println("vo: "+vo);
return "test2"; // WEB-INF/views/test2.jsp
}
일반적으로는 model 객체를 활용하여 데이터를 전달한다
커맨드 객체를 사용가능한 상태이기 때문에
커맨드객체명.xxx 형태로도 사용이 가능하다
이 경우에는 커맨드객체명을 View에서 알고 있어야 하는데
해당 이름을 @ModelAttribute을 통해 이름을 지정할 수 있다
★Q. 자바에서는 파라미터로 사용하는 변수는 보통 "지역변수"
지역변수는 메서드가 종료되는 사라지지 않나요?
메서드 종료되었는데 어떻게 뷰에서 사용할 수 있어요???
=> 일반 "지역변수" (특히 int String)는 메서드 종료시 소멸
=> 지금 사용하는 커맨드변수는 지역변수가 아님
=> 커맨드 변수는 지역변수
=> 컨테이너가 new 해준 IoC 객체 == 커맨드 객체
컨테이너 메모리에 저장된 객체
"참조변수" call by reference ★
OOP (특히 자바)에서 좋아하는 기법
return 2개 이상이 불가능하기 때문에 발달한 기법
∴ Q. 커맨드 객체를 어떻게 V에서 사용할 수 있나요?
컨테이너가 IoC 해준(개발자 대신 new 해준) 객체라서 참조변수 입니다
OOP인 JAVA에서 좋아하는 기법입니다
2023.05.09 - [자바/자바 기초] - [자바 기초] day05 : 함수의 인자
[자바 기초] day05 : 함수의 인자
2023.05.09.화 함수의 인자 함수를 호출할 때 인자로 배열을 쓰는 경우 참조에 의한 호출이 발생한다 이때 배열 값을 반환하지 않더라도 함수 인자에 배열의 주소 값이 전달되었기 때문에 힙 메모
dev-9rm.tistory.com
call by reference (참조에 의한 호출) 예제 설명 포함
// request 활용 방식
@RequestMapping("/test01")
public String test01(HttpServletRequest request, Model model) {
VO vo = new VO();
vo.setId(request.getParameter("id"));
System.out.println("test01 vo: "+vo);
// model.addAttribute("apple",request.getParameter("id"));
model.addAttribute("apple",vo.getId());
return "test";
}
request 자체가 NOT POJO인 Servlet 객체이기 때문에 활용도가 낮다
// @RequestParam 활용한 방식
@RequestMapping("/test02")
public String test02(@RequestParam("id")String id, @RequestParam("name")String name, Model model) {
model.addAttribute("apple", id);
return "test";
}
커맨드 객체를 활용한 방식보다 성능적으로 부족하진 않지만
인자의 수가 늘어나기 쉬워 가독성이 커맨드 객체를 사용할때보다 별로이다
단, 뷰랑 모델이 변수명등의 고민을 하지 않아도 된다는 장점이 있다
// 모든 값을 파라미터로 전달하는 방식 REST API(모바일에 따른 추세)
@RequestMapping("/test03/{id}/{name}")
public String test03(@PathVariable String id, @PathVariable String name, Model model) {
model.addAttribute("apple", id);
return "test";
}
URL(경로/PATH)에 데이터를 바로 보내는 형식이다
모바일에 따른 추세로 점점 늘어나고 있는 형식이다
REST API 방식에서 주로 채용하는 방식이다
View
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset = "UTF-8">
<title>롬복예제</title>
</head>
<body>
<h1>${apple}</h1>
</body>
</html>
Model
import lombok.Data;
@Data
public class VO {
private String id;
private String name;
}
소스코드 보러가기
'자바 > Spring Boot' 카테고리의 다른 글
[SpringBoot] day95 : MyBatis 프레임워크 (0) | 2023.09.27 |
---|---|
[SpringBoot] day93 : Service와 Interface (2) | 2023.09.21 |
[Springboot] DB 연결 (0) | 2023.09.18 |
[SpringBoot] day89 : 유효성검사(Validator) (0) | 2023.09.15 |
[SpringBoot] 스프링 VS 스프링부트(Spring VS SpringBoot) (0) | 2023.09.13 |