Spring MVC 실습
- .프로젝트 디렉토리를 생성한다.
- 프로젝트 디렉토리에서 다음의 세 디렉토리를 생성한다.
- 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>
'Spring > [실습] Spring FrameWork' 카테고리의 다른 글
Spring MVC FrameWork - DispatcherServlet, HandlerMapping, HanddlerAdapter, ViewResolver 구현 (0) | 2021.03.03 |
---|---|
Spring FrameWork - 톰캣 설정 (0) | 2021.03.03 |
Spring FrameWork 개념 - 초기 설정(pom.xml) (0) | 2021.03.02 |
Spring FrameWork 개념 - MVC 설명 (0) | 2021.03.02 |
Spring FrameWork 개념 - 디렉토리 설명 (0) | 2021.03.02 |