'2020'에 해당되는 글 497건

반응형
  • String: jsp를 이용하는 경우에는 jsp 파일의 경로와 파일이름을 나타내기 위해서 사용합니다.
  • void: 호출하는 URL과 동일한 이름의 jsp를 의미합니다.
  • VO, DTO 타입: 주로 JSON 타입의 데이터를 만들어서 반환하는 용도로 사용합니다.
  • ResponseEntity 타입: response 할 때 Http 헤더 정보와 내용을 가공하는 용도로 사용합니다.
  • Model. ModelAndView: Model로 데이터를 반환하거나 화면까지 같이 지정하는 경우에 사용합니다.
  • HttpHeaders: 응답에 없는 내용없이 Http 헤더 메시지만 전달하는 용도로 사용합니다.

 

Controller의 메서드가 사용할 수 있는 리턴타입의 종류.

 

void 타입..

String: jsp를 이용하는 경우에는 jsp 파일의 경로와 파일이름을 나타내기 위해서 사용합니다.

void: 호출하는 URL과 동일한 이름의 jsp를 의미합니다.

VO, DTO 타입: 주로 JSON 타입의 데이터를 만들어서 반환하는 용도로 사용합니다.

ResponseEntity 타입: response 할 때 Http 헤더 정보와 내용을 가공하는 용도로 사용합니다.

Model. ModelAndView: Model로 데이터를 반환하거나 화면까지 같이 지정하는 경우에 사용합니다.

HttpHeaders: 응답에 없는 내용없이 Http 헤더 메시지만 전달하는 용도로 사용합니다.

 

 

Controller의 메서드가 사용할 수 있는 리턴타입의 종류.

 

 

 

--void 타입..

메서드의 리턴 타입을 void로 지정하는 경우 일반적인 경우에는 해당 URL의 경로를 그대로 JSP파일의 이름으로 사용하게 됩니다.

 

--String 타입

  상황에 따라 다른 화면을 보여줄 필요가 있을 경우 사용.(if ~ else)

  

-- 객체 타입

Controller의 메서드 리턴 타입을 VO나 DTO타입 등 복합적인 데이터가 들어간 객체 타입으로 지정할 수 있는데, 이 경우는 주로 JSON 데이터를 만들어 내는 용도로 사용합니다.

 

반응형

'2020 > 주저리 주저리 타이핑.. 낙서장.' 카테고리의 다른 글

Controller의 Exception 처리  (0) 2020.05.08
파일 업로드 처리  (0) 2020.05.08
RedirectAttributes  (0) 2020.05.06
@ModelAttribute 어노테이션  (0) 2020.05.06
Model이라는 데이터 전달자  (0) 2020.05.06
블로그 이미지

꽃꽂이하는개발자

,
반응형

일회성으로 데이터를 전달하는 용도.

 

Servlet에서 redirect방식

response.sendRedirect("/home?name=aaa&age=10");

 

스프링 MVC를 이용하는 경우

rttr.addFlashAttribute("name", "AAA");
	rrtr.addFlashAttribute("age", 10);
    
    return "redirect:/";
    

 

RedirectAttributes는 Model과 같이 파라미터로 선언해서 사용.

addFlashAttribute(이름, 값) 메서드를 이용해서 화면에 한 번만 사용하고 다음에는 사용되지 않는 데이터를 전달하기 위해서 사용합니다.

 

반응형

'2020 > 주저리 주저리 타이핑.. 낙서장.' 카테고리의 다른 글

파일 업로드 처리  (0) 2020.05.08
Controller의 리턴 타입  (0) 2020.05.06
@ModelAttribute 어노테이션  (0) 2020.05.06
Model이라는 데이터 전달자  (0) 2020.05.06
@DateTimeFormat  (0) 2020.05.06
블로그 이미지

꽃꽂이하는개발자

,
반응형
package org.zerock.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.zerock.domain.SampleDTO;
import org.zerock.domain.SampleDTOList;
import org.zerock.domain.TodoDTO;

import lombok.extern.log4j.Log4j;



@Controller
@RequestMapping("/sample/*")
@Log4j
public class SampleController {
	
