반응형
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 해준 뒤 메소드 추가하고 저장만 하면 자동으로 초기화됨 - 콘솔에서 확인 가능
반응형
'framework > spring mvc' 카테고리의 다른 글
[springMVC] 6. Front Controller에 의해 JSP 문서로 포워드 이동하여 응답되도록 뷰이름을 제공하는 방법 @RequestMapping (0) | 2024.08.04 |
---|---|
[springMVC] 5. 어노테이션 기반의 SPRING MVC (servlet-context.xml 설정, log4j.xml 수정) (0) | 2024.08.03 |
[springMVC] 4. 스키마 기반의 SPRING MVC (0) | 2024.08.03 |
[springMVC] 2. Spring의 MVC 패턴 동작의 이해를 위한 MVC 프레임워크 직접 구현 (0) | 2024.08.02 |
[springMVC] 1. MVC 아키텍쳐의 개념 (0) | 2024.08.02 |