본문 바로가기
Spring|Spring-boot

[Spring] setting

by oncerun 2020. 7. 17.
반응형

spring을 사용하기 위해 maven프로젝트인 webapp으로 실행 시 버전 설정에 관한 글이다.

 

서블릿 버전과 자바버전을 3.1과 1.8로 변경하기 위해서 pom.xml에서 설정을 먼저 해야 한다.

 

<?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>kr.or.connect</groupId>
	<artifactId>mvcexam</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>mvcexam Maven Webapp</name>
	<!-- FIXME change it to the project's website -->
	<url>http://www.example.com</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<spring.version>4.3.5.RELEASE</spring.version>
	</properties>

	<dependencies>

		<!-- Spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.9.RELEASE</version>
		</dependency>


		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- basic data source -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.1.1</version>
		</dependency>


		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.20</version>
		</dependency>


		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.4</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</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<finalName>mvcexam</finalName>
		<pluginManagement><!-- lock down plugins versions to avoid using Maven 
				defaults (may be moved to parent pom) -->
			<plugins>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.8.0</version>
				</plugin>
		....등등 더있을것

		</pluginManagement>
	</build>
</project>

 

properties에 자바버전을 1.8로 변경해준다.

서블릿과 jstl을 추가한 다음

windows설정 탭에서 내비게이션 바를 찾은 뒤 다음과 같은 xml파일에서 jst.web설정을 3.1로 변경해준다.

이제 web.xml DTD를 3.1로 변경합니다.

 

<?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"

         id="WebApp_ID" version="3.1">

  <display-name>Archetype Created Web Application</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

</web-app>



다음과 같이 변경했다면 Alt + F5로 Maven Update를 하신 후 이클립스를 다시 실행시킵니다.

확인을 위해 프로젝트 Properties의 Project Facets에서 설정을 확인합니다.

 

이제 DispatcherServlet이 FrontController역할을 할 수 있도록 설정합니다.

 

여러 가지 방법 중 web.xml과 WebApplicationInitializer 인터페이스를 구현해서 사용하는 방법을 알아봅니다.

 

1.WebApplicationInitializer 

SpringServletContainerInitializer를 제공하기에 WebApplicationInitializer 구현체를 찾아 인스턴스를 생성해 onStartUp() 메서드를 호출하여 서블릿을 초기화하는데요. 이러한 작업은 구동 시 오랜 시간이 걸릴 수 있습니다.

 

 

 

Spring MVC 설정

 

WebMvcContextConfiguration을 통해  DispatcherServlet이 읽어야 하는 설정을 정의합니다.

이러한 설정으로 SpringContextApplication을 생성합니다.

 

@Configuration 스프링 컨테이너에게 설정 파일을 알려주어 Bean으로 등록합니다.

@EnableWebMvc 웹에 필요할 빈들을 자동으로 설정해줍니다.

기본 설정 이외의 설정이 필요하면 WebMvcConfigurerAdapter를 상속받아 메서드를 오버 라이딩하여 구현합니다.

@ComponentScan Controller , Service... 등등 애노테이션이 붙은 클래스를 찾아 빈으로 등록하기 위한 애노테이션입니다.

 

 

package kr.or.connect.mvcexam.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;


@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"kr.or.connect.mvcexam.controller"})
public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter {

	//모든요청을 받기때문에 요청되는 js, css파일등을 웹루트 하위디렉토리인 css, js폴더에서 찾으라는 설정이다.
	@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/META-INF/resources/webjars/").setCachePeriod(31556926);
        registry.addResourceHandler("/css/**").addResourceLocations("/css/").setCachePeriod(31556926);
        registry.addResourceHandler("/img/**").addResourceLocations("/img/").setCachePeriod(31556926);
        registry.addResourceHandler("/js/**").addResourceLocations("/js/").setCachePeriod(31556926);
    }
 
    // default servlet handler를 사용하게 합니다.
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
   
    @Override
    public void addViewControllers(final ViewControllerRegistry registry) {
    		System.out.println("addViewControllers가 호출됩니다. ");
        registry.addViewController("/").setViewName("main");
    }
    
    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

 

1. addResourceHandlers(ResourceHandlerRegistry registry)

스프링 부트에서는 설정할 필요가 없다. static이라는 설정이 되어있는 것 같다.

 

모든 루트로 받도록 디스패처 서블릿 설정을 했기 때문에 다른 파일에 대한 위치를 약속해준다.

 

2.configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)

맵핑 정보가 없는 요청을 디폴트 서블릿 핸들러가 처리하도록 합니다.

 

 

@Override
    public void addViewControllers(final ViewControllerRegistry registry) {
    		System.out.println("addViewControllers가 호출됩니다. ");
        registry.addViewController("/").setViewName("main");
    }
    
    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

3. /로 들어오는 요청을 /WEB-INF/views/main.jsp을 응답하도록 설정합니다.

 

톰캣 실행

index.jsp파일이 존재해 자동으로 페이지가 출력됨으로 삭제 후 재실행

 

 

기본 세팅 끝

반응형

'Spring|Spring-boot' 카테고리의 다른 글

[Spring] MessageConverter  (0) 2020.07.17
레이어드 아키텍쳐  (0) 2020.07.17
[Spring] Spring JDBCTemplate  (0) 2020.07.16
Material UI 모달창 디자인구현  (0) 2020.07.16
[Spring-boot] 자동설정  (0) 2020.06.26

댓글