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>
- "context-param" 태그를 사용하여 application-context를 설정한다.
- "filter" 태그를 사용하여 "UTF-8" 인코딩 타입을 설정하고 CharacterEncodingFilter 클래스를 실행시킨다.
- "listener" 태그의 ContextLoaderListener 클래스를 이용하여 contextConfigLocation에 있는 application-context들을 불러온다.
- 클라이언트의 요청을 받으면 "servlet" 태그 안에있는 설정들이 작동하면서 servlet-context.xml을 불러옴과 동시에 application-context.xml을 같이 불러온다. 이때 DispatcherServlet 클래스를 실행시킨다.
요청과 관련된 객체를 정의한다! url과 관련된 컨트롤러나 어노테이션, View Resolver 등의 프론트엔드 파일을 설정한다.
<?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>
servlet-context.xml과는 반대로 view와 관련되지 않은 객체를 정의한다. 따라서 Service, Repository(DAO), DB등 비즈니스 로직과 관련된 백엔드 파일을 설정한다.
<?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>