초코레

스프링 MVC 초기 설정 본문

Backend/Spring

스프링 MVC 초기 설정

초코레 2020. 7. 26. 18:03
  1. Maven 프로젝트 생성
    • packaging은 war로 설정
  2. 생성된 프로젝트에서 다음의 디렉토리를 확인할 수 있다. 기본적으로 생성되지 않으면 직접 생성해주면 된다.
    • /src/main/java : 자바 소스 코드
    • /src/main/resources : 프로퍼티나 MXL 등의 리소스 파일. 클래스패스에 포함됨.
    • /src/main/webapp : 웹 어플리케이션 관련 파일 (WEB-INF 디렉로리, jsp 파일 등)
    • /src/test/java : 테스트 자바 소스 파일
    • /src/test/resources : 테스트 과정에서 사용되는 리소스 파일
  3. 루트 디렉토리에 pom.xml 파일을 생성하여 다음의 기본적인 메이븐 설정을 한다.
<!-- 의존 모듈 : 서블릿, jsp, jstl, 스프링 MVC -->
  <dependencies>
      <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.2</version>
          <scope>provided</scope>
      </dependency>
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.0.1</version>
          <scope>provided</scope>
      </dependency>
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
          <scope>runtime</scope>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>4.0.4.RELEASE</version>
      </dependency>
  </dependencies>

  <build>
      <finalName>dakku</finalName>
      <plugins>
          <!-- 컴파일 자바 버전 -->
          <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <configuration>
                  <source>1.7</source>
                  <target>1.7</target>
                  <encoding>utf-8</encoding>
              </configuration>
          </plugin>
      </plugins>
  </build>
  1. 스프링 MVC 설정을 위한 web.xml을 추가하고 기본 설정하기
    • DispatcherServlet 설정 추가
      • DispatcherServlet은 내부적으로 스프링 컨테이너를 생성한다. 컨테이너를 생성할 때 사용할 설정 파일을 지정하는 방식이 있다.
      • 별도의 초기화 파라미터를 설정하지 않으면 /WEB-INF/ 디렉토리에 위치한 [서블릿 이름]-servlet.xml 파일을 스프링 설정 파일로 인식한다.
      • 만약 한 개 이상의 설정 파일을 사용하거나 파일명이 이런 기본 형식이 아닌 파일을 사용해야 한다면 contextConfigLocation 초기화 파라미터로 설정 파일 목록을 지정한다. (각 설정 파일의 구분은 콤마, 공백, 탭, 줄바꿈, 세미콜론을 이용)
      • 각 설정 파일의 경로는 루트 디렉토리를 기준으로 하며, file: 이나 classpath: 접두어로 로컬 파일이나 클래스패스에 위치한 파일을 사용할 수 있다.
    • dispatcher 서블릿 매핑 설정 추가
      • 만약 서블릿 매핑 URL 패턴을 *.do 확장자로 설정하면 .do로 끝나는 클라이언트 요청과 DispatcherServlet을 매핑한다.
      • 하지만 확장자를 이용하기 보다는 의미에 맞는 URL을 사용하는 곳이 증가하는 추세이므로 /message/*와 같은 형식으로 설정하게 되는 데, 이때 서블릿 매핑 패턴 설정을 어떻게 했느냐에 따라 컨트롤러 매핑 경로가 바뀌게 된다.
      • 그래서 URL에 do와 같은 확장자를 사용하지 않으면서 컨트롤러 매핑 경로로 전체 경로를 사용하려면
        • 매핑 URL 패턴을 / 로 설정 : 그러면 jsp 요청을 제외한 모든 요청을 DispatcherSerlvet이 받게 된다. 이때 정적 자원에 대한 요청도 받게 되어 404 응답이 나오게 되므로 이에 대한 요청을 컨테이너의 디폴트 서블릿이 처리하도록 디폴트 서블릿 핸들러를 등록한다.
        • 스프링 MVC 설정 파일에 디폴트 서블릿 핸들러를 설정
    • 캐릭터 인코딩 처리 필터 추가 : 요청 파라미터를 UTF-8로 처리하기 위한 필터
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="spring4-chap07" version="3.0">

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/mvc-quick-start.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</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>
  1. web.xml에 추가한 스프링 MVC 설정 파일 작성
    • mvc 네임스페이스 설정
    • HandlerMapping 구현 객체, HandlerAdapter 구현 객체를 빈 객체로 등록
      • mvc:annotation-driven 태그를 등록하면 설정이 끝난다.
      • 이 태그는 ReuqestMappingHandlerMapping과 ReuqestMappingHandlerAdapter 클래스를 빈으로 등록해준다. 추가로 @Controller 어노테이션이 적용된 클래스를 컨트롤러로 사용할 수 있도록 해주고, json이나 xml 등 요청/응답 처리를 위해 필요한 변환 모듈이나 데이터 바인딩 처리를 위한 ConversionService 등을 빈으로 등록해준다.
    • ViewResolver 구현 객체를 빈 객체로 등록
      • 설정할 때 주의할 점은 id는 viewResolver여야 한다.
    • mvc:default-servlet-handler 태그 등록
      • 디폴트 서블릿 핸들러가 빈으로 등록된다.
      • 디폴트 서블릿 핸들러는 정적 자원에 대한 요청 처리를 WAS의 디폴트 서블릿에 전달한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <mvc:annotation-driven />
    <mvc:default-servlet-handler/>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean class="com.dakku.webapps.CommonController" />

</beans>