작업을 할 프로젝트 폴더를 생성하고 초기 설정을 하겠다.
File -> new -> Dynamic Web Project를 선택하고 이름을 지정해서 새로운 프로젝트 폴더를 생성하자.
그 후 폴더를 우클릭 한 후 Configure -> Convert to Maven Project 를 선택하자.
프로젝트가 빨간색으로 오류 표시가 뜨면 우클릭 -> Maven -> Update Project를 눌러서 update 해주자.
나는 Java Annotation을 활용한 방법으로 Spring 프로젝트를 진행할 것이다.
pom.xml에 적절한 dependency 설정을 해주자.
mvnrepository에 가보면 각 필요한 라이브러리에 대한 dependency 버전과 정보가 나온다.
jstl, servlet-api, spring web mvc, validation-api, hibernate, jdbc, mybatis 등 필요한 것들을 복사해서 붙여넣으면 된다.
아래는 내 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MiniBoardProject</groupId>
<artifactId>MiniBoardProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.1</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
<!-- 라이브러리 버전관리 -->
<properties>
<javax.servlet-version>4.0.1</javax.servlet-version>
<javax.servlet.jsp-version>2.3.3</javax.servlet.jsp-version>
<javax.servlet.jsp.jstl-version>1.2</javax.servlet.jsp.jstl-version>
<org.springframework-version>5.2.2.RELEASE</org.springframework-version>
<!-- <org.springframework-version>4.3.25.RELEASE</org.springframework-version> -->
</properties>
<!-- 라이브러리 셋팅 -->
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet-version}</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>${javax.servlet.jsp-version}</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${javax.servlet.jsp.jstl-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.2.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
</dependencies>
</project>
그 후 Spring 초기 설정을 위한 파일들을 저장할 패키지를 생성하자.
java resoureces -> src에 kr.co.choboard.config 패키지를 만든다.
폴더 하위에 세개의 설정 파일을 생성한다.
- SpringConfigClass.java : web.xml의 역할. 스프링 설정을 위한 클래스를 상속받아 구현.
- ServletAppContext.java : Controller 어노테이션이 붙은 클래스들을 컨트롤러로 등록, 스캔할 패키지 지정
- RootAppContext.java : 프로젝트 작업시 사용할 Bean들을 정의하는 클래스
package kr.co.choboard.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
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;
// Spring MVC 프로젝트에 관련된 설정을 하는 클래스
@Configuration
// Controller 어노테이션이 셋팅되어 있는 클래스를 Controller로 등록한다.
@EnableWebMvc
// 스캔할 패키지를 지정한다.
@ComponentScan("kr.co.choboard.controller")
public class ServletAppContext implements WebMvcConfigurer{
// Controller의 메서드가 반환하는 jsp의 이름 앞뒤에 경로와 확장자를 붙혀주도록 설정한다.
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
// TODO Auto-generated method stub
WebMvcConfigurer.super.configureViewResolvers(registry);
registry.jsp("/WEB-INF/views/", ".jsp");
}
// 정적 파일의 경로를 매핑한다.
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// TODO Auto-generated method stub
WebMvcConfigurer.super.addResourceHandlers(registry);
registry.addResourceHandler("/**").addResourceLocations("/resources/");
}
}
ServletAppContext.java
package kr.co.choboard.config;
import org.springframework.context.annotation.Configuration;
// 프로젝트 작업시 사용할 bean을 정의하는 클래스
@Configuration
public class RootAppContext {
}
RootAppContext.java
package kr.co.choboard.config;
import javax.servlet.Filter;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
//public class SpringConfigClass implements WebApplicationInitializer{
//
// @Override
// public void onStartup(ServletContext servletContext) throws ServletException {
// // TODO Auto-generated method stub
// // Spring MVC 프로젝트 설정을 위해 작성하는 클래스의 객체를 생성한다.
// AnnotationConfigWebApplicationContext servletAppContext = new AnnotationConfigWebApplicationContext();
// servletAppContext.register(ServletAppContext.class);
//
// // 요청 발생 시 요청을 처리하는 서블릿을 DispatcherServlet으로 설정해준다.
// DispatcherServlet dispatcherServlet = new DispatcherServlet(servletAppContext);
// ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", dispatcherServlet);
//
// // 부가 설정
// servlet.setLoadOnStartup(1);
// servlet.addMapping("/");
//
// // Bean을 정의하는 클래스를 지정한다
// AnnotationConfigWebApplicationContext rootAppContext = new AnnotationConfigWebApplicationContext();
// rootAppContext.register(RootAppContext.class);
//
// ContextLoaderListener listener = new ContextLoaderListener(rootAppContext);
// servletContext.addListener(listener);
//
// // 파라미터 인코딩 설정
// FilterRegistration.Dynamic filter = servletContext.addFilter("encodingFilter", CharacterEncodingFilter.class);
// filter.setInitParameter("encoding", "UTF-8");
// filter.addMappingForServletNames(null, false, "dispatcher");
// }
//}
public class SpringConfigClass extends AbstractAnnotationConfigDispatcherServletInitializer{
// DispatcherServlet에 매핑할 요청 주소를 셋팅한다.
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[] {"/"};
}
// Spring MVC 프로젝트 설정을 위한 클래스를 지정한다.
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {ServletAppContext.class};
}
// 프로젝트에서 사용할 Bean들을 정의기 위한 클래스를 지정한다.
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {RootAppContext.class};
}
// 파라미터 인코딩 필터 설정
@Override
protected Filter[] getServletFilters() {
// TODO Auto-generated method stub
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setEncoding("UTF-8");
return new Filter[] {encodingFilter};
}
}
SpringConfigClass.java -> 두가지 클래스의 상속으로 구현이 가능하며 각 방법마다 장/단점이 있다. 위의 경우는 기능 구현이 더 자유롭고, 아래의 경우는 해야하는 것만 할 수 있는 경향이 있다.
'프로젝트 > 게시판미니프로젝트' 카테고리의 다른 글
[프로젝트] 회원가입 관리 (0) | 2020.05.07 |
---|---|
[프로젝트] 상단 메뉴 관리 (0) | 2020.05.07 |
[프로젝트] 데이터베이스 테이블 & Mybatis 초기 설정 (0) | 2020.05.06 |
[프로젝트] 상단 메뉴 기본 구조 설정 (0) | 2020.05.06 |
[프로젝트] Eclipse 초기 설정 (0) | 2020.05.05 |