ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SPRING] 03SEP21_View Resolver
    SPRING 2021. 9. 3. 19:57

     

     

    View Resolver 활용하기

     

    02SEP21 까지 스프링 설정파일인 presentation-layer.xml에 HandlerMapping에 HandlerMapping, Conroller 클래스들을 Bean으로 등록하여 Spring 컨테이너가 객체를 생성하도록 했따.

    이제 View Resolver를 적용할 것이다.

    View Resolver를 이용하면 클라이언트로부터 직접적인 jsp와 같은 View 호출을 차단할 수 있다.

    여러가지 기능이 있지만 JSP를 View로 사용하는 경우 InternalResourceViewResolver를 사용한다.

     

     

    presentation-layer.xml

    <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>

    vuewResikver 를 등록하면 WEB-INF 폴더는 절대 브라우저에서 접근할 수 없다. 하지만 InternalResourceViewResolver 를 위와같이 설정하면 JSP파일을 View 화면으로 사용할 수 있다. (단 컨트롤러의 Redirect 요청이 있을 때만 가능하다.)

     

     

    따라서 컨트롤러도 수정한다.

     

     

     

    LoginController.java

    package com.springbook.view.user;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    import com.springbook.biz.user.UserVO;
    import com.springbook.biz.user.impl.UserDAO;
    
    public class LoginController implements Controller{
    
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		System.out.println("run LoginController");
    		
    		String id = request.getParameter("id");
    		String password = request.getParameter("password");
    		
    		UserVO vo = new UserVO();
    		vo.setId(id);
    		vo.setPassword(password);
    		UserDAO userDAO = new UserDAO();
    		UserVO user = userDAO.getUser(vo);
    		
    		ModelAndView mav = new ModelAndView();
    		if(user != null) {
    			mav.setViewName("redirect:getBoardList.do");
    		}else {
    			mav.setViewName("redirect:login.jsp");
    		}
    		
    		return mav;
    	}
    
    }

     

    viewName에 각 redirec:를 붙여준다.

     

    이렇게 하면 외부롱부터 직접적인 뷰 호출은 막고, 오직 컨트롤러의 요청에 의해서 뷰 호출을 할 수 있다.

     

    public class DeleteBoardController implements Controller {
    	...
        ModelAndView mav = new ModelAndView();
    	mav.setViewName("redirect:getBoardList.do");
    		
    	return mav;
    }
    public class GetBoardController implements Controller {
    
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		...
            ModelAndView mav = new ModelAndView();
    		
    		mav.addObject("board", board);
    		mav.setViewName("getBoard");
    		
    		return mav;
    	}
    }
    728x90
Designed by Tistory.