티스토리 뷰
요청 사항에 대한 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은 해당 위치의 파일을 웹브라우저에게 응답 처리
'[JAVA] > Spring' 카테고리의 다른 글
[Spring] Spring 게시판 예제 마무리 & 구조 정리 (0) | 2021.06.14 |
---|---|
[Spring] 게시판 예제를 통한 Spring 구조 정리 (0) | 2021.06.10 |
[Spring] JNDI 을 이용한 DB 연결하기 (0) | 2021.06.10 |
[Spring] web.xml 문서에 Servlet 등록 (0) | 2021.06.10 |
[Spring] Spring 라이브러리 사용 전 사전 지식 (0) | 2021.06.10 |
- react
- 인천 구월동 이탈리안 맛집
- 맛집
- react-native
- AsyncStorage
- await
- javascript
- 정보보안기사 #실기 #정리
- redux
- 이탈리안 레스토랑
- 파니노구스토
- Async
- Promise
- 인천 구월동 맛집
- redux-thunk
- Total
- Today
- Yesterday