반응형

 

void 타입

 

 

HomeController.java

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

 

 

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>

 

결과 화면1

 

 

 

String 타입

 

 

HomeController.java

//2. String 타입
//뷰 파일의 경로와 파일 이름을 나타냄
@GetMapping("/goHome0201")
public String home0201() {
	log.info("home0201");
	
	// /views/home0201.jsp	
	return "home0201"; // sub 밑에 있는 파일의 경우 sub/home0201로 기입해도 된다.
}

 

 

home0201.jsp

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

 

결과 화면2

 

 

 

  • redirect

HomeController.java

//반환값이 "redirect:"로 시작하면
//리다이렉트(새로운 URL을 재요청) 방식으로 처리함
@GetMapping("/goHome0204")
public String home0204() {
	log.info("home0204");
	
	return "redirect:/sub/goHome0205";
}

@GetMapping("/sub/goHome0205")
public String home0205() {
	log.info("home0205");
	
	//forwarding : 
	// "/"로 시작하면 웹 애플리케이션의 컨텍스트 경로에 영향을 받지 않는 절대경로를 의미함
	return "/sub/home0205";
}

 

 

goHome0205.jsp

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

 

 

home0205.jsp

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

 

결과 화면3 : /goHome0204로 url 입력 시 화면 바뀜

 

 

 

자바빈즈 클래스 타입

 

 

HomeController.java

//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;
}

 

 

Member.java

package kr.or.ddit.vo;

import lombok.Data;

//POJO가 약해짐
@Data
public class Member {
	private String userId;
	private String userName = "hongkd";
	private String password = "1234";
}

 

결과 화면4

 

 

 

컬렉션 List 타입

 

 

HomeController.java

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

 

 

Member.java

package kr.or.ddit.vo;

import lombok.Data;

//POJO가 약해짐
@Data
public class Member {
	private String userId;
	private String userName = "hongkd";
	private String password = "1234";
}

 

결과 화면5

 

 

 

컬렉션 Map 타입

 

 

Map 형태의 컬렉션 자료를 JSON 객체 타입의 데이터로 만들어서 반환

 

HomeController.java

/* 5. 컬렉션 Map 타입
JSON : JavaScript Object Notation(문자열)
Map 형태의 컬렉션 자료를 JSON 객체 타입의 데이터로 만들어서 반환
 */
@ResponseBody
@GetMapping("/goHome05")
public Map<String,Member> home05() {
	log.info("home05");
	
	Map<String, Member> map
		= new HashMap<String, Member>();
	
	Member member = new Member();
	member.setUserId("a001");
	
	Member member2 = new Member();
	member2.setUserId("b001");
	
	map.put("key1", member);
	map.put("key2", member2);
	
	// View : /views/goHome05.jsp (x)
	return map;
}

 

결과 화면6

 

 

 

ResponseEntity<Void> 타입

 

 

response 할 때 Http 헤더 정보와 내용을 가공

 

HomeController.java

/* 6. ResponseEntity<Void> 타입
response 할 때 Http 헤더 정보와 내용을 가공
*/
@ResponseBody
@GetMapping("/goHome06")
public ResponseEntity<Void> home06() {
	log.info("home06");
	
	// 응답 데이터가 없음(void)
	// Http 상태 코드 : 200(성공)
	return new ResponseEntity<Void>(HttpStatus.OK);
}

 

결과 화면7

 

 

 

ResponseEntity<String> 타입

 

 

response 할 때 Http 헤더 정보와 문자열 데이터를 전달

 

HomeController.java

/* 7. ResponseEntity<String> 타입
response 할 때 Http 헤더 정보와 문자열 데이터를 전달 
*/
@ResponseBody
@GetMapping("/goHome07")
public ResponseEntity<String> home07() {
	log.info("home07");
	
	// return new ResponseEntity<String>("SUCCESS", HttpStatus.BAD_REQUEST); // 에러를 보이지만 bad rquest를 사용할 수 있다.
	return new ResponseEntity<String>("SUCCESS", HttpStatus.OK);
}

 

결과 화면8

 

 

 

