일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 게시판프로젝트
- 정처기공부
- 파이선
- function
- 어노테이션
- 이것이자바다
- 자바
- java
- springboot
- 코딩테스트
- 프로그래머스
- 정처기설명
- CRUD
- 정처기예상문제
- 소프트웨어개발
- 정보처리기사
- 게시판만들기
- 게시판
- PYTHON
- 정처기
- 스프링
- spring
- CRUD구현
- 자바의정석
- 정처기필기
- 정보처리기사필기
- 파이썬
- 소프트웨어설계
- 스프링부트
- 자바의정석요약
- Today
- Total
Helmi
구) 기초적인 컨트롤러 생성 실습 (WAS) 본문
1. void 리턴 타입 경우
org.zerock.web.SmapleController
package org.zerock.web;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SampleController {
private static final Logger logger =
LoggerFactory.getLogger(SampleController.class);
@RequestMapping("doA")
public void doA() {
logger.info("doA called.......");
}
@RequestMapping("doB")
public void doB() {
logger.info("doB called........");
}
}
@Controller : 이 클래스를 컨트롤러로 설정하게 함
@RequestMapping : 특정 URI 경로에 해당하면 메소드 실행 됨
현재 메소드 리턴 타입이 void인 경우, 스프링 MVC는 현재 경로에 해당하는 JSP 파일 실행
2. String이 리턴타입인 경우
만약 컨트롤러에서 메소드 리턴 타입이 문자열일 경우, 결과는 '문자열 + .jsp' 파일 찾아 실행
org.zerock.web.SmapleController2
package org.zerock.web;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SampleController2 {
private static final Logger logger =
LoggerFactory.getLogger(SampleController2.class);
@RequestMapping("doC")
public String doC( @ModelAttribute("msg")String msg) {
logger.info("doC called........");
return "result";
}
}
@RequestMapping : URI가 '/doC'인 경우 동작
@ModelAttribute("msg") : 요청(request)시, 'msg' 이름의 파라미터를 문자열로 처리, 뷰에 전달되도록 함. 자동으로 이뤄지는 작업 (개발자 별도 코드 작성 필요X)
doC() 메소드 리턴 값으로 사용된 'result'는 결과적으로 /WEB-INF/views/result.jsp 파일 찾아 실행
/WEB-INF/views/result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//w3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<span> Hello${msg}</span>
</body>
</html>
<span>태그 : JSP의 EL사용해 ${msg} 출력 부분 보임.
스프링 MVC의 @ModelAttribute는 자동으로 해당 객체 뷰까지 전달
불러올 때 : ex) localhost8080/doC?msg=Helmi
결과 : HelloHelmi
3. 만들어진 결과 데이터를 전달해야 하는 경우
컨트롤러 제작하며 가장 많이 하는 작업 - 다른 객체 도움 받아 만들어진 데이터를 뷰로 전달하는 일.
이때는 스프링 MVC의 Model 객체 사용해 간편히 처리 가능
org.zerock.domain.ProductVO
package org.zerock.domain;
public class ProductVO {
private String name;
private double price;
public ProductVO(String name, double price) {
super();
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
@Override
public String toString() {
return "ProductVO [name=" + name + ", price=" + price + "]";
}
}
org.zerock.web.SmapleController3
package org.zerock.web;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.zerock.domain.ProductVO;
@Controller
public class SampleController3 {
private static final Logger logger =
LoggerFactory.getLogger(SampleController3.class);
@RequestMapping("doD")
public String doD(Model model) {
//make sample data
ProductVO product = new ProductVO("Sample Product", 10000);
logger.info("doD");
model.addAttribute(product);
return "productDetail";
}
}
Model : 스프링 MVC에서 기본적으로 제공하는 클래스(import org.springframework.ui.Model; 참고).
용도 - 뷰에 원하는 데이터 전달 ,컨테이너/상자 같은 역할 (필요 데이터 담은 후, 뷰(jsp)로 전달)
ProductVO 클래스 객체 생성 이후 addAttribute() 메소드 이용해 ProductVO 객체 보관
addAttribute() 사용
1. addAttribte("이름", 객체): 객체에 특별한 이름 부여해 뷰에서 이름값 이용해 객체 처리
2. addAttribte(객체): 이름 지정 않는 경우, 자동으로 저장되는 객체의 클래스명 앞글자 소문자로 처리한 클래스명을 이름으로 간주
/WEB-INF/views/productDetail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<Span> ${productVO.name }</Span>
<Span> ${productVO.price }</Span>
</body>
</html>
<span> 태그 내용 보면 productVO.name, productVO.price 이용. 이때 productVO 변수 이름이 어떻게 만들어진 것인지 알고 있어야 함.
4. 리다이렉트 해야하는 경우
특정 컨트롤러 로직 처리 시 다른 경로 호출해야 하는 경우, 'redirect:' 사용
RedirectAttributes라는 클래스를 파라미터로 같이 사용하게되면 리다이렉트 시점에 원하는 데이터를 임시로 추가해 넘기는 작업이 가능.
org.zerock.web.SampleController4
package org.zerock.web;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controller
public class SampleController4 {
private static final Logger logger =
LoggerFactory.getLogger(SampleController4.class);
@RequestMapping("/doE")
public String doE(RedirectAttributes rttr) {
logger.info("doE called but redirect to /doF...........");
rttr.addFlashAttribute("msg", "This is the Message!! with redirected");
return "redirect:/doF";
}
@RequestMapping("/doF")
public void doF(@ModelAttribute String msg) {
logger.info("doF called............."+msg);
}
}
SampleController4 코드 내 doE() 메소드의 URI는 '/doE'. 외부에서 호출하도록 되어있음. (메소드의 파라미터 선언에 RedirectAttributes를 파라미터로 사용하는 점 주목)
doE() 메소드의 결과로 리다이렉트 시점에 문자열 정보 하나 더 전달 위해 'msg' 데이터 추가함.
이때 addFlashAttribute()는 임시 데이터 전달
마지막 반환 리턴값은 'redirect:...'로 시작하는 문자열 반환하므로 스프링 MVC는 브라우저에 다시 '/doF' 호출
RedirectAttributes 이용 경우, URI에 보이지 않게 데이터 전달
이외에 'forward:...' 역시 지원 함.
5. JSON 데이터 생성하는 경우
스프링 MVC는 JSON (JavaScript Object Notation) 데이터 처리 간단히 처리 가능
이를 위해 pom.xml에 jackson-databind 라이브러리 추가
pom.xml
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.1</version>
</dependency>
JSON 데이터 생성 위해 사용자는 적절한 객체 반환해주고, @ResponseBody 어노테이션 추가해주는 작업만 해주면 됨
org.zerock.web.SampleController5
package org.zerock.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.zerock.domain.ProductVO;
@Controller
public class SampleController5 {
@RequestMapping("/doJSON")
public @ResponseBody ProductVO doJSON() {
ProductVO vo = new ProductVO("샘플상품", 30000);
return vo;
}
}
- @ResponseBody
- 리턴타입 일반 객체
→ JSON 처리 끝
* 위 URI 실행 시 반드시 STS 내에 내장된 브라우저 아닌 일반 브라우저로 확인해야 함.
STS 내장 브라우저는 JSON 데이터 처리 불가. *
'Spring' 카테고리의 다른 글
스프링 특징, 의존성 주입 (0) | 2023.04.12 |
---|---|
스프링 설명 조금 + 설정 시 Java Configuration 하는 경우 (0) | 2023.04.11 |
구) 스프링 + Mybatis 실전 (0) | 2023.04.07 |
구) 스프링 + MyBatis 소개 (0) | 2023.04.06 |
스프링 MVC에서 주로 사용하는 어노테이션 종류 (0) | 2023.04.04 |