web.xml이란?
ServletContext의 초기 파라미터
외부에서 성에 접근을 합니다. 초기 파라미터는 암구호화 같습니다. 그러면 서블릿 안에서 암구호만 대면 모든 것을 사용할 수 있겠죠. 문지기는 web.xml으로 암구호를 관리합니다.
Session의 유효시간 설정
Sesstion: 인증을 통해 들어오는것
그럼 인증을 어떻게 할 까요? 웹에서는 공인인증서를 사용할 것입니다.
문지기에게 채류시간을 받고 돌아다니다가 체류기간이 끝나면 추방당해야 합니다. 그런데 여행자가 문지기에게 '채류기간좀 늘려주세요' 부탁하면 문지기가 체류기간을 초기화 시켜줍니다.(밀입국한 사람은 추방당할 것입니다.)
Servlet/JSP에 대한 정의, 매핑
매핑: 여행자는 나라의 목적지가 있을 것입니다. 문지기는 여행자의 앞에 붙어있는 목적지를 보고 친절하게 목적지 주소를 알려줍니다. 문지기는 web.xml 파일에 목적지를 가지고 있습니다.
Mime Type 매핑
Mime Type: 니가 들고올 데이터 타입이 뭐냐?
만약 아무것도 안들고 온 애들도 있을 것입니다.(GET방식)으로 뭔가 가져갈려고 온거겠지요(select 하려고)
문지기가 Mime Type을 알아야 나라에 물건을 들여보낼지 말지를 결정합니다. 만약 들여보낸다고 하면 이상한게 없는지 확인을 해야할 것입니다.
ex) 쌀들고 와서 쌀창고에 넣습니다. 그리고 쌀을 가공해야겠지요 이 때 Mime type 은 쌀입니다.
만약 Mime Type을 속여서 물이라고 하면 물창고로 가게되는데 그러면 쌀을 가공할 수가 없습니다.(고장)
Welcome File list
문지기가 목적도 없고 데이터도 없는 관광객은 Welcome File list에 보냅니다.
Error Pages 처리
관광객이 이상한 주소를 들고오면 문지가 곤란할 것입니다. 그래서 모두 애러페이지에 보내게 됩니다.
리스터/필터 설정
필터: 관광객의 신분을 확인하는 것
만약 총을 들고온 관광객이면 총을 뺏고 들여보내주는 역할도 합니다.
리스너: 새로운 문지기 역할을 합니다. 그런대 web.xml에 적힌 내용을 하지 않지만 특별한 목적을 가지고 관광객을 감시합니다.(특별 감시인)
보안
현상수배범, 불법체류자 등등을 처리합니다.
이 모든 기능을 web.xml에서 합니다. 초반에 적용되죠
Front Controller 패턴
Servlet/JSP 매핑하는 것을 web.xml에 해놓으면 너무 많아집니다. 그래서 request가 들어오면 FrontController에 넘깁니다.
ex) web.xml에 만약 .do라는 주소가 오면 FrontController에 보내자고 약속을 합니다.
톰켓은 request, response 자동으로 객체를 만듭니다.
request: 나한태 들어온 모든 요청
response: 응답해줘야 하는 객체
웹 서버 내부에서 FrontController안에 들어온 파일(a.do라는 파일)이 내부에 자원을 다시 한번 request합니다. 톰켓이 처음에 자동으로 만들어놓은 request는 필요 없어지고 request를 새로 만들어야 겠지요.
그러면 기존에 request를 유지하는 방법이 필요한데 requestDispatcher를 사용하는 것입니다.
ReqeustDispatcher: 필요한 클래스 요청이 도달했을 떄 FrontController에 도착한 request와 response를 그대로 유지시켜줍니다.
언제 많이 쓰는가?
페이지간 데이터 이동할 때, a.html -> b.html로 이동할 때 b.html를 얻으려고 새로운 (reqeust,response)를 보낼 것입니다. b.html에서 a.html에서 쓰인 request를 유지시켜면 a.html의 데이터를 b.html에서 쓸 수 있습니다. request를 유지시킨다는게 중요한거죠
DispatchServlet: 스프링에서 FrontController 패턴 + reqeustDispatcher를 합친 기능입니다.
DispatchSevlet이 자동생성되어 질 때 수 많은 객체가 생성(Ioc)된다. 보통 필터들이다. 해당 필터들은 내가 직접 등록할 수 도 있고 기본적으로 필요한 필터들은 자동 등록 되어진다.
'JAVA > - Spring' 카테고리의 다른 글
spring에서 간단하게 api 만들어 보기 (0) | 2022.03.07 |
---|---|
스프링 컨테이너, ApplicationContext, Bean Factory (0) | 2022.01.05 |
소켓 통신, 아파치, 톰켓, 서블릿 (0) | 2022.01.03 |
JPA의 컴포지션, http 간략히 설명 (0) | 2022.01.02 |
JPA는 ORM, 반복적인 CRUD 작업을 생략, 영속성 컨텍스트가짐, DB와 OOP의 불일치성을 해결하기 위한 방법론 제공 (0) | 2022.01.01 |