web.xml 설정
web.xml에 대한 개념과 설정방법에 대한 페이지
web.xml?
배포서술자라고 불리며 WAS에 의해 어플리케이션이 구동될때 가장 처음으로 읽는 문서이다. 어플리케이션 구동에 필요한 전반적인 정보를 포함하고 있다.
서블릿설정, 필터설정, 리스너설정, 세션타임아웃설정, 에러페이지 설정등 다양한 설정정보를 기술할 수 있다.
web.xml의 태그들

web.xml태그들
web-app태그
web.xml의 기본 시작태그. 기본생성시 2.5버전으로 등록되어있으며 호환되는 Servlet을 이용하기 위해서는version정보를 3.0으로 수정해줘야한다.
톰캣에서 servlet 3버전을 구현했다면 3버전을, 톰캣에서 servlet4버전이상(jakarata)를 구현했다면 servlet4버전으로 변경해줘야 한다.
<?xml version="1.0" encoding="UTF-8"?> <!-- xml형식의 문서에 붙는 시작태그-->
<web-app version="3.0" xmlns="http://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_3_0.xsd">
</web-app>
context-param
웹 어플리케이션(context)에서 사용할 변수를 등록하는 영역이다.
이 곳에 등록된 변수는 어플리케이션 전역에서 사용되며 초기 변수인 contextConfigLocation의 경우 스프링의 ContextLoaderListener에 의해 읽혀져 root-context.xml 파일을 읽는다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
</param-value>
</context-param>
<!-- 필요하다면 여러 변수 추가가능. -->
<context-param>
<param-name>dbInfo</param-name>
<param-value>Mysql</param-value>
</context-param>
// 전역 파람 사용방법
ServletContext context = getServletContext();
String dbUrl = context.getInitParameter("dbInfo"); //Mysql
listener
어플리케이션에 특정 이벤트가 발생했을때 자동으로 호출되는 클래스. 서블릿이 생성/소멸될때 , 세션이 생성/소멸될때, 컨텍스트가 생성/소멸될때등 다양한 이벤트를 감지하는 리스터가 존재한다.
MVC프로젝트 생성시 기본으로 추가되어있는 ContextLoaderListener는 전역객체인 Root ApplicationContext를 생성하는 역할을 한다.
Root ApplicationContext는 Spring의 IOC Container의 역할을 하며, contextConfigLocation에 정의된 root-context.xml파일을 읽어서 bean객체들을 생성한다.
Root ApplicationContext는 전역 서비스용 Bean객체(DB, Service, Repository)를 저장 및 관리한다.
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
servlet - DispatcherServlet
스프링 핵심객체인 DispatcherServlet 등록영역.
DispatcherServler은 클라이언트의 요청을 모두 첫 번째로 받아내는 Servlet으로 Front Controller라고도 불린다.
DispatcherServlet은 Web Application Context를 생성하며 DispacterServlet이 사용하는 단독 IOC Conatiner이다.
웹과 관련된 Bean객체(Controller, ViewResolver)를 저장 및 관리한다.
<servlet>
<init-param>
에서는 Web Application Context에서 사용할 bean객체를 초기화 시키는 servlet-context.xml파일의 경로가 들어가 있다<load-on-startup>
속성은 서버 시작과 동시에 초기화 시킬 서블릿의 순서를 지정하는 속성.
<servlet-mapping>
<url-pattern>/</url-pattern>
는 모든 요청을 서블릿으로 매핑하기 위한 속성으로 "기본 서블릿패턴" 혹은 "기타url 패턴"으로 불린다./
로 설정하게 되면 특정 URL패턴과 일치하지 않는 "나머지" 요청을 해당 서블릿이 처리하게 된다.
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- servlet-name으로 작성한 서블릿명과 동일해야함 -->
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Filter
어플리케이션에 적용할 filter등록 영역.
Filter는 IOC Container와 별개의 객체로, 컨테이너에 의해 관리되지 않는다.
단, 버전에 따라 Bean객체로 등록도 가능하나, 현재 버전에서는 아님.
Spring Container가 관리하는 Bean객체 형태의 Filter 등록은 @WebFilter 혹은 @Configuration + @Bean조합으로 가능하다.
Filter는 DispatcherServlet으로 요청이 전달 되기 전 이를 가로채고 특정 코드를 실행할 수 있는 중간처리기(Middleware)의 역할을 수행한다.
보통 웹 어플리케이션에 추가되는 공통로직,공통작업을 정의하기 위해 사용한다
인코딩설정, 로그인체크필터, 권한체크필터, 로깅 , 캐싱 등
encodingFilter
는 프로젝트에서 사용하는 인코딩작업을 대신 처리해줄 수 있는 필터.
<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>
<!-- filter-name은 filter로 등록한 filter-name과 동일해야한다. -->
<url-pattern>/*</url-pattern>
<!-- 인코딩을 적용할 url패턴 설정 -->
</filter-mapping>
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 요청 전 처리 (전처리)
System.out.println("요청이 들어왔습니다.");
// 다음 필터 or DispatcherServlet으로 넘김
chain.doFilter(request, response);
// 응답 후 처리 (후처리)
System.out.println("응답이 완료되었습니다.");
}
}
Last updated