새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
TIL) 예외가 발생되면 was는 새 객체를 만들까
📌 2025-04-03 TIL
오늘의 학습 주제
- 필터는 예외가 발생하면 새 요청과 새 응답을 만들까
학습 내용
예외가 발생하면 was는 DispatcherType을 REQUEST를 ERROR로 변경한다.
이때 was는 new Request() 와 new Response()를 만들까?
만들지 않습니다.
처음 사용자의 요청으로 만든 클래스는 RequestFacade@4f40aa66
입니다.
// org.apache.catalina.connector.RequestFacade@4f40aa66
WAS에서 예외가 발생하면 기존 RequestFacade
를 매핑합니다.
class ApplicationHttpRequest extends HttpServletRequestWrapped
기존 정보를 감싸고 있는 구조 이므로 기존 정보를 조회하려면 꺼내야 합니다
if (httpRequest.getDispatcherType() == DispatcherType.ERROR){
HttpServletRequestWrapper httpRequest1 = (HttpServletRequestWrapper)httpRequest;
ServletRequest request1 = httpRequest1.getRequest();
Object count1 = request1.getAttribute("count");
log.info("내가 찾는 것 ={}", request1);
log.info("count1={}", count1);
}
그러면 조회가 가능합니다.
그런데 왜 getAttribue()
를 호출하면 원본 객체의 attribute 에서 예외가 발생된 지금이나 기타 사항을 확인할 있습니다.
서로 원본 객체가 다르다.
DispatcherType == ‘REQUEST’ 일 때에 getAttribue()는 사용자 요청의 실제 객체입니다.
DispatcherType == ‘ERROR’ 일 때에 getAttribue()는 래퍼 객체를 감싸고 있습니다.
즉, ApplicationHttpRequest(RequestFacade(Request))
구조라고 생각하시면 됩니다.
댓글남기기