2021. 11. 27. 05:00ㆍSpring MVC
Gradle 로 Spring MVC 프로젝트 구현하기
* 2021-11-26
* build.gradle
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.6.0"
implementation 'org.springframework:spring-webmvc:5.2.18.RELEASE'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
ContextLoaderListener 에 대한 실험
Gradle 사용하여 Template 없이 Spring Legacy MVC 를 만들어 보았다.
Dependency 부터 하나씩 수동으로 지정해 가면서 프로젝트를 진행하는데 갑자기 궁금증이 발동한다.
그래서 몇가지 실험을 해 본다.
1. listener 만 설정할 경우
* servlet 은 설정하지 않았다
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
* listener 를 설정하면 반드시 applicationContext.xml 이 있어야 한다.
* 또는 root 수준에서 <context-param>을 다음과 같이 설정해야 한다
※ src/main/webapp/WEB-INF/root-context.xml 파일이 있어야 한다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/root-context.xml</param-value>
</context-param>
* listener 만 설정할 경우는 src/main/webapp/index.jsp 파일은 열수 있으나 Controller 핸들링은 할수 없다
* root-context.xml 에 <component-scan>을 설정하였으나 Controller 를 찾지 못한다
* 아무래도 <servlet-mapping> 이 없어서 인듯 하다
2. servlet 만 설정할 경우
* root context 설정은 제거한 상태
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
* 이때는 반드시 src/main/webapp/WEB-INF/dispatcher-servlet.xml 파일이 있어야 한다.
* 파일이름은 servlet-name 으로 설정한 이름-servlet.xml 으로 작성한다.
* dispatcher-servlet.xml 에 <component-scan>을 설정하였다.
3. filter 와 servlet 만 등록
* root context 설정을 모두 제거한 상태에서 CharacterEncodingFilter 만 설정하여 테스트를 진행해 보았다
<filter>
<filter-name>encKor</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encKor</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
* CharacterEncodingFilter 는 root context 가 없어도 작동이 된다
* POST 로 넘긴 한글데이터가 Controller 로 잘 전달된다
4. 실험결과
* 자료를 찾았으나 명확한 해답을 제시한 곳이 없다
* 잠정 결론은 listener 로 ContextLoaderListener 를 등록하는 경우는
최근 spring-security 와 같은 서버 프로젝트 전반에 걸쳐 작용하는 framework 등을 위해 필요하다
* 일부 filter, interceptor 와 같은 부분을 등록할때도 있어야 하는 것으로 볼수 있다
* ContextLoaderListener 의 필요성을 좀더 고민해 봐야 하겠다.
'Spring MVC' 카테고리의 다른 글
Spring Security 암호화된 properties 값 읽기 (0) | 2021.11.15 |
---|