본문 바로가기

웹 개발/Spring

[Spring] @RequestMapping 애노테이션으로 뷰페이지 매핑하기

스프링으로 JSP 뷰 페이지 열기

@RequestMapping 애노테이션을 사용해 매핑을 해보자

 

 

◆전체 패키지 및 파일 구조

  • pom.xml : 스프링 프로젝트 바로 아래
  • web.xml : WEB-INF 폴더
  • xml 파일 : src/main/resources
  • java 파일 :src/main/java 

 

 

pom.xml

jsp 뷰 페이지를 띄울 수 있도록 <dependency> 코드를 작성한다.

<?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
						https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>sp4</groupId>
	<artifactId>springTest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	
	<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.1.0</version>
			<scope>provided</scope>
		</dependency>		
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.1.6.RELEASE</version>
		</dependency>	
	</dependencies>
	
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
					<encoding>utf-8</encoding>
			        <failOnMissingWebXml>true</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>	
</project>

 

 

 

spring-mvc.xml

뷰 페이지를 주소를 지정하는 설정파일

<?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/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/mvc
						http://www.springframework.org/schema/mvc/spring-mvc.xsd">
	<!-- 뷰페이지 등록 -->
	<mvc:view-resolvers>
		<mvc:jsp prefix="/WEB-INF/view/"/>
	</mvc:view-resolvers>		
</beans>

 

 

 

spring-controller.xml

뷰를 매핑하는 컨트롤러(자바파일)를 지정하는 설정파일

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd">
						
	<!-- 컨트롤러 등록 -->						
	<bean class="test01.HelloController" />			
</beans>

 

 

 

 

HelloController.java

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

@Controller
public class HelloController {
	@RequestMapping("/hello")
	public String hello(Model model, @RequestParam(value = "name", required = false) String name) {
		model.addAttribute("helloWorld", "NAME = [" + name + "]");
		return "hello";
	}	
}

 

@Controller : 컨트롤러 애노테이션을 적어 스프링이 관리하도록 지정

@RequestMapping : 요청처리할 주소값 지정. 예를들어, hello 라는 값으로 들어온 요청을 처리한다.

Model : 컨트롤러의 처리결과를 뷰에 전달하기 위한 객체

@RequestParam : http 파라미터로 들어온 값을 처리하도록 지정

  • value : 파라미터 명
  • required : 필수여부 지정 (true/false)

String name : 그냥 변수

.addAttribute : 모델(뷰에 전달할 객체)에 다음 내용을 추가하기

  • 1 : "helloWorld" 라는 이름으로
  • 2 : "NAME = [" + name + "]" 내용 추가

return "hello" : 뷰 페이지 중에 hello 라는 페이지를 찾는다.

(아래에 작성하게 될 hello.jsp 에 model을 전달한다는 의미)

 

 

web.xml

스프링을 위한 설정파일

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"  
		xmlns:xsi="https://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">

	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>
				classpath:spring-mvc.xml
				classpath:spring-controller.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>

 

<servlet> : dispatcher 라는 서블릿을 등록하면서, 해당 서블릿이 필요로 하는 spring-mvc.xml 과 spring-controller.xml 설정을 추가해준다.

<filter> : 특정 url로 요청이 들어오는 경우 적용될 필터를 설정한다. 위 코드의 경우 모든 요청(/*)에 대해 UTF-8 인코딩을 적용하도록 설정했다.

 

 

 

 

 

hello.jsp

처리된 요청을 보여주는 뷰

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
	<h1>${helloWorld}</h1>
</body>
</html>

${ } 태그를 사용해 helloWorld 안에 들어간 값을 가져온다.

 

 

 

서버를 가동해 다음과 같은 주소 요청을 보내면 결과를 확인할 수 있다.

 

 

name 파라미터에 아무런 값을 지정하지 않았기 때문에 null 이 나온다.

파라미터에 값을 지정해 주소를 요청하면 다음과 같은 결과를 확인할 수 있다.