한 개의 Controller 당 한 개의 Controller 만 가능하다.
package com.test.pro05.ex01; // 패키지 선언: 해당 클래스가 "com.test.pro05.ex01" 패키지에 속함
import javax.servlet.http.HttpServletRequest; // 클라이언트의 요청 정보를 담고 있는 객체
import javax.servlet.http.HttpServletResponse; // 클라이언트에게 응답을 보내는 객체
import org.springframework.web.servlet.ModelAndView; // 모델과 뷰 정보를 함께 저장하는 객체
import org.springframework.web.servlet.mvc.Controller; // Spring MVC의 기본 컨트롤러 인터페이스
// SimpleUrlController 클래스 선언, Spring MVC의 Controller 인터페이스를 구현함
public class SimpleUrlController implements Controller {
/*
* url-mapping : 특정 URL이 요청되었을 때 이 컨트롤러로 이동하기 위한 설정
* ModelAndView : 모델(데이터)과 뷰(화면)를 함께 관리하는 객체
* Model : 뷰에서 사용할 데이터를 저장하는 역할
* View : 클라이언트에게 보여줄 화면
* 즉, 데이터를 저장하고, 출력할 화면을 지정하는 역할을 함
*/
// handleRequest() 메서드 오버라이딩: 클라이언트의 요청을 처리하는 역할
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
// ModelAndView 객체를 생성하고 "test/index"라는 뷰 이름을 지정하여 반환
// "test/index"는 실제 JSP 파일의 위치를 의미 (보통 WEB-INF/views/test/index.jsp)
return new ModelAndView("test/index");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- Spring의 설정 파일로, Spring MVC 애플리케이션의 DispatcherServlet과 관련된 설정을 정의함 -->
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet의 요청을 처리하는 Spring MVC 환경을 구성하는 설정 -->
<!-- @Controller, @RequestMapping 등의 Spring MVC 어노테이션을 사용할 수 있도록 설정 -->
<annotation-driven />
<!--
/resources/** 로 시작하는 URL 요청이 오면,
/resources/ 디렉토리에서 정적 파일(css, js, images 등)을 제공하도록 설정
-->
<resources mapping="/resources/**" location="/resources/" />
<!--
컨트롤러에서 반환하는 View 이름을 실제 JSP 파일의 위치와 연결하는 ViewResolver 설정
예: "test/index" -> "/WEB-INF/views/test/index.jsp"
-->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- View 파일이 위치하는 기본 경로 설정 -->
<beans:property name="prefix" value="/WEB-INF/views/" />
<!-- View 파일의 확장자 설정 -->
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!--
base-package로 지정한 패키지 및 그 하위 패키지의 클래스에서
@Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스들을
Spring이 자동으로 스캔하고 객체(빈)로 등록하도록 설정
-->
<context:component-scan base-package="com.test.pro05" />
<!-- simpleUrlController 빈 생성 (Controller 인터페이스 구현 클래스) -->
<beans:bean id="simpleUrlController" class="com.test.pro05.ex01.SimpleUrlController" />
<!-- SimpleUrlHandlerMapping을 이용한 URL 매핑 설정 -->
<beans:bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- SimpleUrlHandlerMapping에 URL과 컨트롤러를 매핑하는 속성 설정 -->
<beans:property name="mappings">
<beans:props>
<!-- "/test/index.do" 요청이 들어오면 simpleUrlController로 연결 -->
<beans:prop key="/test/index.do">simpleUrlController</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
</beans:beans>
xmlns="http://www.springframework.org/schema/mvc" : Spring MVC 관련 설정을 위한 네임스페이스
xmlns:beans="http://www.springframework.org/schema/beans" : Spring Bean 관련 설정을 위한 네임스페이스
xmlns:context="http://www.springframework.org/schema/context" : 컴포넌트 스캔을 위한 네임스페이스
@Controller 를 사용 가능하게 설정<annotation-driven />
@Controller , @RequestMapping 등의 Spring MVC 어노테이션을 사용할 수 있도록 설정<resources mapping="/resources/**" location="/resources/" />
/resources/ 아래의 정적 파일(JS, CSS, 이미지 등)을 제공<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>
"test/index" 와 같은 뷰 이름을 반환하면/WEB-INF/views/test/index.jsp 를 찾아 화면을 보여준다.<context:component-scan base-package="com.test.pro05" />
com.test.pro05 패키지 이하의 모든 클래스 중 @Controller , @Service , @Repository 가 붙은 클래스를 자동으로 Bean으로 등록한다.<beans:bean id="simpleUrlController" class="com.test.pro05.ex01.SimpleUrlController" />
<beans:bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<beans:property name="mappings">
<beans:props>
<beans:prop key="/test/index.do">simpleUrlController</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
/test/index.do 요청이 들어오면 simpleUrlController(SimpleUrlController) 로 매핑된다.
요청을 처리한 후 "test/index"라는 뷰 이름을 반환하면/WEB-INF/views/test/index.jsp로 이동하여 화면을 보여준다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>테스트</title>
</head>
<body>
<h1>index.jsp 입니다.</h1>
<p>Hello Springframework</p>
</body>
</html>
