본문 바로가기
코딩수업/AWS 클라우드환경 네이티브

11/7 웹 제작 - 롬북 / 모델 객체 / @RequestParam와 @ModelAttribute

by 인생즐겜러 2022. 11. 18.
728x90
반응형

AWS 클라우드환경 네이티브 수업 115 일차

 

 

 

진행

1. 롬복(lombok)

 

 

 

 

 

요약

1. 롬복(lombok) 다운

2. 롬복(lombok) 사용 예시

3. 모델 객체 (+ @RequestParam 와 @ModelAttribute)

 

 

 

 

 


 

 

 

 

 

롬복 (lombok)

 

Java 라이브러리로 gettersettertoString 등의 반복되는 메서드 작성 코드를

어노테이션 하나만을 쓰면 동작하게 만들어 확~ 줄여주는 라이브러리

 

 

https://projectlombok.org/

 

Project Lombok

 

projectlombok.org

 

위의 페이지에서 Download 클릭 후 다운.

그 후 , 아래 처럼 cmd 창에 롬복을 다운 후에 아래와 같이 친다.

 

 

 

 

 

위처럼 뭔 창이 뜨면 무시.

이후 Specify location 클릭 후 아래처럼 STS나 이클립스 등 원하는 IDE 클릭

 

 

 

 

 

그 후 인스톨

 

 

 

 

이 후 mvnrepository 접속

https://mvnrepository.com/

 

lombok 검색후 project lombok => 많이 쓰는 버전 들어간다.

 

그 후, 아래와 같은 maven 코드 복사해서

pom.xml에 코드 추가

=> lombok의 기능 활성화 완료.

 

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

 

 

 

 

 


 

 

 

 

 

롬복의 사용 예시

 

먼저 뷰를 만들자.

MEMBER_VO / map  중 선택되는 것에 따라 아이디/비번 결과가 나오게 만들 것이다.

 

<!-- 회원정보를 나타내는 뷰 (memberData.jsp) -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>memberData</title>
</head>
<body>
	<h1>회원 정보</h1>
	<h2>MemberVO</h2>
	유저의 아이디 : ${MEMBER_VO.userId}<br/>
	유저의 비밀번호 : ${MEMBER_VO.userPw}
	<hr/>
	<h2>Map</h2>
	유저의 아이디 : ${map.userid }<br/>
	유저의 비밀번호 : ${map.userpw }
</body>
</html>

 

 

 

URI에서 doD / doE 에 따라 MEMBER_VO / map 를 호출하게 컨트롤러를 만든다.

여기서 사용되는 모델 객체에 대한 설명은 아래에 첨부하겠다.

 

// 유저정보에 대한 컨트롤러

package com.edu.exam03.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.edu.exam03.vo.MemberVO;

//=============================================
// public class ExamController3
// Return Type이 String인 경우 - 데이터를 전달하는 경우
//=============================================
@Controller
@RequestMapping("/exam3")
public class ExamController3 {

	//=============================================
	//=============================================
	@RequestMapping("/doD")
	public String doD(Model model) {
		
		System.out.println("doD가 실행되었습니다.");
		
		MemberVO memberVO = new MemberVO();
		memberVO.setUserId("userID-001");
		memberVO.setUserPw("userPW-001");
		
		model.addAttribute("MEMBER_VO", memberVO);
		
		return "exam3/memberData";
		
	}	// End - public String doD(Model model)
	
	@RequestMapping("/doE")
	public String doE(Model model) {
		System.out.println("doE가 실행되었습니다.");
		
		Map<String, String> map = new HashMap<String, String>();
		map.put("userid", "mapId-002");
		map.put("userpw", "mapPW-002");
		
		model.addAttribute("map", map);
		
		return "/exam3/memberData";
	}
	
}	// End - public class ExamController3

 

 

 

VO 파일을 만들고 해당 파일에 import 및 어노테이션을 달면

자동으로 set / get / ToString 객체가 만들어진다.

 

어노테이션을 @Data로 달면 아래의 3개의 어노테이션을 단 것과 같은 기능을 한다.

 

package com.edu.exam03.vo;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

//=============================================
// 회원정보
//=============================================
@Setter
@Getter
@ToString
public class MemberVO {
	
	private String userId;
	private String userPw;
	
	
}	// End - public class MemberVO

 

<!-- servlet-context.xml에 코드추가 -->

<context:component-scan base-package="com.edu.exam03" />

 

 

 

 

같은 memberData.jsp 뷰(View)에서 URI에 따라 나오는 값은 달라진다.

 

 

 

 

 


 

 

 

 

 

모델 객체

 

JSP Servlet => 보통 request나 session 내장객체에 정보를 담아 뷰로 넘겨주는데

Spring =>  Model을 사용.

Controller로 지정된 메소드는 Model이라는 타입의 객체를 파라미터로 받을 수 있다.

 

request.setAttribute() 와 비슷한 역할을 한다.

addAttribute("key", "value") 메서드를 이용해 view에 전달할 데이터를 key, value형식으로 전달한다.

 

아래는 JSP Servlet과 Spring의 차이를 보여준다.

 

 

 

JSP Servlet

request.setAttribute("time", new java.util.Date());
RequestDispatcher dispatcher = request.getRequestDispatcher("url");
dispatcher.forward(request, response);

 


Spring

public String home(Model model) {
	model.addAttribute("time", new java.util.Date());
    	return "home";
}

 

 

 

 

 

 

사용 예시

 

package com.mystudy.coco.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
 
@Controller
public class TestController {
 
    @GetMapping("/test")
    public void testMethod(Model model) {
        String msg = "model test";
 
        model.addAttribute("value", msg);
    }
}
<h2> Test Method : ${value} </h2>

 

value 라는 key로 값을 부르게 되면 

model.addAttribute()의 2번째 항이 실행된다.

 

 

 

 

 


 

 

 

 

 

@RequestParam 와 @ModelAttribute

 

 

 

(1) @RequestParam 

 

클라이언트가 요청시 전달하는 값을 1:1로 맵핑하는 어노테이션

 

@Controller
public class TestController{
	@GetMapping("/")
	public String testPage(@RequestParam("name1") String name){
		System.out.print("연습 중");
		return "test";
	}

}

 

@RequestParam("name1") String name 을 설명하자면

name1은 해당 이름으로 객체가 만들어져서 jsp 단에서 해당 이름으로 사용할 수 있다.

name 이라는 변수 이름은 java 파일 에서 해당 변수 이름으로 사용이 가능하다. 

사용자가 /?name=test1 으로 요청한다면 name1이라는 매개변수에 test1이 들어간다.

 

 

 

 

 

(2) @ModelAttribute

 

클라이언트가 요청시 전달하는 값을 객체 뭉텅이로 매핑하는 어노테이션.

메소드 레벨과 메소드 파라미터 레벨 둘 다 사용이 가능하다.

나머지는 @RequestParam 와 같다.

그저 1:1 매핑이냐 객체로 매핑 해주냐의 차이이다.

결론은 이게 더 편하고 코딩 리스크도 적다는 말.

 

@Date
public class TestModel{
	private String name;
	private int age;   
}


@Controller
public class TestController{
	@GetMapping("/")
	public String testPage(@ModelAttribute("myModel") TestModel model){
		logger.info("####### model.getName() "+ model.getName());
		logger.info("####### model.getAge() "+ model.getAge());
        
		return "test";
	}

}

 

728x90
반응형

댓글