framework/spring mvc

[springMVC] 3. 웹프로그램으로 만들기 위해 필요한 환경설정파일 (web.xml)

jeri 2024. 8. 2. 22:24
반응형

01. web.xml에서 [서블릿클래스]를 [서블릿웹프로그램]으로 등록

    • 서블릿 클래스를 서블릿 웹프로그램으로 등록하기 위해 web.xml 설정
    • 등록을 해야 DispatcherServlet객체가 service(HttpServletRequest request, HttpServletResponseresponse)메소드 호출 가능함

  • web.xml에는?
    • 서블릿클래스 웹프로그램으로 등록
    • 필터클래스 웹프로그램으로 등록

02. web.xml의 흐름도

    • WAS가 start 될 시에 가장 첫번째로 읽어들이는 파일
    • 하위 엘리먼트는 작성 순서가 있으며, 엘리먼트를 어떻게 작성하느냐에 따라 사용가능한 범위가 달라짐

💖web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="<https://java.sun.com/xml/ns/javaee>"
	xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>"
	xsi:schemaLocation="<http://java.sun.com/xml/ns/javaee> <https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd>">
    
    
    
	<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->

	<!-- context-param : "모든" 웹프로그램의 실행에 필요한 값을 제공하기 위한 엘리먼트 -->
	<!-- => contextConfigLocation 이름으로 스프링 컨테이너(WebApplicationContext 객체)에게
	 Spring Bean Configuration File의 경로를 제공 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!-- 모든 웹프로그램에서 사용할 수 있는 Spring Bean을 등록하기 위한  Spring Bean Configuration File -->
		<!-- => 모든 Front Controller 역할을 하는 웹프로그램에게 필요한 객체를 제공하기 위해 Spring Bean으로 등록 -->
		<param-value>/WEB-INF/spring/root-context.xml</param-value>
	</context-param>
    
 
 
 
 	<!--1. <listener> : WAS start 시 가장먼저 읽어들임-->
	<!-- Creates the Spring Container shared by all Servlets and Filters -->

	<!-- listener : WAS 프로그램이 시작될 때 Listener 클래스를 제공받아 객체로 생성하기 위한 엘리먼트 -->
	<!-- Listener 클래스 : ServletContextListener 인터페이스를 상속받은 자식클래스 -->
	<!-- => contextInitialized 메소드 : Listener 객체 생성 후 자동 호출되는 메소드 - 초기화 작업 -->
	<!-- => contextDestroyed 메소드 : Listener 객체 소멸 전 자동 호출되는 메소드 - 마무리 작업 -->
	<listener>
      
		<!-- listener-class : ServletContextListener 인터페이스를 상속받은 자식클래스를 설정하기 위한 엘리먼트 -->
		<!-- => WAS 프로그램이 시작될 때 ContextLoaderListener 클래스를 객체로 생성하고
		contextInitialized 메소드를 호출하여 초기화 작업 -->
		<!-- ContextLoaderListener 클래스의 contextInitialized 메소드에서 스프링 컨테이너(Spring Container)를
		생성하고 Spring Bean Configuration File를 제공받아 Spring Bean으로 등록된 클래스를 객체로 생성  -->
		<!-- Listener 객체의 메소드에 의해 생성된 스프링 컨테이너(WebApplicationContext 객체)는
		프로젝트에 있는 "모든" 웹자원(서블릿 및 필터)에게 공유되어 사용 가능 - Spring Bean 제공 -->
		<!-- => WebApplicationContext 객체는 기본적으로 src/main/webapp 폴더의 Spring Bean Configuration File
		파일만 제공받아 처리 가능 -->
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
    
    
    
    
    
    <!--2. <filter>-->
	<!-- filter : 필터 클래스를 필터(Filter)로 등록하기 위한 엘리먼트 -->
	<!-- => 필터(Filter) : 웹프로그램에 대한 실행 전과 후에 실행될 명령을 제공 -->
	<filter>
		<!-- filter-name : 필터를 구분하기 위한 식별자를 설정하기 위한 엘리먼트 -->
		<filter-name>encoding filter</filter-name>
		<!-- filter-class : 클라이언트 요청에 의해 객체로 생성되어 실행될 필터 클래스를 설정하기 위한 엘리먼트 -->
		<!-- CharacterEncodingFilter : 리퀘스트 메시지 몸체부의 저장된 값에 대한 문자형태를 변경하기 위한 필터 클래스 -->
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<!-- init-param 엘리먼트를 사용하여 CharacterEncodingFilter 클래스에 의해 변경하고자
		하는 문자형태(캐릭터셋)를 제공 -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>
	
	<!-- filter-mapping : 필터가 실행되기 위한 웹프로그램의 요청 URL 주소의 패턴을 등록하기 위한 엘리먼트 -->
	<filter-mapping>
		<!-- filter-name : 클라이언트 요청에 의해 실행될 필터의 식별자를 설정하기 위한 엘리먼트 -->
		<filter-name>encoding filter</filter-name>
		<!-- url-pattern : 필터가 실행되기 위한 웹프로그램의 요청 URL 주소의 패턴을 설정하기 위한 엘리먼트 -->
		<!-- => 클라이언트와 FrontController 사이에 필터 클래스를 만들어 두어, 요청 전과 후에 필터가 동작되어
		캐릭터 셋이 변경될 것임!! -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>
    
    
    
    
    
	<!--3.<servlet> : 🌈SpringMVC 패턴 동작을 이해하기 위한 서블릿-->
    <!--xyz.itwill09.mvc.DispatcherServlet - mvc -->
    <!--개발자가 직접 만든 DispatcherServlet (프론트컨트롤러) 이용하기 위해 서블릿웹프로그램등록 -->
    <!-- servlet : 서블릿 클래스를 서블릿 웹프로그램으로 등록하기 위한 엘리먼트 -->
	<servlet>
		<!-- servlet-name : 서블릿을 구분하기 위한 식별자를 설정하기 위한 엘리먼트 -->
		<servlet-name>mvc</servlet-name>
		<!-- servlet-class : 클라이언트 요청에 의해 객체로 생성되어 실행될 서블릿 클래스를
		설정하기 위한 엘리먼트 -->
		<!-- DispatcherServlet : 컨트롤러(Controller) 역할을 제공하는 클래스 - Front Controller -->
		<servlet-class>xyz.itwill09.mvc.DispatcherServlet</servlet-class>
	</servlet>

	<!-- servlet-mapping : 서블릿을 실행하기 위한 URL 주소의 패턴을 등록하기 위한 엘리먼트 -->
	<servlet-mapping>
		<!-- servlet-name : 클라이언트 요청에 의해 실행될 서블릿의 식별자를 설정하기 위한 엘리먼트 -->
		<servlet-name>mvc</servlet-name>
		<!-- url-pattern : 서블릿을 실행하기 위한 URL 주소의 패턴을 설정하기 위한 엘리먼트 -->
		<!-- => Front Controller 역할을 제공하는 서블릿은 클라이언트의 모든 처리되도록 설정 -->
		<url-pattern>*.itwill</url-pattern>
	</servlet-mapping>
    
    
    
    
    
    <!--4.<servlet> : 🌈스키마기반의 SpringMVC 이용하기 위한 서블릿-->
    <!--org.springframework.web.servlet.DispatcherServlet - springMvc-->
    <servlet>
		<servlet-name>springMvc</servlet-name>
		<!-- Spring Framework의 라이브러리에 의해 제공되는 DispatcherServlet 클래스 사용 - Front Controller -->
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      
		<!-- init-param : "서블릿 클래스"의 실행에 필요한 값을 제공하기 위한 엘리먼트 -->
		<!-- => contextConfigLocation 이름으로 스프링 컨테이너(WebApplicationContext 객체)에게 제공될 Spring Bean Configuration File의 경로를 제공 -->
  		<!-- => 웹자원을 구성하는 최상위 디렉토리 : webapp -->
  		<!-- => 즉, src/main/java 또는 src/main/resources 에는 접근하지 못함 -->
		<!-- => "현재 설정된 Front Controller 역할의 객체"에게만 제공한 Spring Bean을 등록하기 위한 Spring Bean Configuration File -->
		<!-- => Spring Bean Configuration File은 [엔터] 또는 [,] 또는 [;]으로 구분하여 여러개 제공 가능 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>
				<!-- 이 파일들을 읽어들여서 Spring Bean으로 등록시켜줘!!  -->
				/WEB-INF/spring/springMvc/mvc-context1.xml
				/WEB-INF/spring/springMvc/mvc-context2.xml
			</param-value>
		</init-param>
		<!-- load-on-startup : WAS 프로그램이 시작될 때 서블릿 클래스를 미리 객체로 생성하기 위한 엘리먼트 -->
		<!-- => 클라이언트가 서블릿(Front Controller)를 요청하지 않아도 미리 객체 생성 -->
		<!-- => 엘리먼트 내용으로 설정된 정수값이 작을수록 먼저 서블릿 객체로 생성 -->
		<load-on-startup>0</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>springMvc</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
    
    
    
    
	<!--5.<servlet> : 🌈어노테이션기반의 SpringMVC 이용하기 위한 서블릿-->
    <!--org.springframework.web.servlet.DispatcherServlet - appServlet-->
    <!--Spring Framework의 라이브러리에 의해 제공되는 DispatcherServlet(프론트컨트롤러) 이용하기 위해 서블릿웹프로그램등록-->
	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!-- "스프링 어노테이션"을 검색하는 component-scan 엘리먼트를 사용한 Bean
			Configuration File은 "하나만" 제공 가능 -->
			<param-value>
      	<!-- 이 파일 "하나"를 읽어들여서 Spring Bean으로 등록시켜줘!!  -->
      	/WEB-INF/spring/appServlet/servlet-context.xml
    	</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>appServlet</servlet-name>
		<!-- url-pattern 엘리먼트의 내용을 [/]로 설정한 경우 클라이언트의 모든 프로그램
		요청에 대한 처리가 가능하도록 설정 -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
    
    
</web-app>

 

03. 💖WAS START 시 콘솔 확인

    • web.xml 파일을 변경하면 반드시 server restart 해줘야함!!
    • Controller(Model)을 새롭게 작성하면 반드시 server restart 해줘야함!!
    • 한번 restart 해준 뒤 메소드 추가하고 저장만 하면 자동으로 초기화됨 - 콘솔에서 확인 가능

반응형