Spring MVC 실습

  1. .프로젝트 디렉토리를 생성한다.
  2. 프로젝트 디렉토리에서 다음의 세 디렉토리를 생성한다.
  • src/main/java
    • 자바 소스 코드
  • src/main/resources
    • xml등의 자원 파일
  • src/main/webapp
    • 웹 어플리케이션을 위한 폴더

3. 웹 어플리케이션을 위한 pom.xml 파일을 프로젝트 디렉토리에 생성한다.

 

pom.xml

서블릿, JSP, JSTL을 위한 의존설정

스프링 MVC 실행을 위한 의존설정

메이븐 웹 프로젝트를 실행 시키기위한 Jetty 프러그인 설정

  • 의존모듈
    • 서블릿, JSP
    • 스프링 MVC 모듈 및 스프링 MVC가 필요로 하는 모듈
  • 웹 테스트를 위한 Jetty 서버 설정
<?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>test6</groupId>
    <artifactId>test6</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 서블릿, JSP, JSTL을 위한 의존 설정-->
    <dependencies>
        <dependency>
            <groupId>
                javax.servlet.jsp
            </groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </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>
            <scope>runtime</scope>
        </dependency>
        
        
    <!-- 스프링 mvc 실행을 위한 의존 설정-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.18.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>spring4-chap07</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>utf-8</encoding>
                </configuration>

            </plugin>
            <!-- jetty 설정 (=tomcat)-->
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.9.v20180320</version>
                <configuration>
                    <httpConnector>
                        <port>9080</port>
                    </httpConnector>
                    <scanIntervalSeconds>0</scanIntervalSeconds>
                    <webApp>
                        <contextPath>/</contextPath>
                    </webApp>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

 

스프링 MVC를 위한 설정을 web.xml에 추가하기

  • DispatcherServlet 등록
  • dispatcher 서블릿에 대한 매핑을 '*.do'로 지정한다. 따라서 웹 브라우저 요청 중에서 확장자가 do로 끝나는 모든 요청을 dispatcher 서블릿이 처리하게 된다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--DispatcherServlet 등록 -->
    <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>
    <!--dispathcer 서블릿에 대한 매핑을 '*.do' 로 지정한다.-->
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!-- 요청 파라미터를 UTF-8로 처리하기 위한 필터를 설정한다. -->
    <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>

 

스프링 컨트롤러 구현

web.xml의 DispatcherServlet 설정이나 뒤에서 살펴볼 스프링 MVC 설정은 프로젝트 시작 시점에 설정하면 대부분 완료되며, 실제 컨트롤러와 뷰를 구현하는 데 많은 시간을 사용한다.

package net.madvirus.spring4.chap07.quickstart;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

//클래스가 스프링 MVC 컨트롤러임을 지정
@Controller
public class HelloController {
    //hello() 메서드가 /hello.do로 들어오는 요청을 처리함을 지정
    @RequestMapping("/hello.do")
    public String hello(Model model) {
        //뷰에 "greeting"이라는 이름으로 "안녕하세요"라는 데이터를 전달
        model.addAttribute("greeting","안녕하세요");
        //리턴 값 "hello"를 뷰 이름으로 사용
        return "hello";
    }
}
  • @Controller
    • 클래스가 스프링 MVC 컨트롤러임을 지정
    • 컨트롤러는 클라이언트(웹 브라우저)의 요청을 처리하는 기능을 제공한다. 위 코드의 경우 웹 브라우저가 "/hello.do" 주소로 요청을 하면 hello() 메서드를 이용해서 그 요청을 처리한다.
    • 컨트롤러가 직접 응답 결과를 생성할 수도 있지만, 보통은 결과를 보여줄 때 사용할 뷰 이름을 리턴한다.
    • 위의 코드에서 hello를 리턴했는데, 스프링MVC는 "hello"에 해당하는 뷰 구현을 찾은 뒤, 해당 뷰를 이용해서 응답 결과를 생성한다.
    • 컨트롤러는 뷰에서 사용할 데이터를 모델(model)에 담아서 전달한다.
  • @RequestMapping("/hello.do")
    • hello() 메서드가 /hello.do로 들어오는 요청을 처리함을 지정
  • model.addAttribute("greeting","안녕하세요");
    • 뷰에 "greeting"이라는 이름으로 "안녕하세요" 라는 데이터를 전달
  • return "hello"
    • 리턴 값을 "hello"를 뷰 이름으로 사용

 

JSP를 이용한 뷰 구현

greeting의 값은 앞서 작성했던 HelloController 클래스의 모델 설정을 통해서 전달된다.

<!-- JSP를 이용한 뷰 구현-->
<%@ page contentType="text/html; charset=utf-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
</head>
<body>
<!-- controller에서 greeting 전달-->
인사말:${greeting}
</body>
</html>

 

스프링 MVC 설정 파일 작성

helloController에서 "hello"를 리턴했는데, 이 값으로 어떻게 WEB-INF/view 디렉토리에 위치한 hello.jsp 파일을 뷰로 사용하느냐 하는 점이다. 이는 스프링 MVC 설정을 통해 처리된다.

<?xml version="1.0" encoding="UTF-8" ?>
<bean xmls ="http://www.springframework.org/schema/beans"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xmlns:xsi="http://wwww.w3.rog/2001/XMLSchema-instace"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/beans/mvc
      http://www.springframework.org/schema/beans/mvc/spring-mvc.xsd">
    <!-- 몇 개의 설정을 한 번에 해주는 코드이다.
    RequesstMappingHandlerMapping과 RequestMappingHandlerAdapter를 빈으로 등록해준다.-->
    <mvc:annotaion-driven/>
    <!-- 뷰 이름을 실제 어떤뷰와 연결할지 결정하는 VeiwResolver를 설정
    prefix + 뷰 이름 + suffix
    - /WEB-INF/view/hello.jsp
    -->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name = "prefix" value ="/WEB-INF/view/"/>
        <property name ="suffix" value=".jsp"/>
    </bean>
    <bean class ="net.madvirus.spring4.chap07.quickstart.HelloController"/>
</bean>

 

+ Recent posts