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
반응형
댓글