context.xml 파일들로 다양한 설정(서블릿 같은 기능을 하는 문구)들을 관리하게 되는데
한 context 파일을 사용하게 되면 설정이 너무 길어지므로
분류를 두어 나누는 것을 추천한다.
이 xml 파일들을 여러개 만들어 관리를 하지만
이 파일들을 읽어오라고 따로 명시를 해주어야 한다.
이에 대한 설정은 web.xml 이라는 파일에서 진행한다.
다음 예시는 root context를 webapp 바깥의 resources로 옮기고
WEB-INF 폴더 아래의 spring 폴더를 config로 이름을 바꾸고
servlet-context파일을 config로 옮긴 뒤 이름을 action-servlet으로 바꾼다.
위의 수정 내역을 web.xml 파일에 등록
먼저 context-param의 내용을 바꾼다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:root-context.xml
</param-value>
</context-param>
다음으로는 Servlet 정보, servlet context 정보가 담겨있는
<servlet>태그, <servlet-mapping> 태그를 수정
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/action-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
이와 같이 servlet-class를 통해서 Dispatcher Servlet을 사용한다고 명시하고
param name과 value를 통해 경로를 입력한다
load-on-startup는 로딩 순서이므로 그냥 적으면 되고
servlet-mapping을 통해서 맵핑 주소를 설정한다.
실행 테스트를 할 때 localhost:포트/키워드를 주소창에 입력했을때
자동으로 맨 뒤에 슬래시가 붙는데 localhost:포트/키워드/
슬래시의 맵핑 주소가 설정 된 곳으로 연결되게 된다.
또 하나의 예제로 member를 통해 맵핑 설정을 이해해보자.
<servlet>
<servlet-name>member</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/member-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>member</servlet-name>
<url-pattern>*.me</url-pattern>
</servlet-mapping>
*.me를 통해서 url 이 .me로 끝나는 연결은
/WEB-INF/config/member-servlet.xml 경로의 설정을 읽어서 연결을 한다.
보너스로 이와 같은 방법으로 Dispatcher Servlet을 이용하여 Encoding 타입을 바꾸는 방법은 다음과 같다.
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Servlet에서는 필터 클래스를 생성하여 들어오는 모든 요청(/*)의 인코딩 타입을 UTF-8로 설정했지만
Spring에선 위와같이 명시하면 끝난다.
+ 추가 - context 파일에 들어가는 내용
Spring Framework는 객체를 생성 시 자동으로 new 객체()를 해주도록 설정 할 수 있다.
이 설정은 context.xml 파일들에서 설정하고
이러한 객체(예전에 VO 폴더에 만든 객체들)들을 bean 이라고 한다.
해당하는 서블릿으로 연결되면 bean들을 하나하나 생성 할 필요 없이 바로바로 사용 할 수 있게 설정하는 xml이다.
+ 추가 - context.xml 파일이 어떻게 맵핑 주소를 명시한 java 파일을 찾는가
context.xml의 내용을 보면
<context:component-scan base-package="패키지 명" />
context라는 태그가 존재하고 base-package라는 속성이 등록되어 있다.
base-package에 등록된 경로를 따라서 하위에 존재하는 java 파일들을 전부 스캔하여
@RequestMapping("맵핑 주소") 라는 어노테이션을 사용한 메소드들을 찾는다.
톰캣이 이를 가지고 있다가 맵핑 주소에 요청이 들어오면 해당하는 메소드에 연결해주는 방식이다.
bean 객체를 자동으로 잡아주는 방법도 있고 수동으로 등록을 해야 할 때가 있다.
자동으로 잡아주는 방식은 @Controller, @Service, @Repository와 같은 어노테이션으로 자동으로 잡히게 된다.
자세한 설명은 Autowired를 사용할때 게시합니다.
'Spring Framework, MyBatis > 01. 설치 및 설정' 카테고리의 다른 글
[Spring Framework]01-09.pom.xml, Maven을 이용한 라이브러리 관리 (0) | 2019.02.03 |
---|---|
[Spring Framework]01-07.형상관리(Git) 사용 시 업로드 폴더 예외처리 규칙 설정 (0) | 2019.01.31 |
[Spring Framework]01-06.Maven의 repository 경로(라이브러리 저장 경로) 관리 (0) | 2019.01.31 |
[Spring Framework]01-05.Spring Framework 구조 및 파일, 설정 설명 (0) | 2019.01.29 |
[Spring Framework]01-04.Spring Framework 설치하기 (0) | 2019.01.28 |