티스토리 뷰

요청 사항에 대한 Controller를 반환하기 위한 HandlerMapping을 수행하기 위해서는 해당 역할을 수행하는 xml문서를 따로 작성해야 한다. 

 

그 방법은 다음과 같다.


우선 간단한 게시판 예제를 따라 진행할 것이기 때문에, board-servlet.xml 으로 xml 문서를 새로 생성한다.

 

HandlerMapping은 Beans로 정보를 전달하면서 실행되기 때문에 반드시 전체 내용은 beans 태그로 묶어야 한다.

 

이후 beans 내부에 spring 을 사용하기 위한 패키지 주소를 작성해준다.

<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">
</beans>

또한 작업에 필요한 객체 생성 및 클래스 등록도 마찬가지로 beans를 사용하여 작성한다.

클래스 등록 방법은 다음과 같다.

 

 1. 해당 xml문서에서 사용할 클래스(dao) 등록

<?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 id = "객체명" class = "패키지명.클래스"> </bean>
	
</beans>

============================= 예시: board.dao.BoardDAO ================================

<?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 id = "BoardDAO" class = "board.dao.BoardDAO"> </bean>
	
</beans>

 

 2. 컨트롤러 클래스 등록 (전달 받는 데이터가 없는 경우)

<?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 name = "요청 사항 (url)" class = "요청 사항 처리 클래스">
		<property name = "해당 클래스의 맴버 변수명">
			<ref bean = "변수에 전달할 값(객체)" />
		</property>
	</bean>
	
</beans>

======== 예시: board.controller.ListActionController, 내부에 BoardDAO dao 가 존재 ======================
======== 요청 사항 : list.do 일 경우 ===================================================================

<?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 name = "/list.do" class = "board.controller.ListActionController">
		<property name = "dao">
			<ref bean = "boardDAO" />
		</property>
	</bean>
	
</beans>

 

 3. viewResolver 클래스 등록 방법

<?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 name = "객체명" class = "스프링이 제공하는 InternalResolverViewResolver">
		<property name = "viewClass" value = "스프링이 제공하는 InternalResourceView"></property>
		<property name = "prefix" value = "경로" ></property>
		<property name = "suffix" value = "구체적인 내용(확장자)" ></property>
	</bean>
	
</beans>

============= 예시: 화면 출력용 jsp 파일들이 WebContent 폴더에 존재할 경우: "list" => list.jsp ==============

<?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 name = "viewResolver" class = "~~~~.~~~~.InternalResolverViewResolver">
		<property name = "viewClass" value = "~~~.~~~.InternalResourceView"></property>
		<property name = "prefix" value = "/" ></property>
		<property name = "suffix" value = ".jsp" ></property>
	</bean>
	
</beans>

요청에 따른 컨트롤러를 정상적으로 반환하기 위해, 첫번째 등록은 반드시 HandlerMapping을 등록해야한다.

<?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 id="defaultHandlerMapping"  class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
	
</beans>

ViewResolver도 반드시 등록해야 한다. 방법은 위에 명시한 것과 동일하다.

 

<?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 id="defaultHandlerMapping"  class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
	
	<!-- viewResolver(위치, 이동할 페이지 지정) -->
	<bean id="viewResolover"  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="viewClass"   value="org.springframework.web.servlet.view.InternalResourceView"/>
	    <property name="prefix" value="/"/>
	    <property name="suffix" value=".jsp"/>
	</bean>
	
	
</beans>

그 외의 컨트롤러는 반드시 해당 클래스를 먼저 생성한 뒤, 등록해야 한다.

 

 

즉, 웹 브라우저의 요청에 대한 전체적인 흐름은 다음과 같다.

 

웹브라우저 요청 => web.xml의 DispatcherServlet => spring(servlet).xml 내의 HandlerMapping 에게 전달 

(이때, 반드시 web.xml에서 요청하는 servlet문서의 이름과 spring(servlet).xml의 이름이 매치가 되어야 Dispatcher에서 자동으로 찾을 수 있다.)

=> HandlerMapping 은 요청을 처리할 수 있는 컨트롤러 반환

=> ~Controller => 요청 사항 처리 후, 결과 값과 출력 파일명을 ModelAndView 객체를 반환

=> 반환 받은 DispatcherServlet은 ViewResolver 에게 전달 => ViewResolver 는 해당 파일의 위치와 확장자를 반환

=> 반환 받은 DispatcherServlet은 해당 위치의 파일을 웹브라우저에게 응답 처리

Comments