티스토리 뷰

spring

day3 class6~7 Spring MVC 적용

일상다반ㅅㅏ 2019. 1. 29. 22:38

Spring MVC 적용을 위해 앞서 개발했던 view.controller 패키지를 삭제한다.


1. HandlerMapping 등록

- 각각의 컨트롤러 파일들을 매핑시켜준다.

- SimpleUrlHandlerMapping객체는 Setter 인젝션을 통해 Properties 타입의 컬렉션 객체를 의존성 주입하고 있다.

- 그리고 의존성 주입된 Porperties 컬렉션에는 "*.do"경로 요청에 대한 아이디가 매핑되어 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!-- presentation-layer.xml -->
 
<!-- HandlerMapping 등록 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/login.do">login</prop>
            <prop key="/getBoardList.do">getBoardList</prop>
            <prop key="/getBoard.do">getBoard</prop>
            <prop key="/insertBoard.do">insertBoard</prop>
            <prop key="/updateBoard.do">updateBoard</prop>
            <prop key="/deleteBoard.do">deleteBoard</prop>
            <prop key="/logout.do">logout</prop>
        </props>
    </property>
</bean>
 
<!-- Controller 등록 -->
<bean id="login" class="com.springbook.view.user.LoginController"></bean>
<bean id="getBoardList" class="com.springbook.view.board.GetBoardListController"></bean>
<bean id="getBoard" class="com.springbook.view.board.GetBoardController"></bean>
<bean id="insertBoard" class="com.springbook.view.board.InsertBoardController"></bean>
<bean id="updateBoard" class="com.springbook.view.board.UpdateBoardController"></bean>
<bean id="deleteBoard" class="com.springbook.view.board.DeleteBoardController"></bean>
<bean id="logout" class="com.springbook.view.user.LogoutController"></bean>
cs


2. controller 구현

- 스프링에서 제공하는 controller로 변경하고, 리턴타입을 ModelAndView로 변경한다.

- DispatcherServlet은 Controller가 리턴한 ModelAndView 객체에서 Model 정보를 추출한 다음 HttpServletRequest 객체에 검색 결과에 해당하는 Model 정보를 저장하여 jsp로 포워딩한다. 따라서 jsp파일에서는 검색 결과를 세션이 아닌 HttpServletRequest로부터 꺼내 쓸 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class LoginController implements Controller {
 
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("로그인 처리");
        
        // 1. 사용자 입력 정보 추출
        String id = request.getParameter("id");
        String password = request.getParameter("password");
        
        // 2. DB 연동 처리
        UserVO vo = new UserVO();
        vo.setId(id);
        vo.setPassword(password);
        
        UserDAO userDAO = new UserDAO();
        UserVO user = userDAO.getUser(vo);
        
        // 3. 화면 네비게이션
        ModelAndView mav = new ModelAndView();
        if(user != null) {
            mav.setViewName("redirect:getBoardList.do");
        } else {
            mav.setViewName("redirect:login.jsp");
        }
        return mav;
    }
}
 
 
public class GetBoardListController implements Controller {
 
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("글 목록 검색 처리");
        
        // 1. 사용자 입력 정보 추출(검색 기능은 추후 구현)
        // 2. DB 연동 처리
        BoardVO vo = new BoardVO();
        BoardDAO boardDAO = new BoardDAO();
        List<BoardVO> boardList = boardDAO.getBoardList(vo);
        
        // 3. 응답 화면 구성
        ModelAndView mav = new ModelAndView();
        mav.addObject("boardList", boardList);    // Model 정보 저장
        mav.setViewName("getBoardList");    // View 정보 저장
        return mav;
    }
}
cs



3. ViewResolver 활용하기

- http://localhost:8080/BoardWeb/getBoardList.jsp 와 같은 클라이언트로부터의 직접적인 JSP 호출을 차단 할 수 있어 대부분 웹 프로젝트에서 사용한다.

- /WEB-INF/board 폴더를 생성하고 getBoardList.jsp와 getBoard.jsp 파일을 이동시킨다.

> 위의 경로로 이동시키면 브라우저에서 접근을 할 수 없다. 


3-1. ViewResolver 설정

- 아래와 같이 설정 시 jsp파일을 view 화면으로 사용할 수 있다. 

mav.setViewName("getBoardList"); 접두사와 접미사를 설정해준다.

mav.setViewName("redirect:login.jsp"); 와 같이 redirect를 입력하면 이를 무시하고 리다이렉트한다.

1
2
3
4
5
6
7
<!-- presentation-layer.xml -->
 
<!-- ViewResolver 등록 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/board/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>
cs