SPRING

[SPRING] 03SEP21_View Resolver

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