	@InitBinder
	public void initBinder(WebDataBinder binder) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(dateFormat, false));
	}
	
	@RequestMapping("")
	public void basic() {
		log.info("basic.....");
	}
	
	@RequestMapping(value="/basic", method = {RequestMethod.GET, RequestMethod.POST})
	public void basicGet() {
		log.info("basic get..........");
	}
	
	@GetMapping("/basicOnlyGet")
	public void basicGet2() {
		log.info("basic get only get..........");
	}
	
	@GetMapping("/ex01")
	public String ex01(SampleDTO dto) {
		log.info("" + dto);
		
		return "ex01";
	}
	@GetMapping("ex02")
	public String ex02(@RequestParam("name") String name, @RequestParam("age") int age) {
		
		log.info("name:" + name);
		log.info("age:"+ age);
	
		return "ex02";
	}
	@GetMapping("/ex02List")
	public String ex02List(@RequestParam("ids") ArrayList<String> ids) {
		
		log.info("ids: " + ids);
		
		return "ex02List";
	}
	
	@GetMapping("/ex02Array")
	public String ex02Array(@RequestParam("ids") String[] ids) {
		
		log.info("array ids:" + Arrays.toString(ids));
		
		return "ex02Array";
	}
	
	@GetMapping("/ex02Bean")
	public String ex02Bean(SampleDTOList list) {
		log.info("list dtos:"+list);
		return "ex02Bean";
	}
	
	@GetMapping("/ex03")
	public String ex03(TodoDTO todo) {
		log.info("todo:" + todo);
		
		return "ex03";
	}
	
	@GetMapping("/ex04")
	public String ex04(SampleDTO dto, int page) {
		
		log.info("dto:" + dto);
		log.info("page:" + page);
		
		return "/sample/ex04";
	}
}

SampleController

package org.zerock.domain;

import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;

import lombok.Data;

@Data
public class TodoDTO {

	private String title;
	
	@DateTimeFormat(pattern = "yyyy/MM/dd")
	private Date dueDate;
}

TodoDTO

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>

	<h2>SAMPLEDTO ${sampleDTO }</h2>
	<h2>page ${page} </h2>
</body>
</html>

ex04.jsp

 

 

출처는 구멍가게코딩단의 코드로배우는 스프링 웹 프로젝트의 일부분입니다.

반응형

'2020 > 주저리 주저리 타이핑.. 낙서장.' 카테고리의 다른 글

Controller의 리턴 타입  (0) 2020.05.06
RedirectAttributes  (0) 2020.05.06
Model이라는 데이터 전달자  (0) 2020.05.06
@DateTimeFormat  (0) 2020.05.06
@InitBinder  (0) 2020.04.29
블로그 이미지

꽃꽂이하는개발자

,
반응형

  Controller의 메서드를 작성할 때는 특별하게 Model이라는 타입을 파라미터로 저장할 수 있습니다. Model 객체는 JSP에 컨트롤러에서 생성된 데이터를 담아서 전달하는 역할을 하는 존재입니다. 이르르 이용해서 JSP와 같은 뷰로 전달해야 하는 데이터를 담아서 보낼 수 있습니다. 메서드의 파라미터에 Model 타입이 지정된 경우에는 스프링은 특별하게 Model 타입의 객체를 만들어서 메서드에 주입하게 됩니다.

 

  Model은 모델 2방식에서 사용하는 request.setAttribute()와 유사한 역할을 합니다. Servlet을 이용해 본 적이 있다면 다음과 같은 코드에 익숙할 것입니다.

 

request.setAttribute("serverTime", new java.util.Date());

requestDispatcher dispatcher = request.getRequestDispatcher("WEB-INF/jsp/home.jsp");

dispatcher.forward(request, response);

 

위의 코드를 스프링에서는 Model을 이용해서 다음과 같이 처리하게 됩니다.

 

public String home(Model model){

	model.addAttribute("servletTime", new java.util.Date());
    
    return "home";
    
   }

 

  메서드의 파라미터를 Model 타입으로 선언하게 되면 자동으로 스프링 MVC에서 Model 타입의 객체를 만들어 주기 때문에 개발자의 입장에서는 필요한 데이터를 담아주는 작업만으로 모든 작업이 완료 됩니다. Model을 사용해야 하는 경우는 주로 Controller에 전달된 데이터를 이용해서 추가적인 데이터를 가져와야 하는 상황입니다.

 

  예를 들어, ,다음과 같은 경우들을 생각해 볼 수 있습니다.

- 리스트 페이지 번호를 파라미터로 전달받고, 실제 데이터를 View로 전달해야 하는 경우

- 파라미터들에 대한 처리 후 결과를 전달해야 하는 경우.

 

 

출처는 구멍가게 코딩단의 코드로 배우는 스프링 웹 프로젝트입니다.

반응형

'2020 > 주저리 주저리 타이핑.. 낙서장.' 카테고리의 다른 글

RedirectAttributes  (0) 2020.05.06
@ModelAttribute 어노테이션  (0) 2020.05.06
@DateTimeFormat  (0) 2020.05.06
@InitBinder  (0) 2020.04.29
낚서장.. 타이핑 연습?  (0) 2020.04.24
블로그 이미지

꽃꽂이하는개발자

,
반응형

@InitBinder를 이용해서 날짜를 변환할 수도 있지만, 파라미터로 사용되는 인스턴스 변수에 @DataTimeFormat을 적용해도 변환이 가능하다.(@DateTimeFormat을 이용하는 경우에는 @InitBinder는 필요하지 않습니다.)

 

