Spring

Spring MVC2 DispatcherServlet.xml 설정

Clearing 2022. 9. 21. 10:47
728x90

사용자가 *.do 요청을 하면 web.xml을 읽어 들이는 서블릿 컨테이너에서 서블릿 객체를 생성한다.

이때 web.xml에 등록되어 있던 기존에 내가 만들었던 DS를 스프링 프레임워크에 내장되어 있는 DS로 교체한다.

만약, ClassNotFound 에러 발생시 properties -> Deployment Assembly에 메이븐 디펜던시를 추가하여 해결한다.

	<servlet> // 스프링에 내장되어있는 DispatcherServlet
		<servlet-name>DispatcherServlet(등록할 서블릿의 이름)</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>
	<servlet-mapping> // *.do 요청이 오면 DispatcherServlet로 맵핑
		<servlet-name>DispatcherServlet(등록한 서블릿의 이름)</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

 

스프링 프레임워크의 DS로 교체 후 프로그램 실행 시 FileNotFound 에러가 발생하는데

이는 해당 DS는 [/WEB-INF/DispatcherServlet-servlet.xml]를 참조하기 때문이다.

※ 서블릿 컨테이너는 Spring에서 제공하는 DS 객체를 생성해줄 때에 init()을 자동 실행한다.

    init()이 자동 실행되게 설계된 이유는 스프링 컨테이너가 [/WEB-INF/등록한 서블릿의 이름-servlet.xml]를 참고해서
    POJO인 HM, C, VR 객체 생성을 하기 위해서이다.

 

WEB-INF 하위에 등록한 서블릿의 이름-servlet.xml 파일을 생성한 후 설정을 한다.

필터 클래스의 경우에는 서블릿 종류이기 때문에 web.xml에 설정해야 한다.

	<filter>
		<filter-name>characterEncodingFilter(설정할 필터 이름)</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>characterEncodingFilter(설정한 필터 이름)</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>

 

기존에 작성되어 있던 Controller 클래스들도 마찬가지로 내가 만든 Controller를 implement 한 것들이기 때문에

Spring에서 제공하는 Controller로 교체한다. 스프링 Controller는

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception로 메서드 오버 라이딩을 강제하기 때문에 반환을 ModelAndView(mav라 지칭) 객체로 해줘야 한다.

mav 객체는 멤버 변수로 viewName을 가지고 있기 때문에 setViewName("사용자에게 제공할 경로명")을 통해

경로를 지정해주고 addObject("사용할 이름", 객체명)를 통해 정보를 전달할 수 있다.

 

HandlerMapping 역시 기존에는 내가 만든 DS의 init() 메서드에서 생성하였지만 스프링 컨테이너가

[/WEB-INF/DispatcherServlet-servlet.xml]을 참조하여 HM을 생성할 수 있다.

	<!-- HM 등록 -->
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="키 값1">반환할 객체1</prop>
				<prop key="키 값2">반환할 객체2</prop>
			</props>
		</property>
	</bean>

 

HM을 사용하기 위해선 멤버 변수(의존관계가 존재)에 DI(의존성 주입)을 해주어야 한다.

=> "내가 만든 HM"을 사용하지 않고, "Spring에서 제공하는 HM"으로 등록했기 때문에 
      기존의 클래스 파일을 제거해도 무방하다.

 

board.jsp, main.jsp와 같이 데이터 출력을 필요로 하는 페이지의 경우 브라우저에서 접근할 수 없도록

WEB-INF 하위에 관리할 수도 있다. 이때 ViewResolver를 등록하여 VR을  통해서 화면을 제공한다.

	<!-- ViewResolver 등록 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/" />
		<property name="suffix" value=".jsp" />
	</bean>

 

경로 설정 시 WEB-INF 하위의 데이터가 필요한 페이지 외에는 "redirect: 경로"와 같이 작성한다.

 

 

 

728x90