intelliJ에서 Spring MVC 프로젝트 생성을 해봅니다.
Maven 원형
을 선택합니다.
프로젝트 이름을 입력하고 자신이 사용할 JDK버전을 선택합니다.
Archetype에 maven-archetype-webapp
을 선택합니다.
고급 설정
을 눌러 그룹 아이디를 수정하고 생성을 한다.
Spring MVC에 추가해야 하는 dependency를 추가합니다.
<properties>
<java-version>11</java-version>
<org.springframework-version>5.3.39</org.springframework-version>
<org.aspectj-version>1.9.19</org.aspectj-version>
<org.slf4j-version>2.0.13</org.slf4j-version>
</properties>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<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 END -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
src/main
에 java
디렉토리를 생성하고 pom.xml
에서 groupId / artifactId
을 확인해서 /groupId/artifactId 순으로 디렉토리를 생성합니다.
/webapp/WEB-INF/spring
경로에 root-context.xml과 servlet-context.xml 파일을 생성합니다.
servlet-context.xml에서는 Spring Mvc를 설정합니다.
<?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">
<!-- @Controller, @Service 등 Spring MVC 어노테이션 활성화 -->
<annotation-driven />
<!-- 정적 리소스 경로 설정 ( /resources/js/**, /resources/css/** 등) -->
<resources mapping="/resources/**" location="/resources/"/>
<!-- BeanNameViewResolver: View 이름이 Bean 이름과 일치하면 해당 View Bean을 사용 -->
<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>
<!-- Controller가 위치한 패키지를 스캔하여 자동으로 Bean 등록 -->
<context:component-scan base-package="[groupId].[artifactId].example.controller,
[groupId].[artifactId].example.service" />
<!-- @Transactional 어노테이션을 사용한 트랜젝션 처리 활성화 -->
<tx:annotation-driven proxy-target-class="true"/>
</beans:beans>
** context:component-scan @Controller
, @Service
가 있는 디렉토리를 등록합니다.
root-context.xml
은 Spring 애플리케이션의 전역 설정 파일로, 주로 웹 계층과 직접적인 관련 없는 Bean들을 정의합니다.
<?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/spring/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/spring/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>
실행 -> 구성편집에 들어가서 Tomcat을 설정합니다.
일단 Tomcat 9버전을 다운 받습니다. (10버전부터는 jakarta EE를 지원하기 때문에 다운받으면 안된다.)
https://tomcat.apache.org/
다운받으면 압축해제를 합니다.
구성편집에서 Tomcat 로컬을 선택합니다.
애플리케이션 서버에서 구성
을 눌러 압축 해제한 톰캣을 선택해줍니다.
배포 탭을 선택해서 아티팩트
-> www:war exploded
를 추가합니다.
애플리케이션 컨텍스트에 /
만 입력합니다.
Controller와 jsp를 생성해서 테스트를 해봅니다.
// Controller
@Controller
public class MemberController {
@GetMapping("/test")
public String getTest() {
return "/member/test";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<div>test success</div>
</body>
</html>