카테고리 없음

[Servlet/JSP] web.xml

pogles 2023. 2. 7. 17:35

개요

web.xml 는 배포설명자(deployment discriptor)라고 불린다. 항상 WEB-INF/web.xml 에 위치해야 한다.

WEB-INF/web.xml

 

web.xml 의 기능

  1. ServletContext 의 초기 파라미터 설정.
  2. Session 유효시간 설정.
  3. Servlet/JSP 에 대한 정의 및 매핑.
  4. Mime Type 매칭 - request 에서 가져온 데이터 타입을 매칭.
  5. Welcome File List - server의 root 경로(/)로 request 가 들어올 때 보여주는 페이지(html, jsp) 를 지정.
  6. Error page 처리 - 잘못된 request 에 대한 처리.
  7. 리스너/필터 설정 - 웹 애플리케이션에서 발생하는 이벤트 처리 | 들어오는 request 정보 필터 처리
  8. 보안

 

** 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