Spring 실습

Spring 실습 7일차(응답(Response))(1)

choco2706 2024. 4. 30. 18:55

 

MemberVO 생성

실습에서 사용할 MemberVO를 만들어주자

package kr.or.ddit.vo;

import lombok.Data;

@Data
public class Member {
	private String userId;
	private String userName = "hongkd";
	private String password = "1234";
}

 

 

HomeController

스프링 프로젝트를 처음 만들면 HomeController라는게 만들어졌을텐데

HomeController를 한번 열어보자

package kr.or.ddit;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

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.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Slf4j
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
}

 

여기에 우선 어노테이션 @Slf4j를 추가해준다.

Void 타입

// GetMapping : method=RequestMethod.GET
	// 속성이 하나인 경우 속성명을 생략할 수 있음
	// void타입은 호출하는 URL과 동일한 뷰 이름을 나타냄
	@GetMapping(value="/goHome0101")
	public void home0101() {
		log.info("home0101");
		
		// mav.setViewName("goHome0101");
		// return "goHome0101";
		// /views/goHome0101.jsp
	}

 

 

void 타입은 호출하는 URL과 동일한 뷰 이름을 나타낸다.

 

views폴더에 goHome0101.jsp를 만들어준다.

경로

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>Home0101</h1>

 

위 코드를 넣어준 뒤 localhost/goHome0101을 들어가면

goHome0101
tiles-config.xml

 

이전에 sub-layout을 만들고 경로 설정을 해놨기 떄문에 */*과 같은 스타일(lprod/list, lprod/detail)의 경로가 아니더라도 tiles가 적용이 된다.

String 타입(많이 사용한다.)

@GetMapping(value="goHome0201")
	public String home0201() {
		log.info("home0201");
		
		// /views/home0201.jsp
		return "home0201";
	}
	
	@GetMapping("/sub/goHome0202")
	public String home0202() {
		log.info("home0201");
		
		return "home0202";
	}
	
	@GetMapping("/sub/goHome0203")
	public String home0203() {
		return "sub/home0203";
	}
	
	//반환값이 "redirect:"로 시작하면
	//리다이렉트(새로운 URL을 재요청) 방식으로 처리함
	@GetMapping("/goHome0204")
	public String home0204() {
		log.info("home0204");
		
		// redirect : 새로운 URL 재요청
		return "redirect:/sub/goHome0205";
	}
	
	@GetMapping("/goHome0205")
	public String home0205() {
		log.info("home0205");
		
		// forwarding : 
		// "/"로 시작하면 웹 애플리케이션의
		// 컨텍스트 경로에 영향을 받지 않는
		// 절대경로를 의미함
		return "/sub/home0205";
	}

 

/sub/home0205의 경우 tiles-config에서 설정한 경로와 다르기 떄문에 tiles가 깨지게 된다.

자바빈즈 클래스 타입

// JSON : JavaScript Object Notation
// 3. 자바빈즈 클래스 타입
// JSON 객체 타입의 데이터를 만들어서 반환
// Member타입의 member객체 -> String(serialize)
	@ResponseBody
	@GetMapping("/goHome0301")
	public Member home0301() {
		log.info("home0301");
		
		Member member = new Member();
		
		return member;
	}

 

@ResponseBody 어노테이션은 member객체를 String으로 바꿔주는 serialize작업을 해준다.

 

컬렉션 List 타입

	// 4. 컬렉션 List 타입
	// JSON 객체 배열 타입의 데이터를 만들어서 반환
	// 반환값이 컬렉션 List 타입이면 JSON객체 "배열" 타입으로
	// 자동으로 변환
	@ResponseBody
	@GetMapping("/goHome04")
	public List<Member> home04(){
		Member member = new Member();
		Member member2 = new Member();
		
		List<Member> list = new ArrayList<Member>();
		
		list.add(member);
		list.add(member2);
		
		return list;
	}

 

7일차 종료~~