환영합니다. Spring MVC 예제에 오신 것을 환영합니다. 이전에는 Spring MVC 튜토리얼에서 Spring Tool Suite를 사용하여 Spring MVC 애플리케이션을 만드는 방법을 설명했습니다. 그러나 오늘은 Maven과 Eclipse를 사용하여 기본적인 안녕하세요 월드 스프링 MVC 애플리케이션을 만들 것입니다.
Spring MVC 예제
Spring MVC는 모델-뷰-컨트롤러 아키텍처를 기반으로 합니다. 아래 이미지는 Spring MVC 아키텍처를 고수준에서 보여줍니다.
DispatcherServlet
은 모든 요청을 수신하고 처리를 시작하는 프론트 컨트롤러 클래스입니다. 이를 web.xml 파일에 구성해야 합니다. 이 작업은 적절한 컨트롤러 클래스로 요청을 전달하고 뷰 페이지가 응답 페이지를 렌더링할 때 응답을 보내는 것입니다. HomeController.java
는 스프링 MVC 예제 애플리케이션에서 유일한 컨트롤러 클래스가 될 것입니다. home.jsp
, user.jsp
는 스프링 MVC 안녕하세요 월드 예제 애플리케이션의 뷰 페이지입니다. User.java
는 스프링 MVC 예제 웹 애플리케이션에서 유일한 모델 클래스가 될 것입니다.
스프링 MVC 예제 헬로 월드 이클립스 프로젝트
아래 이미지는 Eclipse에서의 스프링 MVC 예제 프로젝트를 보여줍니다. 시작해 보겠습니다. 처음부터 프로젝트를 만들어 봅시다.
스프링 MVC 예제 이클립스 프로젝트 설정
웹 애플리케이션이므로 종속성 관리에 Maven을 사용하려면 먼저 동적 웹 애플리케이션을 만들고 나서 Maven 프로젝트로 변환해야합니다. 아래 이미지에서이를 수행하는 방법을 보여주고 프로젝트 스켈레톤 구조를 준비합니다. 프로젝트 탐색기 창에서 마우스 오른쪽 버튼을 클릭하고 “새로 만들기 -> 동적 웹 프로젝트”를 클릭합니다. 다음 팝업 페이지에서 이름을 “spring-mvc-example”로 지정하고 나머지 항목은 변경할 필요가 없습니다.
다음 페이지에서 소스 폴더를 “src/main/java”로 지정합니다. 이를 추가하기 전에 목록에서 “src” 폴더를 제거해야 할 수도 있습니다.
다음은 웹 모듈 페이지입니다. 애플리케이션의 컨텍스트 루트를 “spring-mvc-example”로 지정하고 “web.xml 배포 설명자 생성” 옵션을 확인하십시오.
완료를 클릭하면 Eclipse 프로젝트 탐색기에 새로운 동적 웹 프로젝트가 생성됩니다.
다이나믹 웹 프로젝트를 Maven 프로젝트로 변환하기
우리는 Spring MVC 종속성을 쉽게 관리하기 위해 Maven을 사용하고 싶습니다. 그래서 웹 프로젝트를 Maven으로 변환해 봅시다. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 “구성 -> Maven 프로젝트로 변환”을 선택합니다. 다음으로 아래에 표시된대로 pom.xml 구성을 제공합니다.
우리의 Maven 웹 애플리케이션 프로젝트 스켈레톤 코드가 준비되었습니다. 이제 이를 변경하고 Spring MVC hello world 예제 애플리케이션을 만들기 시작할 수 있습니다.
pom.xml에 Spring MVC 종속성 추가하기
pom.xml에 spring-web 및 spring-webmvc 종속성을 추가해야 합니다. 또한 servlet-api, jsp-api 및 jstl 종속성을 추가해야 합니다. 최종 pom.xml 파일은 아래와 같습니다.
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.journaldev.spring.mvc</groupId>
<artifactId>spring-mvc-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Spring MVC Example</name>
<description>Spring MVC Hello World Example</description>
<!-- Add Spring Web and MVC dependencies -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName> <!-- added to remove Version from WAR file -->
</build>
</project>
알림: 빌드에서 finalName
구성을 확인하십시오. 이렇게하면 WAR 파일 이름에 버전 세부 정보가 포함되지 않습니다. 프로젝트가 Eclipse에 의해 빌드되면 모든 jar 파일이 메이븐 종속성 섹션에 표시됩니다.
Spring MVC DispatcherServlet을 프론트 컨트롤러로 사용
웹 애플리케이션에 Spring MVC 프레임워크를 추가해야합니다. 이를 위해 아래에 표시된대로 web.xml에서 DispatcherServlet
을 구성해야합니다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>spring-mvc-example</display-name>
<!-- Add Spring MVC DispatcherServlet as front controller -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
contextConfigLocation
init-param은 스프링 빈 구성 파일의 위치를 제공하는 데 사용됩니다.
Spring MVC 예제 빈 구성 파일
다음 단계는 아래에 표시된대로 스프링 빈 구성 파일 spring-servlet.xml
을 만드는 것입니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="https://www.springframework.org/schema/mvc"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:beans="https://www.springframework.org/schema/beans"
xmlns:context="https://www.springframework.org/schema/context"
xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing
infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<context:component-scan base-package="com.journaldev.spring" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources
in the /WEB-INF/views directory -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
</beans:beans>
세 가지 중요한 구성이 있습니다.
annotation-driven
은@Controller
어노테이션을 사용하여 Controller 클래스를 찾도록 DispatcherServlet에게 알려줍니다.context:component-scan
은 DispatcherServlet에게 컨트롤러 클래스를 찾을 위치를 알려줍니다.InternalResourceViewResolver
빈 구성을 사용하여 뷰 페이지의 위치와 사용되는 접미사를 지정합니다. 컨트롤러 클래스 메서드는 뷰 페이지의 이름을 반환하고 그런 다음 응답을 렌더링하는 데 사용할 뷰 페이지를 결정하기 위해 접미사가 추가됩니다.
Spring MVC 컨트롤러 클래스
두 개의 URI에 대해 응답하기 위해 하나의 컨트롤러 클래스를 사용합니다 – 홈 페이지에 대한 ” / ” 및 사용자 페이지에 대한 ” /user “.
package com.journaldev.spring.controller;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.journaldev.spring.model.User;
@Controller
public class HomeController {
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
System.out.println("Home Page Requested, locale = " + locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate);
return "home";
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public String user(@Validated User user, Model model) {
System.out.println("User Page Requested");
model.addAttribute("userName", user.getUserName());
return "user";
}
}
간단함을 위해 log4j와 같은 로깅 프레임워크를 사용하지 않았습니다.
Spring MVC 모델 클래스
하나의 변수와 해당 getter-setter 메서드를 가진 간단한 모델 클래스가 있습니다. 이것은 간단한 POJO 클래스입니다.
package com.journaldev.spring.model;
public class User {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
Spring MVC 뷰 페이지
아래에 정의된 두 개의 뷰 페이지가 있습니다. home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<P>The time on the server is ${serverTime}.</p>
<form action="user" method="post">
<input type="text" name="userName"><br> <input
type="submit" value="Login">
</form>
</body>
</html>
user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Home Page</title>
</head>
<body>
<h3>Hi ${userName}</h3>
</body>
</html>
Spring MVC는 폼 변수를 모델 클래스 변수에 매핑하는 작업을 처리합니다. 그래서 두 곳에 동일한 변수 이름을 가지고 있습니다. 이제 우리의 Spring MVC 예제 프로젝트를 배포하고 테스트할 준비가 되었습니다.
Spring MVC Eclipse 프로젝트 배포
우리는 Eclipse의 WAR 파일로 내보내기 옵션을 사용하여 실행 중인 Tomcat 서버의 webapps 디렉토리에 직접 배포할 수 있습니다. 그러나 프로젝트를 빌드한 다음 좋아하는 서블릿 컨테이너 배포 디렉토리로 복사하는 명령 줄을 사용할 수도 있습니다.
Spring MVC 예제 테스트
한 번 Spring MVC 프로젝트가 배포되면 홈 페이지에 https://localhost:8080/spring-mvc-example/
에서 액세스할 수 있습니다. 톰캣 포트 및 컨텍스트 루트를 변경하세요.
이것이 Spring MVC 예제에 대한 모든 내용입니다. 가능한 간단하게 유지하려고 노력했습니다. 그럼에도 불구하고 문제가 발생하면 댓글을 통해 알려주시면 도움을 드리겠습니다. 최종 Spring MVC 예제 프로젝트는 아래 링크에서 다운로드할 수 있습니다.
참고: 공식 페이지
Source:
https://www.digitalocean.com/community/tutorials/spring-mvc-example