전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(2) - web.xml
나만의 웹 템플릿 프로젝트 생성하기(1)에서는
전자정부프레임워크를 활용해 프로젝트를 생성하고 페이지를 띄우는데 까지 했다.
이번 (2) 에서는 가장 중요한 설정 파일인 web.xml 에 대해 설명 하려 한다.
web.xml 은 MVC모델의 프로젝트가 실행될때 가장 먼저 실행되는 세팅파일이다.
그럼 web.xml 소스를 보도록 하자.
해당 파일은 프로젝트를 생성하면 위의 위치에 존재한다.
web.xml에 대한 설명은 구글링을 해보면 아주 잘 설명되어있다.
여기서는 전자정부프레임워크에서 제공하는 소스에 대한 설명 위주로 포스팅 하겠다.
위의 코드는 해당 파일이 xml임을 알리는 첫번째 줄과
어떤 스키마정의를 따르는지와 버젼에 대한 설명을 정의하는 나머지 줄로 구성된다. (<wab-app ...>)
이제부터가 중요하다.
filter 는 웹 어플리케이션이 실행될때 사전 처리하는 기능을 수행한다.
해당 부분은 한글과 같은 문자의 인코딩을 처리하는 부분이다.
*.do 라는 요청이 들어오면 encodingFilter 라는 필터를 찾아 그 필터에 설정된 클래스를 메모리 상에 띄운다.
파라미터 부분은 encoding 타입을 utf-8로 설정하겠다는 것이다.
org.springframework.web.filter.CharacterEncodingFilter 에 커서가 있을 때 F3 단축키를 누르면 해당 클래스로 이동되며, 내용 확인이 가능하다.
다음 필터 부분을 보자.
해당 필터도 *.do 라는 요청이 들어오면 HTMLTagFilter 라는 필터를 찾아 해당 필더에 설정된 class를 메모리 상에 띄우는 부분이다.
egovframework.rte.ptl.mvc.filter.HTMLTagFilter 클래스는 크로스 스크립팅이라는 해킹기법을 사전에 막는 기능을 한다. 크로스 스크립팅 해킹기법은 <script>로 시작하는 코드를 전송시켜 해킹코드를 서버에서 실행시키는 기법인데
이를 막기 위하여 HTMLTagFilter 클래스를 사용하는 것이다.
HTMLTagFilter 를 보면 HTMLTagFilterRequestWrapper 라는 클래스를 실행시켜 정규식코드를 변환하는 것을 확인 할 수 있다.
예)
다음 부분은 리스너를 등록하는 부분이다.
Listener는 서블릿과는 다르게 서블릿 컨테이너(tomcat)가 web.xml 파일을 읽어서 구동될 떄, 자동으로 메모리에 생성(pre-loading)되는 객체이다.
만일 위와 다르게 <context-param>을 등록하지 않게 되면 <listener>에 등록된 ContextLoaderListener 는
/WEB-INF 경로에 있는 applicationContext.xml 을 자동으로 로딩하기 때문에 해당 파일이 없다면 오류가 발생하게 된다. 해서 <context-param>을 등록하여 해당경로에 있는 xml 파일들을 로딩하는 것이다.
복수의 설정파일을 사용할 경우 위와같이 설정하면 된다. 해당 경로를 확인해보면 기능에 따라 분리된 여러개의 설정 파일을 확인 할 수 있다.
위의 설정파일들에 대한 설명은 다음 포스팅에서 진행하도록 하겠다.
DispatcherServlet을 등록하는 부분이다.
DispatcherServlet을 등록하는 이유는 이 객체가 이용해야 하는 HandlerMapping, Controller, ViewResolver 객체들을 인지하고 있어야 클라이언트의 요청에 대해 적절히 처리할 수 있기 때문이다.
<load-on-startup>이 없다면, *.do 라는 요청이 들어오면 action이라는 이름의 서블릿의
org.springframework.web.servlet.DispatcherServlet 클래스를 실행한다.
이는 클라이언트가 요청을 처리하며 결과를 응답하는 역할을 한다.
하지만 <load-on-startup> 을 세팅했기 때문에 클라이언트의 *.do 요청이 오지 않아도 action 이라는 서블릿을 실행한다.
DispatcherServlet클래스 또한 기본 설정 경로가 /WEB-INF 경로의 action-servlet.xml 이기 때문에 <init-param> 을 이용하여 설정파일의 경로를 설정하여 준다.
일단 여기서 이론상 중요한 내용은, 앞에서 listener가 pre-loading 되면서 먼저 비지니스레이어(service, DAO 등)가 메모리상에 올라 간 후 *.do 요청이 없어도 프리젠테이션 레이어(controller 등)가 메모리에 올라간다는 것이다.
Spring MVC 모델은 클라이언트의 *.do 요청이 들어오면 핸들러가 그 요청과 controller를 매핑하고 controller는 serivce, Dao 순으로 참조하게 된다. 그러니, controller가 참조하는 service나 Dao가 메모리 상에 없으면 에러가 나게 된다.
위 코드는 간단하게 클라이언트의 요청이 들어왔을때 처음으로 응답하는 페이지를 설정하는 부분이다.
위 코드는 보안된 페이지로 들어가려는 사용자에 대한 서버의 인증 방식을 설정하는 부분이다.
BASIC, DIGEST, CLIENT-CERT, FORM 네가지 방식이 있다.
이부분에 대한 자세한 설명은 다음으로 미루자.
마지막 부분은 에러처리 부분이다.
각 에러에 대한 연결 페이지 설정을 할 수 있다.
여기까지 web.xml 코드에 대한 소스코드 설명이었다.
web.xml은 정말 중요한 부분이므로 위의 내용을 확실하게 이해하도록 하자.
Link1 : 전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(1) - 프로젝트생성
Link2 : 전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(3) - dispatcher-servlet.xml
Link3 : 전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(4-1) - context-aspect.xml
Link4 : 전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(4-2) - context-common.xml
Link5 : 전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(4-3) - context-datasource.xml
Link6 : 전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(4-4) - context-transaction.xml
'Programing > egovFramework' 카테고리의 다른 글
Spring bean에 등록된 class에서 classNotFoundException 발생시 해결방법 (0) | 2017.01.23 |
---|---|
전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(3) - dispatcher-servlet.xml (0) | 2017.01.20 |
전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(1) - 프로젝트생성 (0) | 2017.01.18 |
이클립스 pom.xml Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0 해결방법 (0) | 2016.12.19 |
DB링크된 테이블에 접속 시 ORA-12154, ORA-02063 에러 잡는 방법 (0) | 2016.11.22 |
댓글