[Servlet/JSP] web.xml
개요
web.xml 는 배포설명자(deployment discriptor)라고 불린다. 항상 WEB-INF/web.xml 에 위치해야 한다.
web.xml 의 기능
- ServletContext 의 초기 파라미터 설정.
- Session 유효시간 설정.
- Servlet/JSP 에 대한 정의 및 매핑.
- Mime Type 매칭 - request 에서 가져온 데이터 타입을 매칭.
- Welcome File List - server의 root 경로(/)로 request 가 들어올 때 보여주는 페이지(html, jsp) 를 지정.
- Error page 처리 - 잘못된 request 에 대한 처리.
- 리스너/필터 설정 - 웹 애플리케이션에서 발생하는 이벤트 처리 | 들어오는 request 정보 필터 처리
- 보안
** ServletContext = Servlet 이 Servlet container 와 통신하는데 사용하는 일련의 메서드를 정의한 인터페이스.
** Mime = 다양한 format을 가진 파일들을 텍스트로 전환하는 기술.
web.xml의 구성
1) 공통부분
- java dynamic web project 시 꼭 https 로 작성했는지 확인해주세요.
- https 가 아니라 http 로 사용하신다면 작동하지 않을 수 있습니다.(빨간줄)
<!-- 공통부분 -->
<web-app xmlns="https://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!--
여러가지 서블릿 요소들 모두 포함
-->
</web-app>
2) Servlet 정의
// redteam 이라는 이름의 servlet 선언
<servlet>
<servlet-name>redteam</servlet-name> // servlet 이름 = reateam
<servlet-class>mysite.server.TeamServlet</servlet-class> // servlet 기능구현파일위치(패키지명.클래스명)
<init-param> // 초기매개변수설정1 ("teamColor":"red")
<param-name>teamColor</param-name>
<param-value>red</param-value>
</init-param>
<init-param> // 초기매개변수설정2 ("bgcolor":"#CC0000")
<param-name>bgColor</param-name>
<param-value>#CC0000</param-value>
</init-param>
</servlet>
// blueteam 이라는 이름의 servlet 선언
<servlet>
<servlet-name>blueteam</servlet-name> // servlet 이름 = blueteam
<servlet-class>mysite.server.TeamServlet</servlet-class> // servlet 기능구현파일위치
<init-param> // 초기매개변수설정1 ("teamColor":"blue")
<param-name>teamColor</param-name>
<param-value>blue</param-value>
</init-param>
<init-param> // 초기매개변수설정2 ("bgColor":"#0000CC")
<param-name>bgColor</param-name>
<param-value>#0000CC</param-value>
</init-param>
</servlet>
3) Servlet 매핑 정의
// request 에 맞는 servlet 을 매핑해줌
<!-- 사용자가 접속한 url 이 (서비이름)/red/* 패턴을 가지면
servlet 이름이 redteam 인 servlet 을 매핑해줌. -->
<servlet-mapping>
<servlet-name>redteam</servlet-name>
<url-pattern>/red/*</url-pattern> // url 이 server/red/* 이라면
</servlet-mapping>
<!-- 사용자가 접속한 url 이 (서비이름)/blue/* 패턴을 가지면
servlet 이름이 blueteam 인 servlet 을 매핑해줌. -->
<servlet-mapping>
<servlet-name>blueteam</servlet-name>
<url-pattern>/blue/*</url-pattern>
</servlet-mapping>
4) welcom-file-list
- root 에 속하는 기본 웹페이지
- server의 root 경로(/)로 request 가 들어올 때 보여주는 페이지(html, jsp) 를 지정.
- 여러 welcome-file 을 사용할 수 있으며, 순차적으로 파일을 조회하고 먼저 찾은 것을 클라이언트에 보내는 역할.
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
5) filter / filter-mapping
- 받은 request 에 대해 필터링을 진행할 수 있음. servlet container 가 구동되는 시점에 생성
- servlet 에 대한 사전 처리작업 (servlet 실행전).
- servlet 에 대한 사후 처리작업 (response 전송전)
** Spring 사용시 encoding 에 사용하는 예시
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- /의 형식으로 시작하는 url에 대하여 UTF-8로 인코딩 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6) listener
- 웹어플리케이션에서 발생하는 이벤트를 감지하고 처리해야하는 경우 사용
- Servlet Container 에서 발생하는 이벤트 감지
- ServletContext, HttpSession, ServletRequest 등 다양한 이벤트 소스 존재.
<listener>
<listener-class>mySite.server.myListener</listener-class>
</listener>
listener 참고 블로그
https://dololak.tistory.com/616
[서블릿/JSP] 리스너(Listner)란? 이벤트 리스너의 개념 설명. 구현 및 등록하기
리스너란? 이벤트, 리스너, 이벤트핸들러 간략 개념정리 리스너는 단어의 뜻으로 보자면 (소리를) 듣는 사람, 청취자입니다. 프로그래밍에서의 리스너는 무언가 소리를 듣는 사람을 뜻하기 보다
dololak.tistory.com
7) Error Handler
<error-page>
<error-code>500</error-code> // 오류코드 500 발생시
<location>/errors/servererror.jsp</location> // 다음 jsp 페이지 표시
</error-page>
servlet 3.0 이후 @annotation 을 통해 web.xml 에 명시하지 않고 java 파일에 직접 servlet 을 매핑할 수 있게 되었습니다.
web.xml 에서 servlet, servlet-mapping, filter, listener 등의 태그를 사용하지 않고 @annotation 을 활용할 수 있습니다.
web.xml >> https://cloud.google.com/appengine/docs/standard/java/config/webxml?hl=ko
배포 설명자: web.xml | 자바 8용 App Engine 표준 환경 | Google Cloud
주의: 앞으로 몇 개월에 걸쳐 Google은 콘텐츠를 보다 손쉽게 찾고 나머지 Google Cloud 제품과 더 잘 연동되도록 App Engine 문서 사이트를 재구성할 예정입니다. 제공되는 콘텐츠는 동일하지만, 이제
cloud.google.com
ServletContext >> https://docs.jboss.org/jbossas/javadoc/7.1.2.Final/javax/servlet/ServletContext.html?is-external=true
web.xml 기능 >> https://www.youtube.com/watch?v=Q_c-1-cq6YA
web.xml 구성 >> https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html