[Spring] 인텔리제이 스프링 프로젝트 실행
인텔리제이를 사용하게 되어 스프링 프로젝트 실행까지를 정리해 본다.
우선 인텔리제이 홈페이지에서 다운로드 페이지에 들어가면 Ultimate가 나오는데 그건 유료고, 커서를 조금 내려보면 Community Edition이 있으니 이것을 다운 받으면 된다.

설치 후 실행하면 아래처럼 나오는데, 새 프로젝트를 선택한다.

좌측의 Maven 원형 클릭하고, 프로젝트 이름, 위치, JDK 버전을 확인해주고, Archetype에서 quickstart를 선택해 주고 생성 버튼 클릭.


프로젝트가 다 설치되고 나면 아래와 같이 폴더를 만들어 경로를 설정해준다.

pom.xml 파일에 추가할 의존성을 추가해 주고, 우측 상단의 Maven 변경 내용 로드 버튼( Ctrl + Shift + O ) 클릭.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Sample</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java-version>17</java-version>
<org.springframework-version>5.3.19</org.springframework-version>
<org.aspectj-version>1.9.7</org.aspectj-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>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.9.v20180320</version>
<configuration>
<httpConnector>
<port>9080</port>
</httpConnector>
<scanIntervalSeconds>0</scanIntervalSeconds>
<webApp>
<contextPath>/</contextPath>
</webApp>
</configuration>
</plugin>
</plugins>
</build>
</project>
WEB-INF 폴더에 web.xml 파일 생성 후 코드 작성.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<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/spring/appServlet/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>
spring 폴더 안에 root-context.xml 파일 생성

appServlet 폴더 안에 servlet-context.xml 파일을 생성하여 매핑 설정.
(아래에서 내용 수정)

자동으로 만들어져 있던 App 파일은 사용하지 않으니 삭제.

java의 패키지 안에 HomeController.java 파일 생성 후 @Controller 추가


실행 확인을 위해 컨트롤러에 코드 작성.

// controller 패키지 추가하여 파일 경로 수정. (controller 패키지로 이동)

views 폴더에 index.jsp 파일 생성.
(servlet-context.xml에 경로 설정해 놓은 상태)

왼쪽 상단 햄버거 버튼 -> 실행 -> 구성 편집 클릭.

새 구성 추가 버튼 클릭하여 서버로 사용할 jetty:run 추가 후 확인.


상단에 실행 버튼( Shift + F10 ) 클릭. -> 실패.
(servlet-context.xml에 beans 설정이 없었음)

당시의 에러 상황.
다른 내용도 있었지만 아래와 같은 에러를 만나면 xml 파일에 문제가 있을 가능성이 큼.
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'mvc:annotation-driven'.

servlet-context.xml 수정 후 다시 jetty 실행하여 성공.
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:beans="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<mvc:annotation-driven enable-matrix-variables="true"/>
<!-- 컨트롤러 매핑 설정 -->
<mvc:annotation-driven />
<!-- 정적 리소스 설정 -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<!-- 뷰 매핑 설정 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp" />
</bean>
<context:component-scan base-package="org.example.*" />
</beans>
서버가 도는 것을 확인한 뒤 브라우저에서 지정해 놓은 포트 번호로 localhost를 띄워서 결과가 나오면 성공.
