[Spring] servlet-context.xml, application-context.xml, web.xml 설정

Wonjun Seo·2023년 5월 20일
0

web.xml

web.xml은 설정을 위한 설정 파일이다. 즉 최초로 WAS(Web Application Server)가 구동될 때 각종 설정을 정의해준다. 여러 xml 파일을 인식하도록 각 파일을 가리킨다.

application-context.xml과 servlet-context.xml을 어디서 가져올건지 인식해준다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
    id="WebApp_ID" version="5.0">

    <display-name>spring2</display-name>

    <!-- 스프링 컨텍스트 설정 정보들을 저장한 파일의 위치 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/application-context.xml</param-value>
    </context-param>

    <!-- Filter 설정 -->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <!-- Listener 설정 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Servlet 설정 -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


</web-app>
  1. "context-param" 태그를 사용하여 application-context를 설정한다.
  2. "filter" 태그를 사용하여 "UTF-8" 인코딩 타입을 설정하고 CharacterEncodingFilter 클래스를 실행시킨다.
  3. "listener" 태그의 ContextLoaderListener 클래스를 이용하여 contextConfigLocation에 있는 application-context들을 불러온다.
  4. 클라이언트의 요청을 받으면 "servlet" 태그 안에있는 설정들이 작동하면서 servlet-context.xml을 불러옴과 동시에 application-context.xml을 같이 불러온다. 이때 DispatcherServlet 클래스를 실행시킨다.

servlet-context.xml

요청과 관련된 객체를 정의한다! url과 관련된 컨트롤러나 어노테이션, View Resolver 등의 프론트엔드 파일을 설정한다.

  • 이곳에 등록되는 빈은 해당 컨텍스트에서만 사용할 수 있다.
  • DispatcherServlet이 직접 사용하는 컨트롤러를 포함한 웹 관련 빈을 등록하는데 사용한다.
  • 독자적인 컨텍스트를 가지며, root-context내의 빈을 사용할수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="
        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
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
    <!-- Spring MVC 설정들을 애너테이션(annotation) 기반으로 처리 -->
    <mvc:annotation-driven />
    
    <!-- Spring MVC에서 dispatcherServlet이 처리하지 않는 
    정적 요청에 필요한 파일들(image, css, javascript, ...)의 폴더 위치 -->
    <mvc:resources location="/static" mapping="/**" />
    
    <!-- View Resolver: Spring MVC에서 사용하는 뷰(JSP, ...)를 찾기 위한 설정 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
    
    <!-- 특정 패키지 아래에 선언된 컴포넌트 애너테이션(@Controller, @RestController)이
    선언된 클래스들을 bean으로 관리: 
    컨트롤러 클래스들을 작성하는 패키지 이름.
    -->
    <context:component-scan base-package="com.itwill.spring2.web" />
    
</beans>

application-context.xml

servlet-context.xml과는 반대로 view와 관련되지 않은 객체를 정의한다. 따라서 Service, Repository(DAO), DB등 비즈니스 로직과 관련된 백엔드 파일을 설정한다.

  • 이곳에 등록되는 빈은 모든 컨텍스트에서 사용할 수 있다.
  • service나 dao를 포함한, 웹 환경에 독립적인 빈들을 담아둔다.
  • 서로 다른 servlet-context에서 공유해야하는 빈들을 등록해놓고 사용할 수 있다.
  • servlet-context 내의 빈들은 이용이 불가능하다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
    xsi:schemaLocation="
        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
        http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">

    <!-- bean definitions here -->
    <!-- HikariConfig hikariConfig = new HikariConfig(); -->
    <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
        <!-- hikariConfig.setDriverClassName("...") 메서드 호출 -->
        <property name="driverClassName"
            value="oracle.jdbc.OracleDriver" />
        <property name="jdbcUrl"
            value="jdbc:oracle:thin:@localhost:1521:xe" />
        <property name="username" value="scott" />
        <property name="password" value="tiger" />
    </bean>

    <!-- HikariDataSource dataSource = new HikariDataSource(hikariConfig); -->
    <bean id="dataSource"
        class="com.zaxxer.hikari.HikariDataSource">
        <constructor-arg ref="hikariConfig" />
    </bean>

    <!-- SqlSessionFactoryBean 객체: Data Source(Connection Pool)을 이용해서 SQL 
        문장들을 실행하고 결과 처리를 수행하는 객체. -->
    <bean id="sessionFactory"
        class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations"
            value="classpath:/mappers/**/*.xml" />
    </bean>
    
    <!-- MyBatis 프레임워크에서 생성하고 관리하는 bean들을
        base-package와 그 하위 패키지에서 검색함. -->
    <mybatis:scan base-package="com.itwill.spring2.repository"/>

    <!-- Service 애너테이션이 설정된 객체들을 생성하고 관리. -->
    <context:component-scan base-package="com.itwill.spring2.service" />
</beans>

0개의 댓글