web.xml?
서블릿 클래스는 JSP 페이지와 달리 설치뿐만 아니라 등록을 하는 과정을 필요로 한다. 여기서 서블릿 클래스를 등록하는 곳의 이름을 Web application deployment descriptor
라고 하는데 (줄여서 DD-Deployment Descriptor) 이 역할을 하는 것이 바로 web.xml
이다. web.xml
파일은 웹 애플리케이션 디렉터리마다 딱 하나씩만 존재할 수 있다.
DD는 WAS 구동 시 /WEB-INF
디렉토리에 존재하는 web.xml
을 읽어 웹 애플리케이션의 설정을 구성하기 위해 존재한다.
web.xml 작성법
web.xml
을 작성하기 위해서 우선 루트 앨리먼트인 <web-app></web-app>
을 만든다.
그리고, 이 안에 웹 서버가 웹 브라우저로부터 URL을 받았을 때 서블릿 클래스를 찾아서 호출하기 위해 필요한 정보를 기록해야 한다. 그래서 URL과 서블릿 클래스의 이름을 각각 <servlet><servlet-class></servlet-class></servlet>
태그와 <servlet-mapping><url-pattern></url-pattern></servlet-mapping>
으로 작성해준다. mapping을 위해 입력하는 URL은 전체가 아니라 웹 서버의 도메인 이름, 포트번호, 웹 애플리케이션의 디렉터리 이름을 제외한 나머지 부분을 입력한다.
또한 각각의 URL과 서블릿 클래스를 이어주기 위해 <servlet-name></servlet-name>
태그를 이용한다.
1 |
|
여기까지 작성을 하면 기본적인 web.xml
의 작성이 된 것이다. 하지만 이를 그대로 사용하면 에러가 날 수 있다. 왜나하면 반드시 넣어야 하는 두 가지 정보가 존재하기 때문이다. 하나는 web.xml
파일의 작성에 사용된 문법의 식별자이고, 다른 하나는 그 문법의 버전이다. 아래의 내용을 제일 상단에 추가해준다.
1 |
|
html과 xml의 다른점
얼핏 보면 <!-- -->
로 주석처리하는 것도 똑같고, <
라는 태그로 시작해서 >
라는 태그로 끝나는 것도 똑같지만 html과 xml은 엄연히 다르다. 아래에서 다른 점을 살펴보자.
- XML의 선언
- XML 파일에는 처음에 이 파일이 XML형식으로 작성된 파일임을 표시하는 XML 선언이 올 수 있다.
- XML 선언은 XML 문서 작성에 사용된 XML 규격서의 버전과 XML 저장하는 데 사용된 문자 코드의 인코딩 방식을 표시하는 역할을 한다. (그렇지만 XML파일의 문자 구성이 ASCII로만 표현된 경우에는 생략해도 무방하다)
- HTML에서는 모든 문서의 작성 방법이 동일하지만 XML에서는 문서의 종류에 따라 문서 작성 방법이 달라질 수 있다.
- 예) web.xml = 루트가
<web-app>
, server.xml = 루트가<Server>
- 예) web.xml = 루트가
- HTML에서는 엘리먼트 이름과 애트리뷰트 이름에 있는 대소문자를 구분하지 않지만 XML에서는 엄격하게 구분.
- 예)
<BODY>
===<body> (HTML)
,<Server>
!==<server> (XML)
- 예)
-
HTML에서는 단독으로 사용되는 태그는
<
로 시작해서>
로 끝나지만 XML에서는<
로 시작해서/>
로 끝난다. - HTML에서는 애트리뷰트 값을 따옴표로 묶지않고 쓸 수도 있지만 XML에서는 반드시 따옴표로 묶어야 한다.
- 예)
<img src=/img/logo.png> (HTML)
,<role rolename='admin' /> (XML)
- 예)
- HTML에서는 어느정도 문법에 맞지 않는 부분이 있으면 브라우저가 보정해서 처리하지만 XML에서는 조금이라도 다르면 문서 전체가 처리되지 않는다.
이외에도 많은 차이점이 존재한다.
web.xml 분석
1 |
|
이 파일이 XML 형식으로 작성된 파일임을 알리고 작성에 사용된 문법의 식별자와 버전 등을 나타낸다.
1 |
|
웹 애플리케이션에서 공유하기 위한 파라미터를 설정하는 부분.
파라미터로 contextConfigLocation
을 설정함으로써 스프링 설정파일을 읽어 들이고 필요한 객체들을 등록하기 위해 필요한 org.springframework.web.context.ContextLoaderListener
의 위치를 설정한다.
1 |
|
주석에 적혀있는 데로 Request parameter를 UTF-8로 바꿔주기 위한 필터이다.
1 |
|
위의 필터는 application/x-www-form-urlencoded
컨텐트 타입의 HTTP PUT Request를 가로채서 요청 바디에서 폼 데이터를 읽고 메서드의 ServletRequest.getParameter*() 계열로 폼 데이터를 사용할 수 있도록 ServletRequest로 감싼다고 한다. 그리고 이 필터의 요청을 appServlet으로 보내 DispatcherServlet이 처리하도록 한다.
1 |
|
.png, .jpg, .js 등 정적인 content를 처리하기 위해 /resources/*으로 요청이 들어오면 요청을 디폴트 서블릿으로 보낸다.
1 |
|
error-code에 맞는 에러가 발생할 경우 /error.jsp
를 띄워준다.