1. 소개
Spring Web MVC 에서, DispatcherServlet 클래스는 프론트 컨트롤러로 역할을 한다. (Spring MVC 프로그램의 모든 흐름을 관리하는 책임을 가지고 있다.) Struts 의 ActionServlet 와 같은 역할을 한다고 할 수있다. 또한 디자인 패턴적으로 Struts와 같은 Push 스타일을 따르고 있다.Spring 3 부터 어노테이션 @Controller 는 해당 클래스가 컨트롤러임을 의미한다. Spring MVC 를 처음 사용해보지만 이부분은 사용이 아주 쉽다. 어노테이션 @RequestMapping 은 요청 URL을 매핑하는데 사용된다. 이부분이 조금 익숙하지 않아 어렵게 생각된다. 매번 구글링을 하는 것도 조금 힘이든다.
- 프론트 컨트롤러 Dispatch Servlet 는 모든 요청들을 가로챈다.
- Dispatch Servlet 는 xml 파일에서 매핑된 핸들러 정보를 얻어
- 요청을 Controller 로 포워드한다.
- Controller 는 ModelAndView 객체를 리턴하고
- Dispatch Servlet 는 xml 파일에서 Controller 에서 처리된 결과를 보여줄 View 결정 하는 View Resolver 를 채크하여
- 특정 View 콤포넌트를 호출한다.
2. 환경설정
Maven 프로젝트 구성
eclipse 에서 New Maven Project 생성 과정에서 Archetype "maven-archetype-webapp" 를 사용하여 Maven 기반의 웹 프로젝트를 만드는 방법이 일반적인것 같으나, 개인적으로 (직관적으로 보이지 않는것을) 좋아하지 않아 아래와 같은 구조로 구성하여 프로젝트를 구성한다.
- 소스 : /src
- 웹 프로그램 루트 : /WebContent
- 웹 프로그램 설정 : /WebContent/WEB-INF/
- maven 설정 : /pom.xml
Spring Web MVC 를 위해서 다음의 의존성을 pom.xml 파일에 추가한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | <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>example</groupId> <artifactId>example</artifactId> <version>0.0.1.SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <javac.src.version>1.6</javac.src.version> <javac.target.version>1.6</javac.target.version> <project.javadoc.docEncoding>UTF-8</project.javadoc.docEncoding> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>${javac.src.version}</source> <target>${javac.target.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.3.1</version> <configuration> <outputDirectory>${basedir}/WebContent/WEB-INF/lib</outputDirectory> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.1</version> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${basedir}/WebContent/WEB-INF/lib </outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> <excludeGroupIds> javax.crypto,javax.servlet.jsp,javax.transaction,javax.servlet </excludeGroupIds> </configuration> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupid>javax.servlet</groupid> <artifactid>servlet-api</artifactid> <version>2.5</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupid>javax.servlet.jsp</groupid> <artifactid>jsp-api</artifactid> <version>2.0</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupid>javax.inject</groupid> <artifactid>javax.inject</artifactid> <version>1</version> </dependency> </dependencies> </project> | cs |
다음은 아주 중요한 설정으로 ViewResolver 와 뷰 콤포넌트들을 기술한다.
WEB-INF/servelt-config/servlet-context.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <beans:beans xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- DispatcherServlet Context: 서블릿의 요청 처리를 위한 것들을 정의 --> <!-- Enables the Spring MVC @Controller programming model --> <mvc:annotation-driven></mvc:annotation-driven> <context:component-scan base-package="neuro.honeycomb"></context:component-scan> <mvc:view-controller path="/" view-name="index"></mvc:view-controller> <!-- 이미지, 자바스클립트, CSS 와 같은 정적 컨텐츠 요청(GET) 을 처리하기 위하여 설정 --> <mvc:resources location="/images/" mapping="/images/**"></mvc:resources> <mvc:resources location="/js/" mapping="/js/**"></mvc:resources> <mvc:resources location="/css/" mapping="/css/**"></mvc:resources> <!-- 뷰처리 위한 ViewResolver 정의 --> <beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver" id="beanNameViewResolver"> <beans:property name="order" value="0"></beans:property> </beans:bean> </beans:beans> | cs |
component-scan 는 base-package 에 지정된 하위 패키지들에 정의된 @Controller 어노테이션이 기술된 Controller 클래스들을 검색하게 된다. resources 는 특정 URL 패턴에 해당하는 요청들의 자원들이 어디에 있는가를 정의한다. 이들은 ViewResolver 역할을 한다.
위의 설정에서는 정적 콘텐츠들을 resources 태그를 사용하여 매핑하고, bean 이름으로 요청을 매핑하는 ViewResolver 을 정의하고 있다.
예제 프로로그램
MAVEN 기반의 예제 프로그램소스Eclipse 에서 위의 GIT 레파지토리에서 spring-web-example 을 MAVEN 프로젝트를 임포트한 후 빌드후 WebContent 를 웹 프로그램으로 배포하면 됨.
참조
Spring MVC Tutorial
잘 읽었습니다.
답글삭제