ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SPRING] 03SEP21_2 / @annotation
    SPRING 2021. 9. 3. 19:57

     

    03SEP21 과정을 어노테이션으로 구현해보자.

    빈태그 대신에 클래스에서 스프링으로 등록할 수 있다.

     

    스프링 MVC에서 어노테이션을 사용하려면, 각 객체가 스프링 컨테이너에 <beans> 형태로 존재해야한다.

    기존에 만들었던 HandlerMapping, Controller, ViewResolver 모두 삭제하고 <context:component-scan> 을 추가한다.

     

    presentation-layer.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    
    	<context:component-scan base-package="com.springbook.view"></context:component-scan>
    </beans>

     

     

     

    @Controller

    그리고 기존에는 스프링 컨테이너가 Controller 클래스를 생성하게 하려면 Controller 클래스들을 스프링 설정 파일에 빈으로 등록해야했다.

    그러나 어노테이션을 사용하면 모두 Bean 으로 등록할 필요 없이 클래스 선언부 위에 @Controller를 붙이면 된다.

    →Controller는 내부적으로 @Component 를 상속하고 있기 때문에 Bean으로 등록되며, 추가적으로 DispatcherServlet이 인식할 수 있는 객체로 만들어준다. (만약 Controller를 붙이지 않는다면, SpringMVC에서 제공하는 Controller 인터페이스를 재구현해야한다.)

     

    @RequestMapping 

    기존 HandlerMapping 과 같은 역할이다. HTTP request 로 들어오는 url을 특정 controller 클래스나 메소드로 연결시키는 역할을 한다. 

    InsertBoardController 클래스에서 @RequestMapping(value="/insertBoard.do")  를 설정해두었는데, '/insertBoard.do' 가 포함되는 모든 URL을 관리하게 된다. 

    package com.springbook.view.board;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.springbook.biz.board.BoardVO;
    import com.springbook.biz.board.impl.BoardDAO;
    
    @Controller
    public class InsertBoardController{
    
    	@RequestMapping(value="/insertBoard.do")
    	public String insertBoard(HttpServletRequest request){
    		
    		System.out.println("run InsertBoardControoler");
    		
    		String title = request.getParameter("title");
    		String writer = request.getParameter("writer");
    		String content = request.getParameter("content");
    		
    		BoardVO vo = new BoardVO();
    		vo.setTitle(title);
    		vo.setWriter(writer);
    		vo.setContent(content);
    		
    		BoardDAO boardDAO = new BoardDAO();
    		boardDAO.insertBoard(vo);
            
            return "redirect:getBoardList.do";
    	}
    
    }

     

     

    command객체

    HttpServletRequest를 통해 들어온 요청 파라미터들을 setter 메서들르 이용하여 객체에 정의되어있는 속성에 바인딩이 되는 객체를 의미한다. 보통 VO를 의미하며, HttpServletRequest로 받아오는 요청 파라미터의 key 값과 동일한 이름의 속성들과 setter 메서드를 가지고 있어야한다. 

    어떻게 자동으로 바인딩을 시켜주냐면, 스프링이 내부적으로 HttpServletRequest와 command 객체의 setter 메서드를 이용하여 알아서 바인딩 시켜준다. 

     

    package com.springbook.view.board;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.springbook.biz.board.BoardVO;
    import com.springbook.biz.board.impl.BoardDAO;
    
    @Controller
    public class InsertBoardController{
    
    	@RequestMapping(value="/insertBoard.do")
    	public String insertBoard(BoardVO vo, BoardDAO boardDAO){
    		
    		System.out.println("run InsertBoardControoler");
    		
    		boardDAO.insertBoard(vo);
            
            return "redirect:getBoardList.do";
    	}
    
    }

     

     

    @Controller와 @RequestMapping과 command 객체를 이용하여 기존 코드를 수정하면 된다.

     

    package com.springbook.view.board;
    
    import java.util.List;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    import com.springbook.biz.board.BoardVO;
    import com.springbook.biz.board.impl.BoardDAO;
    
    @Controller
    public class GetBoardListController {
    
    	@RequestMapping("/getBoardList.do")
    	public ModelAndView getBoardList(BoardVO vo,BoardDAO boardDAO,ModelAndView mav){
    		System.out.println("run getBoardListController");
    		
    		List<BoardVO> boardList = boardDAO.getList(vo);
    		
    		mav.addObject("boardList",boardList);
    		mav.setViewName("getBoardList.jsp");
    		
    		return mav;
    	}
    }
    package com.springbook.view.board;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.springbook.biz.board.BoardVO;
    import com.springbook.biz.board.impl.BoardDAO;
    
    @Controller
    public class GetBoardController{
    
    	@RequestMapping("/getBoard.do")
    	public ModelAndView getBoard(BoardVO vo, BoardDAO dao,ModelAndView mav) {
    		System.out.println("run GetBoardController");
    		
    		BoardVO board = dao.get(vo);
    		
    		mav.addObject("board",board);
    		mav.setViewName("getBoard.jsp");
    		
    		return mav;
    	}
    }
    package com.springbook.view.board;
    
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.springbook.biz.board.BoardVO;
    import com.springbook.biz.board.impl.BoardDAO;
    
    @Controller
    public class InsertBoardController{
    
    	@RequestMapping(value="/insertBoard.do")
    	public String insertBoard(BoardVO vo, BoardDAO boardDAO){		
    		System.out.println("run InsertBoardController");
    		
    		boardDAO.insertBoard(vo);		
            
    		return "redirect:getBoardList.do";		
    	}
    }
    package com.springbook.view.board;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.springbook.biz.board.BoardVO;
    import com.springbook.biz.board.impl.BoardDAO;
    
    @Controller
    public class UpdateBoardController {
    
    	@RequestMapping("/updateBoard.do")
    	public String updateBoard(BoardVO vo,BoardDAO boardDAO){ 
    		System.out.println("updateBoardController 실행");
            
    		boardDAO.update(vo);
    		
    		return"getBoardList.do";
    	}
    }
    package com.springbook.view.board;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.springbook.biz.board.BoardVO;
    import com.springbook.biz.board.impl.BoardDAO;
    
    @Controller
    public class DeleteBoardController {
    
    	@RequestMapping("/deleteBoard.do")
    	public String deleteBoard(BoardVO vo , BoardDAO dao){
    		System.out.println("run DeleteBoardController");
    		
    		dao.delete(vo);
            
    		return "redirect:getBoardList.do";
    	}
    }

     

    728x90
Designed by Tistory.