ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC 세팅 - xml 설정
    Spring/초기 설정 2021. 12. 25. 00:26
    반응형

     

    Dispatchersevlet

     servlet/jsp로 인한 요청은 Apache에서 기본적으로 제공했던 DispatcherServlet을 사용했는데 Spring MVC에서는 Spring에서 제공하는 DispatcherServlet으로 변경하는 것부터 시작한다.

     

     

     

    방법1 - web.xml 설정

    servlet/jsp에서 설정된 DefaultServlet부터 설정 변경

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="4.0"
    	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                       
    			    http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
    
    	<!-- 현재 웹 애플리케이션에서 받아들이는 모든 요청에 대해 appServlet이라는 이름으로 정의되어 있는 서블릿을 사용하겠다. -->
    	<servlet-mapping>
    		<servlet-name>appServlet</servlet-name>
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    	<!-- 요청 정보를 분석해서 컨트롤러를 선택하는 서블릿을 지정한다. -->
    	<servlet>
    		<servlet-name>appServlet</servlet-name>
    		<!-- Spring MVC에서 제공하고 있는 기본 서블릿을 지정한다. -->
    		 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    
    </web-app>

     이러한 이 설정을 넣어주면 같은 경로에 appServlet-servlet.xml파일이 필요하다. appServlet-servlet.xml 은 Spring MVC를 설정하는 파일이다. 즉, bean을 정의, 세팅한다던지, Mapping 하는 파일이다.

     appServlet-servlet.xml에 모든 설정을 다 넣기에는 복잡해지므로 각각의 설정 파일로 나누어 설정하기 위해 

    /WEB-INF/config/ 경로에 저장하겠다. 이 경로로 mapping하기 위해 다시 web.xml 파일을 재설정한다.

    	<servlet-mapping>
    		<servlet-name>appServlet</servlet-name>
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    	<!-- 요청 정보를 분석해서 컨트롤러를 선택하는 서블릿을 지정한다. -->
    	<servlet>
    		<servlet-name>appServlet</servlet-name>
    		<!-- Spring MVC에서 제공하고 있는 기본 서블릿을 지정한다. -->
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<!-- Spring MVC 설정을 위한 xml 파일을 지정한다. -->
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>/WEB-INF/config/servlet-context.xml</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<!-- Bean을 정의할 xml 파일을 지정한다. -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>/WEB-INF/config/root-context.xml</param-value>
    	</context-param>

    서버가 가동이 되면 설정 파일들(sevlet-context.xml, root-context.xml)을 읽어 bean들을 구성

        <!-- 리스너설정 -->
        <listener>
        	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

     

    파라미터 필터 설정

        <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>
        	<init-param>
        		<!-- 강제로 인코딩하겠다 -->
        		<param-name>forceEncoding</param-name>
        		<param-value>true</param-value>
        	</init-param>
        </filter>
        
        <filter-mapping>
        	<filter-name>encodingFilter</filter-name>
        	<url-pattern>/*</url-pattern>
        </filter-mapping>

     


    최종

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="4.0"
    	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                       
    						http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
    
    	<!-- 현재 웹 애플리케이션에서 받아들이는 모든 요청에 대해 appServlet이라는 이름으로 정의되어 있는 서블릿을 사용하겠다. -->
    	<servlet-mapping>
    		<servlet-name>appServlet</servlet-name>
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    	<!-- 요청 정보를 분석해서 컨트롤러를 선택하는 서블릿을 지정한다. -->
    	<servlet>
    		<servlet-name>appServlet</servlet-name>
    		<!-- Spring MVC에서 제공하고 있는 기본 서블릿을 지정한다. -->
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<!-- Spring MVC 설정을 위한 xml 파일을 지정한다. -->
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>/WEB-INF/config/servlet-context.xml</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
        
    	<!-- Bean을 정의할 xml 파일을 지정한다. -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>/WEB-INF/config/root-context.xml</param-value>
    	</context-param>
        
    	<!-- 리스너설정 -->
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
        
    	<!-- 파라미터 인코딩 필터 설정 -->
    	<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>
    		<init-param>
    			<param-name>forceEncoding</param-name>
    			<param-value>true</param-value>
    		</init-param>
    	</filter>
        
    	<filter-mapping>
    		<filter-name>encodingFilter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    </web-app>

    자 이제 servlet-context.xml와  root-context.xml의 초기 셋팅을 해보자.

     

    root-context.xml 은 bean을 정의하는 파일이다

     

    root-context.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">
    	   					   
    </beans>

     

    servlet-context.xml

     

    <?xml version="1.0" encoding="UTF-8"?>
    <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
    		 	         http://www.springframework.org/schema/mvc/spring-mvc.xsd
    		 	         http://www.springframework.org/schema/beans
    		 	         http://www.springframework.org/schema/beans/spring-beans.xsd
    		 	         http://www.springframework.org/schema/context
    		 	         http://www.springframework.org/schema/context/spring-context.xsd">
    			 					 
    	<!-- 스캔한 패지키 내부의 클래스 중 Controller 어노테이션을 가지고 있는 클래스들을 Controller로 로딩하도록 한다 -->
    	<annotation-driven/>
    	
    	<!-- 스캔할 bean들이 모여있는 패키지를 지정한다. -->
    	<context:component-scan base-package="kr.co.softcampus.controller"/>
    	
    	<!-- Controller의 메서드에서 반환하는 문자열 앞 뒤에 붙힐 경로 정보를 셋팅한다. -->
    	<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>
    	
    	<!-- 정적파일(이미지, 사운드, 동영상, JS, CSS 등등) 경로 셋팅 -->
    	<resources mapping="/**" location="/resources/"/>
    	
    			 
    </beans:beans>

     


    이제 Controller를 만들어 보자

     

    @Controller
    public class HomeController {
    	
    	@RequestMapping(value = "/", method = RequestMethod.GET)
    	public String home() {
    		System.out.println("home");
    		return "index";
    	}
    	
    }

     

    반응형

    댓글

Designed by Tistory.