BACK-END/SPRING

[SPRING] dispatcherServlet, ViewResolver, Controller

썬키 2023. 2. 21. 21:23
 

[SPRING] 스프링 설치 및 프로젝트 설정

이번 포스트에서는 스프링을 설치하고, 프로젝트 생성 및 초기 설정에 대해 다뤄보려고 한다. 스프링 설치 우선, 스프링은 아래의 링크에서 다운받을 수 있다. Spring | Home Cloud Your code, any cloud—we

itsmesunky.tistory.com

 

이전 포스트에서 스프링을 설치하고, 기본적인 프로젝트 초기 설정을 마쳤다.

오늘은 초기 설정을 이용하여, 웹 브라우저에서 URL 요청이 들어오면

어떤 흐름으로 브라우저에 데이터를 전송할 수 있는지에 대해 포스팅 하려고 한다.

 

 

web.xml

 

 

웹 브라우저에서 사용자의 URL 요청이 들어오면

스프링 프로젝트에서는 제일 먼저 web.xml 파일을 찾는다.

 

web.xml에 매핑 되어 있는 servlet, filter 등의 프로젝트 초기 설정을 먼저 읽어 들인 뒤

다음 작업을 실행하는데 오늘은 dispatcherServlet 이라는 servlet만 위와 같이 추가해보려고 한다.

( * dispatcherServlet : URL 요청이 들어오면 제일 먼저 그에 맞는 컨트롤러로 위임해주는 Front Controller)

 

servlet-context.xml

 

 

servlet-context.xml에서 주목할 점은 viewResolver라는 클래스이다.

dispatcherServlet은 웹 브라우저에서 URL 요청이 들어오면

그 URL과 매핑되는 컨트롤러가 있는지 확인한 뒤

매핑되는 컨트롤러가 있다면 해당 메소드를 실행하고

해당 메소드의 return 값을 viewResolver에게 전달하는데

이해가 잘 되지 않는다면 아래의 이미지를 참고하면 된다.

 

 

그림과 같이 웹 브라우저에서 /hello 라는 URL 요청이 들어오면

dispatcherServlet이 해당 URL과 매핑 되는 Controller가 있는지 찾는다.

 

helloController에서 매핑 되는 메소드를 찾고, 메소드를 실행 후 return 값을 viewResolver에게 넘기면

viewResolver는 결과 값을 브라우저에 출력하게 된다.

 

그래도 잘 이해가 되지 않는다면 코드와 함께 살펴보자.

 

helloController

 

@Controller
public class HelloController {
	
	@RequestMapping("/hello")
	public String hello() {
		System.out.println("HelloController hello()");
		
		return "hello";	// hello.jsp로 이동
	}
}

 

@RequestMapping("/hello") 는 URL이 /hello로 들어오면 아래의 메소드를 실행해라와 같다.

그리고 return hello라고 입력하면 viewResolver에 의해서 hello.jsp를 웹 브라우저에 출력할 수 있다.

hello.jspservlet-context.xml에 작성한 것처럼 /WEB-INF/views 디렉토리 안에 존재해야 한다.

 

index.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="hello">hello로 이동</a>
</body>
</html>

 

welcome-page와 같은 index.jsp를 webapp 디렉토리 안에 생성하고,

 <a> 클릭 시, hello로 이동하게 작성하였다.

 

hello.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello.jsp</h1>
</body>
</html>

 

 <a>를 클릭 시, Controller를 통해 viewResolverhello.jsp를 찾아서 실행한 모습이다.

이와 같은 형상을 정적 컨텐츠라고 하는데 우리의 주 목적은 데이터를 주고 받는 것이므로

다음 포스트에서는 그와 관련된 내용을 다뤄보려고 한다.