본문 바로가기

프레임워크/Spring

[프레임워크] <Spring>〈Maven〉Command객체를 활용한 Controller

Command 객체

사용자의 입력을 나타내는 객체이다.

사용자가 웹 페이지에서 양식을 작성하고 제출할 때, 이 양식에 입력된 데이터를 수집하고 처리하기 위해 사용된다.


@Controller에서의 활용

인터페이스가 아니므로 메서드 시그니쳐 강제성이 사라진다.

이전에는 req, res를 인자로 가지므로 완전한 POJO는 아니었다.

바로 DTO로 받아올 수 있다.

   ⇨ Spring 컨테이너

     DTO(Command 객체)를 new
    ➔ req에 저장된 정보중에 DTO 멤버변수와 같은 파라미터명이 있다면 해당 값 추출 가능하다.
    ➔ 추출한 값을 DTO 멤버변수에 set 가능 : setter 활용
   DAO,MAV Model,JSP 내장객체(Session)도 Command 객체가 될 수 있다.

 

import java.util.ArrayList;

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

import com.spring.biz.member.MemberDAO;
import com.spring.biz.member.MemberDTO;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@Controller("main") // "implements Controller"를 포함하는 @
public class MainController {

	@RequestMapping(value="/main.do", method=RequestMethod.GET)
	public String main(HttpServletRequest request, HttpServletResponse response) throws Exception {

		ModelAndView mav=new ModelAndView();
		
		MemberDAO mDAO=new MemberDAO();
		MemberDTO mDTO=new MemberDTO();
		ArrayList<MemberDTO> mdatas=mDAO.selectAll(mDTO);
		mav.addObject("mdatas", mdatas); // == request.setAttribute("mdatas", mdatas);
		
		return "main";
		
	}

}

 

결합도를 낮추기위해 의존관계를 활용  의존주입(DI)

 

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

import com.spring.biz.board.BoardDTO;
import com.spring.biz.board.BoardService;

@Controller("main")
public class MainController {
	
	private BoardService boardService;

	@RequestMapping(value="/main.do", method=RequestMethod.GET)
	public String main(BoardDTO bDTO, Model model) {
		model.addAttribute("datas", boardService.selectAll(bDTO));
		return "main";
	}

}