ResponseEntity<자바빈즈 클래스:VO> 타입

 

 

자바빈 규약 : 1.프로퍼티 2.기본생성자 3.getter/setter메서드
response 할 때 Http 헤더 정보와 객체 데이터를 전달

 

HomeController.java

/* 8. ResponseEntity<자바빈즈 클래스:VO> 타입
자바빈 규약 : 1.프로퍼티 2.기본생성자 3.getter/setter메서드
response 할 때 Http 헤더 정보와 객체 데이터를 전달
 */
@ResponseBody
@GetMapping("/goHome08")
public ResponseEntity<Member> home08(){
	log.info("home08");
	
	Member member = new Member();
	member.setUserId("a001");
	
	return new ResponseEntity<Member>(member,HttpStatus.NOT_FOUND);
}

 

결과 화면9 : HttpStatus.NOT_FOUND 를 사용했기에 404 에러가 뜸

 

 

 

  • 응용

HomeController.java

/* 8. ResponseEntity<자바빈즈 클래스:VO> 타입
자바빈 규약 : 1.프로퍼티 2.기본생성자 3.getter/setter메서드
response 할 때 Http 헤더 정보와 객체 데이터를 전달
 */
@ResponseBody
@GetMapping("/goHome08")
public ResponseEntity<Member> home08(){
	log.info("home08");
	
	Member member = new Member();
//		member.setUserId("a001");
	
	ResponseEntity<Member> entity
		= new ResponseEntity<Member>(member,HttpStatus.NOT_FOUND);
	
	if(member.getUserId() == null) {
		return new ResponseEntity<Member>(member,HttpStatus.FORBIDDEN);
	}else {
		return new ResponseEntity<Member>(member,HttpStatus.OK);
	}
	
}

 

결과 화면10

 

 

 

ResponseEntity<List> 타입

 

 

response할 때 Http 헤더 정보와 객체 배열 데이터를 전달

 

HomeController.java

//9. ResponseEntity<List> 타입
//response할 때 Http 헤더 정보와 객체 배열 데이터를 전달
@ResponseBody
@GetMapping("/goHome09")
public ResponseEntity<List<Member>> home09(){
	
	List<Member> list = new ArrayList<Member>();
	
	Member member = new Member();
	member.setUserId("a001");
	list.add(member);
	Member member2 = new Member();
	list.add(member2);
	
	return new ResponseEntity<List<Member>>(list,HttpStatus.OK);
}

 

결과 화면11

 

 

 

ResponseEntity<Map> 타입

 

 

response할 때 Http헤더 정보와 객체 데이터를 Map 형태로 전달

 

HomeController.java

/* 10. ResponseEntity<Map> 타입
response할 때 Http헤더 정보와 객체 데이터를 Map 형태로 전달
*/
@ResponseBody
@GetMapping("/goHome10")
public ResponseEntity<Map<String, Member>> home10(){
	log.info("home10");
	
	Map<String, Member> map
	 = new HashMap<String, Member>();
	
	Member member = new Member();
	member.setUserId("a001");
	
	Member member2 = new Member();
	member2.setUserId("b001");
	
	map.put("key1", member);
	map.put("key2", member2);
	
	// View : /views/goHome10.jsp (x)
		return new ResponseEntity<Map<String, Member>>(map, HttpStatus.OK);
   }

 

결과 화면11

 

 

 

ResponseEntity<byte[]>타입

 

 

response 할 때 Http 헤더 정보와 바이너리(binary)
binary : 2개(0,1) => 사진, 영상, 음성
파일 데이터를 전달하는 용도로 사용

 

 

+파일 업로드로 인해 pom.xml에 추가

</dependencies> 바로 위에 추가

