spring web.xml에 param과 listner를 주석처리한 후

index.jsp를 실행하면

아래와 같이 정상 실행이 된다.

그러나 web.xml에서 주석처리했던 param과 listner를 주석해제하면

아래와 같이 404 오류가 발생한다.

그래서 오류를 조금 더 추적해보니 web.xml에서 listner를 주석처리하니 정상 실행이 되었다.

다시 문제의 원일 찾기 위해 주석을 해제하고 console을 확인했다.

확인시 schoolController > schoolDAO > jdbc에 문제가 있었다는 오류를 확인했다.

해당 404 오류는 applicationCotext.xml의 문제이다.

 

코드를 찬찬히 보면서 순서도를 보도록하자

1. 처음 톰캣 서버를 구동하면 web.xml 파일을 로딩하여 서블릿 컨테이너가 구동된다.

2. web.xml은 파일에 등록된 ContextLoaderListner 객체를 생성한다.

3. 그리고 이때 src/main/resource 폴더에 있는 applicationContext.xml 파일을 로딩하여 스프링 컨테이너를 구동한다.

4. 그리고 이때 DAO 객체들이 메모리에 생성된다.

5. 그리고 사용자가 페이지 이동 버튼 등을 클릭하여 .do 요청을 서버에 전달하면 서블릿 컨테이너는 DispatcherServlet 객체를 생성하고 

6. DispatcerServlet 객체는 /WEB-INF/config 폴더에 있는 presentation-layer.xml 파일을 로딩하여 두번째 스프링 컨테이너를 구동한다.

7. 이 두번째 스프링 컨테이너가 Controller 객체를 메모리에 생성한다.

 

그럼 위에 순서도를 참고해서 실제 프로젝트에서 어떻게 작동되는지 확인해보도록하자.

 

1. index.jsp를 실행하면 톰캣 서버가 구동이 된다.

2. 처음 톰캣 서버를 구동하면 web.xml 파일을 로딩하여 서블릿 컨테이너가 구동된다.

3. web.xml은 파일에 등록된 ContextLoaderListner 객체를 생성한다.

(Root 컨테이너)

4. 그리고 이때 src/main/resource 폴더에 있는 applicationContext.xml 파일을 로딩하여 스프링 컨테이너를 구동한다.

5. 그리고 이때 DAO 객체들이 메모리에 생성된다.

6. 그리고 사용자가 페이지 이동 버튼 등을 클릭하여 .do 요청을 서버에 전달하면 서블릿 컨테이너는 DispatcherServlet 객체를 생성하고 

6. DispatcerServlet 객체는 /WEB-INF/config 폴더에 있는 presentation-layer.xml 파일을 로딩하여 두번째 스프링 컨테이너를 구동한다.

(두번째 스프링 컨테이너)

※컨테이너들의 부모 자식관계

 

그럼 다시 원점으로 돌아가서 

왜? applicationContext.xml에서 jdbcTemplate bean 부분을 주석처리하면

아래와 같이 404 오류가 발생하는 것일까?

이 문제는 파일의 경로나 이러한 문제가 아니고

오류가 발생하는 원인은 src/main/resource 폴더에 있는 applicationContext.xml 파일을 로딩하여 스프링 컨테이너를 구동할 때 DAO 객체들이 메모리에 생성되는데, 이때 DAO에서 jdbcTemplate를 생성하지 못해서 발생하는 문제인 것이다.

 

왜냐하면 아래 applicationContext.xml 아래 코드에서 jdbc 부분을 주석 처리했기 때문에 

SchoolDAO에서는 jdbcTemplate 객체를 생성하지 못하였고 이로인해 404 오류가 발생하게 된 것이다.

그러므로 Console 창에 있는 내용을 끝에까지 보면서 오류 발생 지점이 어디인지 파악을 한후 수정을 하는것이 중요하다고 생각된다.

+ Recent posts