본문 바로가기
programming/MakinGProJect

게시판 만들기 9 자바 스프링프레임워크 컨트롤러와 서비스 연결하기

by 개코 - 개발과 코딩 2021. 10. 23.

자바 스프링프레임워크의 컨트롤러와 서비스를 연결하여 데이터의 흐름을 파악해 본다. 스프링프레임워크에서 어노테이션은 컨테이너와 연관이 있다. 어노테이션이 등록된 컨트롤러와 서비스를 연결하여 데이터의 흐름을 볼 것이다.

게시판 만들기 9
자바 스프링프레임워크 컨트롤러와 서비스 연결하기

게시판 만들기를 하는데 스프링프레임워크의 설명이 되고 있다.

설명의 필요가 있을 수도 없을 수도 있지만 잠깐 언급하고 간다.

이것을 알아야 스프링프레임워크로 게시판 만들기 할 때 데이터의 흐름을 파악할 수 있을 것 같아서 이다.

물론, 깊게 알 필요는 없지만, 이건 이렇다 정도만 알면 된다.

컨트롤러 객체와 서비스 객체

자바 스프링프레임워크에서 컨트롤러의 역할은 웹페이지에 주소를 입력했을 때 최초 진입점이 된다.

컨트롤러에서 요청을 위해 서비스 객체를 호출한다.

서비스 객체는 컨트롤러에서 받는 요청을 처리하고 결과를 컨트롤러에 보내준다.

컨트롤러 객체와 서비스 객체의 관계는 이것이 요점이다.

컨트롤러 객체에 서비스 객체를 생성하여 사용하면 되며 이 때 autowired 를 사용한다.

당연하겠지만 컨트롤러 클래스에 new 서비스 형태로 객체를 형성하고 컨트롤러 클래스에서는 서비스의 메서드를 사용하면 된다.

코드를 직접 보면 알 수 있다.

템플릿은 이전에 작성한 포스팅을 참고한다.

연결하기

직접 코드를 연결해 보자.

모델은 따로 설명하지 않고 넘어간다.

단지 데이터를 담는 그릇이기 때문이다.

대신 모델에 데이터를 담고 각 클래스에 값이 넘어갈 때마다 어떻게 되는지 확인할 필요가 있다.

모델을 보자.

모델의 값은 하나만 있고, get set 두 종류 밖에 없다.

각 객체를 돌아다닐 때마다 여기에 값이 변경될 것이다.

package com.crd.test.Template;

public class Template0Model {

	private Object dataObject; 
	
	public Template0Model() {}
	
	public Template0Model(String dataObject) {
		this.setDataObject(dataObject);
	}

	public Object getDataObject() {
		return dataObject;
	}

	public void setDataObject(Object dataObject) {
		this.dataObject = dataObject;
	}
}

컨트롤러 클래스 객체

컨트롤러 코드가 조금 복잡할 수 있지만 중요한 것은 몇 가지 없다.

@Controller 을 사용하여 스프링프레임워크에게 컨트롤러 객체임을 알려준다.

@Autowired 를 사용하여 컨트롤러 객체에 서비스 객체를 연결되도록 한다.

서비스 객체를 호출하여 값을 변경한다.

package com.crd.test.Template;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
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.
 */
@Controller
public class Template1Controller {
	
	@Autowired
	private Template2Service gService;
	
	private static final Logger logger = LoggerFactory.getLogger(Template1Controller.class);
	
	/**
	 * url 최초진입
	 */
	@RequestMapping(value = "/template", method = RequestMethod.GET)
	public String BoardList(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);
		
		Template0Model vModel = new Template0Model();
				
		try {
			vModel = gService.RequestData(
						new Template0Model("")
					);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			vModel.setDataObject("에러발생");
		}
		
		model.addAttribute("serverTime", formattedDate + " STS 실행 테스트");
		model.addAttribute("serverResult", vModel.getDataObject());
		
		return "template/template";
	}
}

서비스 클래스 객체

@Service 를 사용하여 스프링프레임워크에 서비스 객체를 등록한다.

컨트롤러에서 메서드를 요청하면 인자값을 변경하고 결과값을 넘겨준다.

값을 넣는 그릇은 모델을 사용한다.

package com.crd.test.Template;

import org.springframework.stereotype.Service;

@Service
public class Template2Service implements Template2ServiceImpl {

	@Override
	public Template0Model RequestData(Template0Model model) throws Exception {
	
		model.setDataObject("서비스 요청 도착 및 결과 반환");
		
		return model;
	}

}

//-----------------------

package com.crd.test.Template;

public interface Template2ServiceImpl {
	
	public Template0Model RequestData(Template0Model model) throws Exception;

}

화면변경

위의 컨트롤러 클래스 객체를 보면 화면으로 넘겨주는 부분인 model.attribute() 에 결과값을 넣어준다.

jsp 파일에서 결과를 볼 수 있도록 서버값을 넣어준다.

${serverResult} 를 화면에 넣어주면 된다.

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

<!-- html5 기본템플릿 -->
<!DOCTYPE html>

    <!-- head -->
    <head>
    	
    	<!-- 한글 깨짐 방지 -->
		<meta charset="UTF-8">
        
        <!-- meta SEO 컨텐츠 -->
        <meta name="title" content="목록화면">
        <meta name="description" content="목록화면입니다.">
        <meta name="keywords" content="목록">
        <meta name="author" content="개코">
        <meta name="copyright" content="개코">
        <!-- // -->

        <!-- meta 반응형 웹표준 -->
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!-- // -->

        <!-- 스타일 -->
        <style></style>
        <!-- // -->

    </head>
    <!-- // -->

    <!-- body -->
    <body>
        <p>
        	${serverTime}
        </p>
        <p>
        	${serverResult}
        </p>
    </body>
    <!-- // -->

    <!-- 자바스크립트 -->
    <script type="text/javascript"></script>
    <!-- // -->

</html>

결과화면을 보면 다음과 같다.

URL 을 입력하면 스프링프레임워크는 컨트롤러 객체를 호출한다.

컨트롤러 객체는 서비스 객체를 호출하면 인자값인 데이터 모델값을 변경한다.

서비스 객체는 작업을 처리하고 컨트롤러에 변경값을 전달한다.

컨트롤러는 웹페이지를 열고 결과값을 보여준다.

아래는 이 일련의 과정을 보여준다.

서비스 객체에서 변경된 값이 잘 처리되었음을 보여주고 있다.  

반응형

댓글