config 파일을 읽어서 서버 환경을 세팅한다.
sever.xml, web.xml....등 을 읽는다. (server.xml을 보면 우리가 만든 spring 프로젝트가 존재한다.)
없을 경우는 바로 다음 config파일을 읽는다.
해당 파일은 WAS에서 알아야할 정보들이 담겨 있다.
(javax.sql.DataSourcer과 같이 미리 JDBC를 세팅할 수 있다. 이렇게 만들어진 것은 커넥션풀링 방식으로 접근한다.)
추가 팁
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
해당 리소스를 100개를 만들어 놓는다
객체 사용 후 반환할 때, 최대 유지되는 객체는 30개이다.
최대 10초 기다려라.
웹 전반의 설정들을 여기서 해준다.
우리가 만든 웹프로젝트는 하나의 어플리케이션이 된다.
ServletContextEvent는 그런 어플리케이션이 start, stop할 때마다 발생한다.
여기 listener는 ServletContextEvent에 추가해주는 것이다.
초기 세팅으로 ContextLoaderListener가 되어 있어서, 어플리케이션이 시작할 때마다
context-param을 읽어서 root-context.xml을 읽게 되는 것이다.
여기에는 웹과 관련이 적은 것들을 설정해주는 파일이다.(서비스, DAO..등을 여기서 설정한다. + AOP)
이부분은 WAS가 만들어질 때, 같이 만들어 진다.
클라이언트가 요청할 때, DispatcherServlet을 가기 전에 거쳐간다. request와 response의 요청을 조작할 수 있다.
이 부분은 웹과 관련이 큰 것들을 설정해주는 파일이다. 사용자가 요청할 때 만들어진다.
해당 설정들은 DispatcherServlet 서블릿이 생성되며, 그 서블릿에 기능을 설정해준다.
(컨트롤러, 뷰리솔버,파일업로드,인터셉터를 여기에서 설정)
resource mapping
(배경 지식) css,js 등은 미리 브라우저에 다 다운 받고 나서,웹 동작을 이어간다.
따라서 mapping이 중요하다.
경로 설정을 할 경우, 여기서 설정한 경로를 탐색한다는 의미이다.
<resources mapping="/assets/**" location="/resources/assets/" />는
/assets/xxx 라는 경로를 읽을 경우, /resources/assets에 xxx가 있는 지 탐색한다.
filter는 DispatcherServlet <-> client
AOP는 Contoller <-> Service
Interceptor는 DispatcherServlet <-> Contoller
connection, ejb, thread 풀링이 있다.
WAS에 javax.sql.DataSourcer를 설정했다면, 메모리에 올라왔을 것이다.
이것을 사용하기 위해서는 파일경로로 읽어올 수 없다. 메모리에 올라와 있기 때문이다.
따라서 JNDI로 읽어야 한다. comp/env 라는 경로에서 찾아야한다.(java라는 프로토콜을 사용한다.)
즉, 해당 값은 java:comp/env/xxxx 로 불러와서 사용한다. (xxx는 name으로 설정해주었을 것이다.)
이것을 DBCP라고 불린다.
DB Connection Pool
DB서버와 미리 연결을 생성해 놓고, DB서버와 통신이 필요할 때 Connection 객체를 빌려 쓰는 것을 의미한다.