Notice
Recent Posts
Recent Comments
Link
04-27 00:53
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

<<개발일지>>

web.xml 원리 -작성중- 본문

카테고리 없음

web.xml 원리 -작성중-

개발하는지호 2024. 7. 12. 14:59
아 그러면 결국이거네 was를 실행시키면 필터 객체가 만들어 지고 각 필드 값이 web.xml에 의해 초기화 되며, 그 다음 클라이언트가 요청을 하면 dofilter가 작동하는 원리네
 
ChatGPT

네, 정확합니다. WAS를 실행시키면 필터 객체가 생성되고, web.xml에 정의된 초기화 매개변수들에 의해 필터 객체의 필드 값들이 초기화됩니다. 그런 다음, 클라이언트가 요청을 보내면 필터의 doFilter 메서드가 작동하여 요청을 처리합니다. 이 과정을 단계별로 다시 정리해 보겠습니다.

단계별 동작 과정

  1. WAS 시작:
    • WAS(Web Application Server)가 시작될 때, web.xml 파일을 읽어 필터와 서블릿 등의 설정을 로드합니다.
  2. 필터 객체 생성 및 초기화:
    • web.xml에서 정의된 필터 클래스를 찾아 인스턴스화합니다.
    • 필터 객체의 init 메서드를 호출하여 초기화 작업을 수행합니다. 이때 FilterConfig 객체를 통해 web.xml에 정의된 초기화 매개변수들을 읽어 필드 값으로 설정합니다.
    java
    코드 복사
    @Override public void init(FilterConfig filterConfig) throws ServletException { // 초기화 매개변수 읽기 bypassWebserverConstantPath = filterConfig.getInitParameter("evfw_bypass_webserver_constant_path"); }
  3. 클라이언트 요청:
    • 클라이언트가 특정 URL로 요청을 보냅니다. 예를 들어, /data/login.do URL로 요청을 보낼 수 있습니다.
  4. 요청 처리:
    • WAS는 요청을 수신하고, web.xml에 정의된 URL 패턴과 매칭되는 필터를 찾습니다.
    • 매칭되는 필터가 있으면, 해당 필터의 doFilter 메서드를 호출하여 요청을 처리합니다.
    java
    코드 복사
    @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; String requestPath = httpRequest.getRequestURI(); // 특정 경로에 대한 우회 처리 로직 if (requestPath.equals(bypassWebserverConstantPath)) { chain.doFilter(request, response); } else { // 다른 경로에 대한 일반 필터링 로직 chain.doFilter(request, response); } }
  5. 필터 체인 처리:
    • 요청이 필터 체인을 따라가며 각 필터의 doFilter 메서드가 순차적으로 호출됩니다.
    • 각 필터는 필요한 작업(로그 작성, 요청 변환, 인증/인가 처리 등)을 수행한 후 chain.doFilter를 호출하여 다음 필터로 요청을 전달합니다.
  6. 서블릿 처리:
    • 모든 필터를 거친 후, 최종적으로 서블릿이 요청을 처리합니다.
    • 서블릿의 응답은 다시 필터 체인을 따라 클라이언트에게 반환됩니다.

요약

  • WAS 시작 시:
    • web.xml 파일을 읽고 필터 객체를 생성 및 초기화합니다.
    • 필터 객체의 init 메서드를 호출하여 초기화 매개변수를 설정합니다.
  • 클라이언트 요청 시:
    • 클라이언트의 요청을 수신하고, URL 패턴에 매칭되는 필터를 찾습니다.
    • 해당 필터의 doFilter 메서드를 호출하여 요청을 처리합니다.
    • 필터 체인을 따라 요청이 전달되며, 각 필터가 순차적으로 실행됩니다.
    • 최종적으로 서블릿이 요청을 처리하고, 응답을 반환합니다.

이와 같은 과정으로 필터는 클라이언트의 요청을 처리하며, 특정 경로에 대한 우회 처리나 일반적인 필터링 로직을 적용할 수 있습니다.

 
 
4o
아 결국 was를 실행하면 자바 코드를 객체화 시키구나
 
ChatGPT

네, 정확합니다. WAS(Web Application Server)를 실행하면, 다음과 같은 일련의 과정이 진행됩니다. 이를 통해 자바 코드를 객체화하고, 설정된 필터와 서블릿 등을 메모리에 로드하여 클라이언트 요청을 처리할 준비를 합니다.

자세한 과정

  1. WAS 시작:
    • WAS가 시작되면, web.xml 파일과 기타 설정 파일들을 읽어들입니다.
  2. 필터 및 서블릿 정의 로드:
    • web.xml 파일에서 정의된 필터, 서블릿, 리스너 등을 읽고, 해당 클래스들을 인스턴스화할 준비를 합니다.
  3. 클래스 로딩 및 객체화:
    • WAS의 클래스 로더가 JAR 파일, 클래스 파일 등을 로드합니다.
    • 각 필터와 서블릿 클래스가 인스턴스화(객체화)됩니다. 이는 자바의 new 키워드를 사용하여 클래스의 인스턴스를 생성하는 것과 유사합니다.
  4. 초기화 메서드 호출:
    • 각 필터와 서블릿의 init 메서드가 호출됩니다. 이때 초기화 매개변수 등이 설정됩니다.
    • 필터의 경우, FilterConfig 객체를 통해 초기화 매개변수를 읽어 필드 값으로 설정합니다.
    • 서블릿의 경우, ServletConfig 객체를 통해 초기화 매개변수를 읽어 필드 값으로 설정합니다.

필터 초기화 예제

web.xml 설정

xml
코드 복사
<web-app> <filter> <filter-name>EversafeForWebFilter</filter-name> <filter-class>kr.co.everspin.websolution.filter.EversafeForWebFilter</filter-class> <init-param> <param-name>evfw_bypass_webserver_constant_path</param-name> <param-value>/data/login.do</param-value> </init-param> </filter> <filter-mapping> <filter-name>EversafeForWebFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>

필터 클래스

java
코드 복사
package kr.co.everspin.websolution.filter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import java.io.IOException; public class EversafeForWebFilter implements Filter { private String bypassWebserverConstantPath; @Override public void init(FilterConfig filterConfig) throws ServletException { // web.xml에서 정의된 초기화 매개변수를 읽어옵니다. bypassWebserverConstantPath = filterConfig.getInitParameter("evfw_bypass_webserver_constant_path"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; String requestPath = httpRequest.getRequestURI(); if (requestPath.equals(bypassWebserverConstantPath)) { // 특정 경로에 대한 우회 처리 로직 chain.doFilter(request, response); } else { // 다른 경로에 대한 일반 필터링 로직 chain.doFilter(request, response); } } @Override public void destroy() { } }

요청 처리 흐름

  1. 클라이언트 요청:
    • 클라이언트가 /data/login.do와 같은 URL로 요청을 보냅니다.
  2. WAS 요청 수신:
    • WAS는 요청을 수신하고, web.xml 파일에서 해당 요청에 매핑된 필터를 확인합니다.
  3. 필터 실행:
    • 매칭된 필터의 doFilter 메서드를 호출하여 요청을 처리합니다.
    • 필터는 특정 로직을 수행한 후, chain.doFilter를 호출하여 다음 필터 또는 서블릿으로 요청을 전달합니다.
  4. 서블릿 실행:
    • 모든 필터를 거친 후, 최종적으로 서블릿이 요청을 처리합니다.
    • 서블릿은 요청에 대한 응답을 생성하고, 이를 클라이언트에게 반환합니다.

요약

  • WAS 시작 시: WAS가 시작되면 web.xml 파일을 읽고, 정의된 필터와 서블릿 클래스를 인스턴스화합니다.
  • 필터 및 서블릿 초기화: 각 필터와 서블릿의 init 메서드를 호출하여 초기화 작업을 수행합니다.
  • 클라이언트 요청 처리: 클라이언트의 요청이 들어오면, 매핑된 필터와 서블릿이 순차적으로 요청을 처리합니다.
  • 필터링 로직 적용: 각 필터는 doFilter 메서드에서 요청을 처리하고, chain.doFilter를 호출하여 다음 필터 또는 서블릿으로 요청을 전달합니다.

이 과정에서 WAS는 자바 코드를 객체화하여 메모리에 로드하고, 설정된 대로 요청을 처리할 준비를 합니다. 필터와 서블릿은 이러한 요청을 처리하기 위해 정의된 순서와 로직에 따라 동작합니다.