첫 생성에는 없음
-> Configure Template -> spring default 제외 나머지 삭제(바로 안뜨면 restart)

1. spring폴더(contect 보관 폴더) src/main/resources로 이동
2. web.xml(배포 서술자 : 서버 실행시 가장 먼저 읽음)설정
root-context의 위치 변경(1번에서 이동시킨 내용) : classpath:spring/root-context.xml
servlet-context의 위치 변경(1번에서 이동시킨 내용) : classpath:spring/appServlet/servlet-context.xml
classpath : JVM이 프로그램 실행 시 클래스 및 설정 파일을 찾는 기준 경로)
root-context - 객체(Bean)을 생성할때, 이곳에 요청에 따라 생성
servlet-context - dispatcher servlet이 객체 생성 시, 이 곳에 요청에 따라 생성
web-app의 버젼 4.0으로 변경
xsi:schemaLocation : java를 JAVA로 변경, web-app버젼을 4_0으로 변경
요청/응답 시 한글 깨짐 방지 필터 추가
<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>
3. pom.xml 설정
<properties>
<java-version>11</java-version>
<org.springframework-version>5.3.14</org.springframework-version>
<org.aspectj-version>1.9.9.1</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
<!-- Spring 모듈 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ : AOP 기능을 사용하기 위한 언어 문법 -->
<!-- aspectjrt : AspectJ 런타임 프로그램 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- AspectJ Weaver : aspect의 정보를 바탕으로 aspect를 구성한 코드를 생성하는데 필요한 유틸리티 프로그램 -->
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Log4j (Logging) -->
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<!-- Servlet 버전을 4.0으로 변경 -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<!-- 단위 테스트 도구 (JUnit) -->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- build : 프로젝트 빌드 시 사용되는 플러그인 추가 및 버전 정보 설정 -->
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<!-- 컴파일러 플러그인은 프로젝트의 소스(자바코드)를 컴파일하는 데 사용
jdk 1.6 이상 사용 시 3.0 이상 버전을 사용, source, taget에는 사용하는 jdk 버전을 작성 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
<!-- Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer -->
<!-- 메이븐 구성 문제로 인한 pom.xml 오류 발생 시 해결 -->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
</plugins>
</build>
4. 최상위 경로 설정
5. Maven에 의존하지 않는 라이브러리 추가
첫 서버 실행시
메인 페이지("/", 최상위 폴더)를 열어달라는 요청이 들어옴 ->
spring에서 web.xml을 처음으로 읽음 ->
web.xml에 작성한 경로를 타고 servlet-context.xml을 읽음 ->
- servlet-context의 내용 중
- <annotation-driven /> 태그가 url매핑
- <context:component-scan base-package="주소"> 태그가 주소 안에 있는 클래스를 bean으로 등록
servlet-context.xml를 통해 ("/")가
어노테이션(@RequestMapping)으로 매핑된 MainController의 forward 매서드를 읽음 ->
MainController가 "common/main"을 return ->
servlet-context.xml에 있는 viewResolver가 prefix와 suffix를 앞뒤로 연결하여 반환 ->
prefix + common/main + suffix 가 응답
요약
1. 클라이언트 요청이 dispatcher-servlet으로 전달
2. dispatcher-servlet으로 전달된 요청에 대해 handler-mapping이 controller를 찾아 전달
3. controller는 이에 맞는 로직을 실행한 후 결과 값을 dispatcher-servlet으로 반환
4. 결과 값은 view-resolver의 명시에 따라 페이지 반환
** 결국 dispatcher-servlet, view-resolver, handler-mapping은 servlet-context.xml이 담당