Spring MVC Project 템플릿 생성
New > Spring Legacy Project > Spring MVC Project 템플릿이 없을 때
※ STS3 에서 Spring Legacy Project 생성 시 Spring MVC Project 메뉴가 안 나온다.
STS3를 2024년 02월 이후에 설치하면 3.0xml이 다운로드가 안되어 Spring MVC Project 메뉴를 찾을 수 없다.
Spring MVC Project 템플릿 생성 방법
1. STS3 종료 후 탐색기에서 workspace 이동
\.metadata\.plugins\org.springsource.ide.eclipse.commons.content.core
2. https-cotent.xml을 붙여 넣는다.
[참조] https://blog.naver.com/outrogallery0322/223367935948
3. STS3 실행
New > Spring Legacy Project
템플릿이 다운로드 되지 않을 경우
=> 기존에 http://wisejia.iptime.org:8000/org.springframework.templates.mvc-3.2.2.zip 있는데
이곳에서는 템플릿이 다운로드가 안 되기 때문이다.
=> 만약에 Invalid thread access 라고 에러가 뜨면 .metadata를 지우고 다시 처음부터 설정한다.
① 위의 https-content.xml 파일을 연다.
② 파일 안에서 기존의 템플릿 주소(기존에 있는 URL) 찾는다.
③ 기존의 템플릿 주소를 아래의 주소로 대체한다.
http://timespace12.dothome.co.kr/org.springframework.templates.mvc-3.2.2.zip
http://wisejia.iptime.org:8000/org.springframework.templates.mvc-3.2.2.zip (기존에 있는 URL)
Spring MVC Project 생성
New > Spring Legacy Project > Spring MVC Project 템플릿
3단계 Package로 설정
com.mvc.SpringProject
com.controller.SpringProject
pom.xml
- JDK와 Spring 버전을 변경 한다
- default로 JDK는 1.6 으로 잡혀있다.
=> <java-version>11</java-version>로 변경
- default로 스프링은 3.1.1 으로 잡혀있다.
=> <org.springframework-version>5.3.37</org.springframework-version> 변경
Dependency
<!-- ================================================================= -->
<!-- Spring -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.37</version>
</dependency>
<!-- Spring jdbc -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.37</version>
</dependency>
<!-- Connection Pool -->
<!-- commons-collections4 -->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.4</version>
</dependency>
<!-- common-dbcp2 -->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.11.0</version>
</dependency>
<!-- MySQL -->
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
<!-- MyBatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.16</version>
</dependency>
<!-- MyBatis Spring -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- JSTL 은 밑에 있음 -->
<!-- JSON -->
<!-- json-lib -->
<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<!-- jackson core -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.17.2</version>
</dependency>
<!-- Jackson Databind -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.2</version>
</dependency>
<!-- file upload -->
<!-- commons-io -->
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.16.1</version>
</dependency>
<!-- commons-fileupload -->
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.5</version>
</dependency>
<!-- Lombok -->
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<!-- ================================================================= -->
URL 프로젝트명 변경하고 싶을 때
예) Spring Project 로 생성한 Spring MVC Project >> spring
톰캣 더블클릭 > Modules > Path 프로젝트 선택 후 Edit > Path 수정
/spring 로 바꿈
URL : http://localhost:8080/spring/
WAC (Web Application Context) 등록
1. ContextLoaderListener가 생성하는 Root WAC
- 웹 환경과 독립적인 빈 등록
- 디폴트 설정 파일 /WEB-INF/applicationContext.xml 으로 설정 된다
- 서비스계층과 데이터 액세스 계층을 포함해서 웹 환경과 직접 관련이 없는 모든 빈들을 여기에 등록 한다
→ 만약에 사용할 이름이 다르거나 설정파일이 여러 개인 경우
contextConfigLocation 파라미터를 추가해서 설정해주면 된다
2. DispatcherServlet이 생성하는 WAC
- DispatcherServlet이 직접 사용하는 컨트롤러를 포함한 웹 관련 빈을 등록
- 디폴트 설정 파일 /WEB-INF/서블릿이름-servlet.xml으로 설정된다
→ 만약에 사용할 이름이 다르거나 설정파일이 여러 개인 경우
contextConfigLocation 파라미터를 추가해서 설정해주면 된다
<mvc:annotation-driven />
1. Spring Web MVC를 하기 위해 설정해야 하는 값들을 자동으로 추가해준다.
2. Spring MVC가 @Controller에 요청을 보내기 위해 필요한 HandlerMapping과 HandlerAdapter를 bean으로 등록한다.
- HandlerMapping : HTTP 요청정보를 이용해서 컨트롤러를 찾아주는 기능
- HandlerAdapter : HandlerMapping을 통해 찾은 컨트롤러를 직접 실행하는 기능을 수행
3. bean을 생성하기 위해 xml 파일에 context:component-scan을 명시하면 이 태그를 포함하지 않아도 MVC 애플리케이션은 작동한다.
<context:component-scan />
특정 패키지 내의 클래스를 스캔하고 Annotation(@Component @Controller @Service @Repository)을 확인한 후 Bean 인스턴스로 생성한다.
이를 이용하면 @Autowired와 @Qualifier Annotation을 인식할 수 있다.
<context:component-scan /> 을 선언했다면 <context:annotation-config /> 를 선언할 필요가 없다.
<context:annotation-config />
ApplicationContext 안에 이미 등록된 Bean들의 Annotation을 활성화하기 위해 사용된다.
Component-scan과의 차이점은 이 설정은 Bean을 등록하는 작업을 수행하지 않는다는 것이다.