추가 후 Run As > Maven build 하여서 BUILD SUCCESS가 뜨는 지 확인

		<!-- 파일업로드 시작  -->
		<!-- common-fileupload 라이브러리는 tomcat7.0버전 이후로는
		서블릿3.0이상에서 지원함
		-->
		<!-- 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>
		
		<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
		<dependency>
		    <groupId>commons-fileupload</groupId>
		    <artifactId>commons-fileupload</artifactId>
		    <version>1.4</version>
		</dependency>
		
		<!-- 파일을 처리하기 위한 의존 라이브러리 -->
		<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
		<dependency>
		    <groupId>commons-io</groupId>
		    <artifactId>commons-io</artifactId>
		    <version>2.11.0</version>
		</dependency>
		
		<!-- 썸네일 -->
		<!-- https://mvnrepository.com/artifact/org.imgscalr/imgscalr-lib -->
		<dependency>
		    <groupId>org.imgscalr</groupId>
		    <artifactId>imgscalr-lib</artifactId>
		    <version>4.2</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
		<dependency>
		    <groupId>net.coobird</groupId>
		    <artifactId>thumbnailator</artifactId>
		    <version>0.4.8</version>
		</dependency>
		      
		<!-- 파일업로드 끝  -->

 

build success로 인해 사진의 파일을 다운로드 받았다는 걸 확인할 수 있음

 

 

HomeController.java

/* 11. ResponseEntity<byte[]>타입
response 할 때 Http 헤더 정보와 바이너리(binary)
binary : 2개(0,1) => 사진, 영상, 음성
파일 데이터를 전달하는 용도로 사용
*/
@ResponseBody
@GetMapping("/goHome1101")
public ResponseEntity<byte[]> home1101() throws IOException {
	log.info("home1101");
	
	//00111011110011...
	InputStream in = null;
	//응답객체
	ResponseEntity<byte[]> entity = null;
	
	HttpHeaders headers = new HttpHeaders();
	
	try {
		//이미지 읽음
		//							이미지가 있는 경로 찾아야함
		in = new FileInputStream("C:\\eGovFrameDev-3.10.0-64bit\\workspace\\springProj\\src\\main\\webapp\\resources\\img\\avatar4.png");
		
		//png 이미지라는 것을 헤더에 알려줘서 세팅함
		headers.setContentType(MediaType.IMAGE_PNG);
		
		//이미지를 읽은 결과 객체를 응답 개체에 할당
		//HttpStatus.CREATED : http 응답 상태 코드 201
		entity = new ResponseEntity<byte[]>(IOUtils.toByteArray(in),headers,HttpStatus.CREATED);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		in.close();
	}
	
	return entity;
}

 

결과 화면12 : 기존에 있던 사진 파일 사용

 

 

HomeController.java

@ResponseBody
@GetMapping("/goHome1102")
public ResponseEntity<byte[]> home1102() throws IOException {
	log.info("home1102");
	
	//Stream : 파일을 읽거나 쓸 때, 네트워크 소켓을 거쳐 통신할 때 쓰이는 추상적인 개념
    //         데이터가 전송되는 통로
    //InputStream : 추상 클래스. 데이터가 들어오는 통로의 역할에 관해 규정하고 있음
    //            1) 데이터를 읽어야 함 2) 남은 데이터 확인 3) 데이터 skip 가능 4) close가능(통로 제거)
    //            5) 특정 시점부터 다시 읽을 수 있음
	InputStream in = null;
	ResponseEntity<byte[]> entity = null;
	
	HttpHeaders headers = new HttpHeaders();
	
	try {
		in = new FileInputStream("C:\\eGovFrameDev-3.10.0-64bit\\workspace\\springProj\\src\\main\\webapp\\resources\\img\\avatar4.png");
		
		headers.setContentType(MediaType.IMAGE_PNG);
		
		//IOUtils : commos-io에서 제공. byte로 관리
		//HttpStatus.CREATED : http 응답 상태 코드 201
		entity = new ResponseEntity<byte[]>(IOUtils.toByteArray(in),headers,HttpStatus.CREATED);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
		
		//Bad Request : 400
		entity = new ResponseEntity<byte[]>(HttpStatus.BAD_REQUEST);
	}finally {
		in.close();
	}
	
	return entity;
}

 

commos-io에서 IOUtils을 제공해줌

 

결과 화면13 : http 응답 상태 코드 201이 나오는 것 확인

 

 

반응형