package org.zerock.domain;

import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;

import lombok.Data;

@Data
public class TodoDTO {

	private String title;
	
	@DateTimeFormat(pattern = "yyyy/MM/dd")
	private Date dueDate;
}

 

 

문자열로 'yyyy/MM/dd' 의 형식이 맞다면 자동으로 날짜 타입으로 변환됩니다.

 

주소창에 입력을 해 봅시다

http://localhost:8080/sample/ex03?title=test&dueDate=2018-01-01

불러오는 중입니다...

 

그러면 

아래와 같이 변환됩니다.

반응형

'2020 > 주저리 주저리 타이핑.. 낙서장.' 카테고리의 다른 글

@ModelAttribute 어노테이션  (0) 2020.05.06
Model이라는 데이터 전달자  (0) 2020.05.06
@InitBinder  (0) 2020.04.29
낚서장.. 타이핑 연습?  (0) 2020.04.24
스프링 MVC의 Controller  (0) 2020.04.24
블로그 이미지

꽃꽂이하는개발자

,
반응형

  파라미터의 수집을 다른 용어로는 binding(바인딩)이라고 합니다. 변환이 가능한 데이터는 자동으로 변환되지만 경우에 따라서는 파라미터를 변환해서 처리해야 하는 경우도 존재합니다. 예를 들어, 화면에서 '2018-01-01'과 같이 문자열로 전달된 데이터를 java.util.Date 타입으로 변환하는 작업이 그러합니다. 스프링 Controller에서는 파라미터를 바인딩할 때 자동으로 호출되는 @InitBinder를 이용해서 이러한 변환을 처리할 수 있습니다.

 

package org.zerock.domain;

import java.util.Date;

import lombok.Data;

@Data
public class TodoDTO {

	private String title;
	private Date dueDate;
}

TodoDTO

 

package org.zerock.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.zerock.domain.SampleDTO;
import org.zerock.domain.SampleDTOList;
import org.zerock.domain.TodoDTO;

import lombok.extern.log4j.Log4j;



@Controller
@RequestMapping("/sample/*")
@Log4j
public class SampleController {
	
	@InitBinder
	public void initBinder(WebDataBinder binder) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(dateFormat, false));
	}
	

	
	@GetMapping("/ex03")
	public String ex03(TodoDTO todo) {
		log.info("todo:" + todo);
		
		return "ex03";
	}
}

SampleController

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

@RequestMapping의 변화

 

  @Controller 어노테이션은 추가적인 속성을 지정할 수 없지만, @RequestMapping의 경우 몇가지 속성을 추가할 수 있다.

이중에서도 가장 많이 사용하는 속성이 method 속성이다. Method 속성은 흔히 GET 방식, POST방식을 구분해서 사용할 때 이용한다.

 

스프링 4.3 버전부터는 이러한 @RequestMapping을 줄여서 사용할 수 있는 @GetMapping, @PostMapping이 등장하는데 축약형의 표현이므로, 아래와 같이 비교해서 학습하는 것이 좋다.

 

package org.zerock.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import lombok.extern.log4j.Log4j;



@Controller
@RequestMapping("/sample/*")
@Log4j
public class SampleController {
	
	@RequestMapping("")
	public void basic() {
		log.info("basic.....");
	}
	
	@RequestMapping(value="/basic", method = {RequestMethod.GET, RequestMethod.POST})
	public void basicGet() {
		log.info("basic get..........");
	}
	
	@GetMapping("/basicOnlyGet")
	public void basicGet2() {
		log.info("basic get only get..........");
	}
}

@RequestMapping은 GET, POST방식 모두를 지원해야 하는 경우에 배열로 처리해서 지정할 수 있다. 일반적이 경우에는 GET, POST방식만을 사용하지만 최근에는 PUT, DELETE방식등도 점점 많이 사용하고 있다. @GetMapping의 경우 오직 GET 방식에만 사용할 수 있으므로, 간편하기는 하지만 기능에 대한 제한은 많은 편이다.

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

  스프링 MVC를 이용하는 경우 작성되는 Controller는 다음과 같은 특징이 있습니다.

1. HttpServletRequest, HttpServletResponse를 거의 사용할 필요없이 필요한 기능 구현

2. 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용가능

3. GET방식, POST방식 등 전송 방식에 대한 처리를 어노테이션으로 처리가능

4. 상속/인터페이스 방식 대신에 어노테이션만으로도 필요한 설정 가능

 

다른 프레임 워크들과 달리 스프링 MVC는 어노테이션을 중심으로 구성되기 때문에 예제들을 작성할 때에도 각 어노테이션의 의미에 대해서 주의해가며 학습해야 한다.

...중략

반응형
블로그 이미지

꽃꽂이하는개발자

,