Tiny Bunny [Spring] ViewResolver - 솜님의 블로그
솜님의 블로그
카테고리
작성일
2024. 10. 7. 23:39
작성자
겨울솜사탕

ViewResolver

 

 

package com.koreait.app.view.controller;

public class ViewResolver {

	// 접두어, 접미어 / 단어의 앞과 뒤를 꾸며주는 말이다
	private String prefix;
	private String suffix;
	
	
	
	public String getPrefix() {
		return prefix;
	}
	public void setPrefix(String prefix) {
		this.prefix = prefix;
	}
	public String getSuffix() {
		return suffix;
	}
	public void setSuffix(String suffix) {
		this.suffix = suffix;
	}
	
	// 어디로 갈지 관여하는 메서드
	public String getView(String path) {
		return prefix + path + suffix;
	}
	
}

ViewResolver는 어디로 가는지 (포워드 / 리다이렉트) 관여하는 파일이다.

여기에는 멤버변수가 2개 있는데,

prefix와 suffix 2개가 있다. 

이 두 가지는 Setter로 의존 주입을 한다.

 

그리고 어디로 갈지 관여하는 메서드를 생성해,

인자로 path 값을 받으면

return으로 prefix + path + suffix를 해준다.

접두사(./) + path + 접미어(.jsp)

🍀현재 상황
- DispatcherServlet는 init이라는 생성 함수를 통해 의존주입한다.
     - DS의 의존 대상은 HandlerMapping과 ViewResolver 2가지.
- HandlerMapping은 생성자를 통해 의존주입한다.
     - 핸들러맵핑의 의존 대상은 Map 1가지.
- ViewResolver는 Setter를 통해 의존주입한다.
     - ViewResolver는 prefix와 suffix 멤버변수 2가지.

 

 

package com.koreait.app.view.controller;

import java.io.IOException;

import org.springframework.web.servlet.mvc.Controller;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("*.do")
public class DispatcherServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private HandlerMapping handlerMapping;
	private ViewResolver viewResolver; // 리다이렉트인지 포워드인지 스스로 판단해서 전달해주는 객체
     
   
    public DispatcherServlet() {
        super();
    }
    
    public void init() {
    	this.handlerMapping = new HandlerMapping();
    	this.viewResolver = new ViewResolver();
    	this.viewResolver.setPrefix("./");
    	this.viewResolver.setSuffix(".jsp");
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doACtion(request, response);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doACtion(request, response);
	}
	
	private void doACtion(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 사용자(클라이언트,브라우저)의 요청을 추출
		String uri=request.getRequestURI();
		// 요청을 잘라주는 코드, 어디까지 자를거니? >> 마지막 / 까지
		String command=uri.substring(uri.lastIndexOf("/"));
		
		
		// 2. 요청에 해당하는 Controller 기능을 수행
		Controller controller=this.handlerMapping.getController(command);
		// 이때 핸들러 맵핑은 팩토리 패턴을 활용하는 hanlerMapping
		
		String path = controller.execute(request,response);
		
		
		// 3. 응답 (페이지 이동)
		// viewResolver 를 통해 나중에 수행할 것임..!!!

	}
}

 

내 다음 응답이 View로 간다면 ViewResolver 해주고,

그게 아니라면 C로 응답해주면 된다.