Java/Spring

[Spring] 14. Spring Legacy Project 만들기

담크 2021. 7. 31. 23:59

이번에는 Spring Legacy Project로 프로젝트를 만들고 실행해보도록 하겠습니다.

먼저 Project Explorer에 new - other - spring을 검색하면

Spring Legacy Project를 선택해줍니다.

 

그다음 프로젝트명을 임의로 정해서 적어주고(저는 SpringMVC01로 했습니다.) Templates에 Spring MVC Project를 누르고 Next를 눌러줍니다.

그럼 보기와 같은 창이 나오는데 top-level 패키지를 지정해달라고 합니다. 우선 com.mvc.hello로 만들어줍니다.

이 부분은 패키지가 

이렇게 자동으로 설정되게 도와줍니다.

여기서는 다른 설정 없이 바로 실행해보면

이렇게 왜인지 모르겠지만 한글이 깨져서 나옵니다.

하지만 코드를 조금만 손보면 한글이 깨지지 않은 상태로 잘 나오게 됩니다.

이걸 어떻게 해야 한글이 안 깨져서 잘 나오게 될까요??

방법은 간단하게 3가지가 있습니다.

1. 화면이 출력되는 /WEB-INF/views/home.jsp에 코드를 두줄 추가해주면 됩니다.

2. 아까 만들어졌던 com.mvc.hello 패키지의 HomeContoller.java에 역시 코드를 두줄 추가해주면 됩니다.

3. web.xml에 filter태그를 추가해줍니다. (이게 보통 많이 사용된다고 합니다.)

위의 3개의 방법 중 하나만 해도 한글이 깨지지 않고 정상적으로 잘 출력이 됩니다.

 

 

이제 Spring Legacy Project에 대해 간단히 설명해보도록 하겠습니다.

Spring Legacy Project는 템플릿으로 만들어놓은 것을 가져다가 사용하는 게 용이하게 되어있지만 Spring 버전 3.9까지 사용이 가능합니다. 4.0 이상부터는 Spring Boot를 사용하여 legacy를 사용할 수 없습니다.

 

프로젝트 생성 후 한번 구조를 보면 여러 가지가 만들어져 있는데요 여기서 눈여겨볼 것은

pom.xml, web.xml, root-context, servlet-context.xml, HomeController, home.jsp 입니다.

그중 몇 가지만 설명해보자면

pom.xml

여기의 dependency들은 템플릿이 자동으로 만들어준 것이니 그냥 읽어만 보세요

 

web.xml

여기는 뭔가 못 보던 게 생겼죠?

ContextLoaderListener는 어떤 xml을 실행해야 하는지를 파악해서 열어줍니다. 이때 db관련은 context-param으로 일반적인 요청은 servlet으로 넘어갑니다.

그 아래 Dispatcher servlet은 그걸 받아서 Handlermapping을 통해 @controller를 호출합니다.

 

HomeController

앞에 요청에 맞게 넘어오면 이쪽으로 넘어옵니다. 이후 -> service -> Repository -> DB -> Repository -> Service -> Controller로 다시 값을 가져오면 model에다가 담아서 string("뷰",  이름)을 리턴하는데 이 부분이 MAV(Model And View)객체에 담아서 넘어가게 됩니다.

model에 값을 담아서 return하는 부분을 MAV에 담아서 넘겨줍니다.

servlet-context

이걸 servlet-context의 viewResolver라는 애가 MAV를 받아온 것을 가지고 jsp를 만들어서 응답시킬 건데, 위의 return값인 "home" + 뷰를 받아서 앞에 prefix, 뒤에 surfix를 붙여줘서 경로를 완성시킵니다.

따라서 여기서의 경로는 "/WEB-INF/views/home.jsp"가 되겠죠

이제 이 경로의 jsp를 찾아서 model에 담겨있는 값을 넘겨주고 그렇게 만들어진 데이터를 응답시켜줌으로써 화면에 출력되게 됩니다.