본문 바로가기
IT/Spring Project

[Spring Project] - 스프링 프로젝트 메이븐(Maven) 기반 Spring 프로젝트 생성(web.xml 설정 안 쓰고 자바로(Java Config) 설정하는 방법)

by 차이나는 개발자 2022. 3. 1.
728x90
반응형

#스프링 프로젝트 메이븐(Maven) 기반 Spring 프로젝트 생성(web.xml 설정 안 쓰고 자바로(Java Config) 설정하는 방법)

 

 

1. web.xml자바 설정을 위한 xml 설정 파일을 삭제합니다.

 

 

2. web.xml을 삭제하면 pom.xml에서 에러가 발생합니다.

(과거 웹 프로젝트들이 기본적으로 web.xml을 사용하는 것을 default로 설정했기 때문입니다.)

-pom.xml하단에 maven-war-plugin 플러그인 추가 후 Maven -> Update Project 를 진행합니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

 

 

3. web.xml, root-context.xml, servlet-context.xml파일들을 대신하는 자바 설정 클래스를 생성합니다.

-@Configuration 어노테이션을 사용해서 설정 클래스임을 지정합니다.

-@ComponentScan 어노테이션을 사용해서 의존성을 주입합니다.

-@EnableWebMvc 스프링 MVC 기능을 활성화합니다.

 

 

3-1. pom.xml 설정

<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.set</groupId>
	<artifactId>maven</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>maven Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<java-version>1.8</java-version>
	</properties>

	<dependencies>

		<!-- 객체생성, 라이프사이클, 스키마 확장등의 기능 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>

		<!-- 스프링 기반의 MVC프레임워크, 웹 애플리케이션을 개발하는데 필요한 Controller, View 구현을 제공 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>

		<!-- 서블릿 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.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>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.12</version>
			<scope>provided</scope>
		</dependency>

		<!-- 단위 테스트 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<!-- web.xml 파일이 디폴트로 지정되는 설정 끄기 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>3.2.0</version>
				<configuration>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
			<!-- maven compiler plugin 을 사용하면 용도에 맞게 JDK 및 compile 옵션 설정 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.1</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<compilerArgument>-Xlint:all</compilerArgument>
					<showWarnings>true</showWarnings>
					<showDeprecation>true</showDeprecation>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

 

 

3-2. WebConfig.java 설정

package com.spring.web.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

// web.xml 대체 클래스
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class[] {RootConfig.class};
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class[] {ServletConfig.class};
	}

	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}

}

 

 

3-3. RootConfig.java 설정

package com.spring.web.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

// root-context.xml 대체 클래스
@Configuration // 설정 클래스임을 명시
@ComponentScan(basePackages = {"com.spring.web"} ) // 해당 패키지 스캔 의존성 주입
public class RootConfig {

}

 

 

3-4. ServletConfig 설정

package com.spring.web.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

// servlet-context.xml 대체 클래스
@EnableWebMvc // Spring MVC 기능 활성화
@ComponentScan(basePackages = {"com.spring.web.controller"}) // // 해당 패키지 스캔 의존성 주입
public class ServletConfig implements WebMvcConfigurer{

	// jsp 파일 설정
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		InternalResourceViewResolver bean = new InternalResourceViewResolver();
		bean.setViewClass(JstlView.class);
		bean.setPrefix("/WEB-INF/views/");
		bean.setSuffix(".jsp");
		registry.viewResolver(bean);
	}
	
	// 정적 파일 처리
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
	}
	
}

 

 

3-5. MainController 설정

package com.spring.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MainController {
	
	@GetMapping("/main")
	public String main(){
		
		return "main";
	}
	
}

 

 

3-6. main.jsp 설정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>메인 페이지</h1>
</body>
</html>

 

 

3-7. 브라우저에서 localhost:8080/main 호출해서 확인합니다.

 

 

 

728x90
반응형

댓글