[Spring] IntelliJ에서 Spring Framework Project 생성 및 설정(Maven)
Maven 프로젝트 생성을 이용해
Spring Framwork 프로젝트 생성하기
인텔리제이에서 Spring Framework 프로젝트 생성하는 방법을 알아보고자 한다
기존에는 Spring Boot만 사용하여 start.spring.io 사이트를 이용해 스프링 프로젝트를 설정 후 다운받아 사용하거나
spring Initializr를 이용해 프로젝트를 생성했는데,
Spring Framework 프로젝트는 이러한 기능이 없기 때문에 Maven 프로젝트를 통해 스프링을 구현하고자 한다
https://kcode-recording.tistory.com/76
[Spring Boot] Spring Boot 스타터 사이트(자주 이용)
https://start.spring.io >>해당 사이트로 이동하면 Spring Boot 스프링 프로젝트 다운이 가능 [사용 방법] 1. Project 선택 : Maven / Gradle은 필요한 라이브러리를 땡겨서 오고 빌드를 하는 라이프 사이클까지
kcode-recording.tistory.com
[Maven 프로젝트 생성]
1. 인텔리제이를 통해 New Project를 클릭해 Maven Archetype을 선택
2. Name, Location을 설정한 후 아래와 같이 설정
1) JDK : 11 Version
2) Catalog : Internal (기본)
3) Archetype : org.apache.maven.archetypes:maven-archetype-webapp
4) Version : 1.0
3. Advanced Settings는 그대로 유지
4. create를 클릭
: 프로젝트가 생성되면서 다양한 것들이 build 되기 시작되면서 아래와 같은 폴더 구조가 생성된다
[Tomcat 설정]
1. web.xml과 index.jsp 삭제
: 이 두 파일은 추후 다시 설정할 것이기 때문에 삭제 후 아래에서 생성 예정
2. 왼쪽 상단에서 Edit Configurations 클릭 (검색도 가능)
3. Add new Configurations를 통해 톰캣 추가
4. 톰캣 설정 진행
- IntelliJ Ultimate 버전의 경우에는 Tomcat Server가 존재하지만, 만약 기본 버전이라면 Smart Tomcat 을 플러그인에서 설치 후 사용 가능
- Tomcat server를 다운받아 압축을 해제한 다음 톰캣 폴더 자체를 등록 (등록 시 폴더를 열어서 등록해야 등록이 정확히 됨)
- Context path 의 경우 프로젝트 이름이 적혀 있지만 main path에 아무것도 하기 위해 / 만 path로 설정
*Smart Tomcat 플러그인 설치 : Settings >> Plugins >> Smart Tomcat 검색 및 설치
5. Ok 클릭 - Configuration이 Current file에서 톰캣으로 변경되었다면, 톰캣 설정 완료
[Spring Framework 설정]
톰캣까지 등록했다면 이제 거의 다 끝!
이제는 xml만 생성하고 폴더 구조만 생성해주면 끝인데 그것은 아래와 같다
1. java 폴더 생성 및 폴더 구조 생성
1) java 폴더 생성
: main에서 Directory를 생성할 때 기본 Directory가 아닌 java Directory를 생성
2) 폴더 구조 생성
: com 폴더 구조를 생성 (폴더명의 경우 자유)
* 폴더 구조는 servlet-context.xml에서 설정한 패키지와 동일해야 함
2. root-context.xml / servlet-context.xml / web.xml 폴더를 생성 및 설정
[코드 출처] https://github.com/codingrecipe1/springframework_setting
[root-context.xml]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>
[servlet-context.xml]
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/"/>
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!-- 프로젝트 패키지이름 확인 -->
<context:component-scan base-package="com.codingrecipe.springEx2" />
</beans:beans>
[web.xml]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/root-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<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>
</web-app>
3. pom.xml에서 dependency를 설정
properties 아래에 dependency 입력
아래에서 필요한 라이브러리 찾아서 dependencies 안에 입력하면 됨
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<java-version>11</java-version>
<org.springframework-version>5.3.20</org.springframework-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
<dependencies>
<!-- 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>
<!-- Logging -->
<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>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- data base -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>9.0.31</version>
</dependency>
<!-- fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!-- json -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
<!-- jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>mvc_test</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
[Test 해보기]
1. java 파일 밑에 HomeController 생성
@Controller
public class HomeController {
@GetMapping("/")
public String index(){
return "index";
}
}
2. index.jsp를 WEB-INF 아래 생성
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index</title>
</head>
<body>
<h2>hello spring framework!!</h2>
</body>
</html>
창이 바로 뜨는 것이 아닌 아래 localhost:8080을 통해 접속하면 아래와 같이 나오는 것을 확인할 수 있는데, 확인이 잘 된다면 성공!