web.xml Reference Guide for Tomcat

2014. 7. 24. 16:07공부

web.xml 배포기술파일은  톰캣같은 서블릿 컨테이너에서 웹 어플리케이션이 어떻게 배포되어야 하는 지를 기술합니다.


이 파일은 톰캣 상에 배포하는 모든 어플리케이션에 필요합니다. 이 파일은 새로운 톰캣 웹사이트의 ROOT 어플리케이션이나, 서블릿 예제, 또는 jsp 예제, 다운로드 받는 모든 웹 어플리케이션 및 war 파일 안에서 쉽게 찾을 수 있습니다.


이 파일의 위치는 언제나 똑같습니다 : application root /WEB-INF/web.xml 


이 파일은 최소한 하나의 XML 기술어(descriptor)와 시작과 끝을 나타내는 <web-app> 태그를 필요로 합니다.


아래 톰캣 6.0 버전에 맞는 최소의 XSD 스타일을 갖는 예제가 있습니다. 다른 버전의 예제 ( 7.0, 5.5, 5.0 등 ) 및 XSD 와 DTD의 비교는 web.xml DTD and XSD 를 보십시요.

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
               version="2.5">

</web-app>

<web-app> 태그 안에, 다수의 다른 요소들이 포함될 수 있습니다. 이들에 대한 자세한 내용은 아래에 있습니다.


<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
                   version="2.4"> 

        <!-- ========================================================== --> 
        <!-- 일반 --> 
        <!-- ========================================================== --> 
        <!-- 어플리케이션의 이름 --> 
        <display-name>Example App</display-name> 
        <description>An example application which is used to play with some of the features of Tomcat</description> 

        <!-- 클러스터링 준비가 된 어플리케이션 --> 
        <distributable /> 

        <!-- 타임아웃 120분 --> 
        <session-config> 
                <session-timeout>120</session-timeout> 
        </session-config> 


        <!-- ========================================================== --> 
        <!-- 커스텀 태그 라이브러리 --> 
        <!-- ========================================================== --> 
        <!-- JSP 2.0 이후에는 태그라이브러리 선언은 더이상 필요가 없습니다. Removing taglib from web.xml 를 보세요 --> 
        <!-- 예전버전에서 <tablib> 태그는 <jsp-config> 태그의 자식태그가 될 필요가 없었으나 톰캣 7 부터는 자식태그로 넣어야 합니다. --> 
        <!-- web.xml 당 단 하나의 <jsp-config> 를 가질 수 있습니다. --> 
        <jsp-config> 
                <taglib> 
                        <taglib-uri>mytags</taglib-uri> 
                        <taglib-location>/WEB-INF/jsp/mytaglib.tld</taglib-location> 
                </taglib> 
        </jsp-config> 
        --> 


        <!-- ========================================================== --> 
        <!-- JSP 설정 --> 
        <!-- ========================================================== --> 
        <!--
        <jsp-config> 
                <jsp-property-group> 
                        <url-pattern>*.jsp</url-pattern> 
                        <include-prelude>/WEB-INF/jspf/prelude1.jspf</include-prelude> 
                        <include-coda>/WEB-INF/jspf/coda1.jspf</include-coda> 
                </jsp-property-group> 
        </jsp-config> 
        -->

        <!-- ========================================================== --> 
        <!-- 컨텍스트 파라미터 --> 
        <!-- ========================================================== --> 
        <context-param> 
                <description>Enable debugging for the application</description> 
                <param-name>debug</param-name> 
                <param-value>true</param-value> 
        </context-param> 
        <context-param> 
                <description>The email address of the administrator, used to send error reports.</description> 
                <param-name>webmaster</param-name> 
                <param-value>address@somedomain.com</param-value> 
        </context-param> 


        <!-- ========================================================== --> 
        <!-- JNDI 환경변수 --> 
        <!-- ========================================================== --> 
        <env-entry> 
                <env-entry-name>webmasterName</env-entry-name> 
                <env-entry-value>Ms. W. Master</env-entry-value> 
                <env-entry-type>java.lang.String</env-entry-type> 
        </env-entry> 
        <env-entry> 
                <env-entry-name>cms/defaultUserSettings/recordsPerPage</env-entry-name> 
                <env-entry-value>30</env-entry-value> 
                <env-entry-type>java.lang.Integer</env-entry-type> 
        </env-entry> 
        <env-entry> 
                <env-entry-name>cms/enableXMLExport</env-entry-name> 
                <env-entry-value>false</env-entry-value> 
                <env-entry-type>java.lang.Boolean</env-entry-type> 
        </env-entry> 
        <env-entry> 
                <env-entry-name>cms/enableEmailNotifications</env-entry-name> 
                <env-entry-value>true</env-entry-value> 
                <env-entry-type>java.lang.Boolean</env-entry-type> 
        </env-entry> 


        <!-- ========================================================== --> 
        <!-- 서블릿 --> 
        <!-- ========================================================== --> 
        <!-- 이름, 클래스, 설명과 URL  /servlet/SimpleServlet 에 대한 매핑을 갖는 간단한 서블릿--> 

        <servlet> 
                <servlet-name>Simple</servlet-name> 
                <servlet-class>SimpleServlet</servlet-class> 
                <description>This is a simple Hello World servlet</description> 
        </servlet> 
        <servlet-mapping> 
                <servlet-name>Simple</servlet-name> 
                <url-pattern>/servlet/SimpleServlet</url-pattern> 
        </servlet-mapping> 

        <!-- *.cms URL들에 해당하는 CMS 서블릿 --> 
        <servlet> 
                <!-- 식별 --> 
                <servlet-name>cms</servlet-name> 
                <servlet-class>com.metawerx.servlets.ContentManagementSystem</servlet-class> 
                <description>This servlet handles requests for the CMS (it is a controller in an MVC architecture)</description> 

                <!-- 이 서블릿은 두 개의 파라미터를 가지고 있습니다. --> 
                <init-param> 
                        <param-name>debug</param-name> 
                        <param-value>true</param-value> 
                </init-param> 
                <init-param> 
                        <param-name>detail</param-name> 
                        <param-value>2</param-value> 
                </init-param> 

                <!-- 어플리케이션이 시작되면 이 서블릿을 로딩합니다. (서블릿의 init() 메쏘드를 호출합니다. ) --> 
                <load-on-startup>5</load-on-startup> 
                <!-- <run-at>0:00, 6:00, 12:00, 18:00</run-at> 이 태그는 Resin 에서만 정상 작동합니다. --> 
        </servlet> 

        <!-- URL들을 cms 서블릿으로 매핑 ( *.확장자 매핑을 기술 ) --> 
        <servlet-mapping> 
                <!-- .cms 로 끝나는 모든 URL에 대해 cms 서블릿이 호출됩니다. --> 
                <servlet-name>cms</servlet-name> 
                <url-pattern>*.cms</url-pattern> 
        </servlet-mapping> 

        <!-- /content/* 과 /admin/RewriterStatistics URL 들에 응답하는 Rewriter 서블릿  --> 
        <!-- /content/* URL 들에 응답하는 서블릿 정의 --> 
        <servlet> 
                <servlet-name>rewriter</servlet-name> 
                <servlet-class>com.metawerx.servlets.URLRewriter</servlet-class> 
        </servlet> 

        <!-- URL들을 rewriter 서블릿으로 매핑 (  /path/* 와 특정 URL을 매핑 ) --> 
        <servlet-mapping> 
                <!-- /content/ 로 시작하는 모든 URL에 대해 rewriter 서블릿이 호출됩니다. --> 
                <servlet-name>rewriter</servlet-name> 
                <url-pattern>/content/*</url-pattern> 
        </servlet-mapping> 
        <servlet-mapping> 
                <!--통계를 리턴하기 위해 /admin/RewriterStatistics 처럼 rewriter 서블릿은 직접 호출될 수도 있습니다. --> 

                <servlet-name>rewriter</servlet-name> 
                <url-pattern>/admin/RewriterStatistics</url-pattern> 
        </servlet-mapping> 

        <!-- JSP 파일을 사용하기 위해 /shop/item/* URL에 매핑된 PathJSP 서블릿 --> 
        <!-- /shop/item/* URL 에 응답하기 위한 JSP 파일 정의 --> 
        <servlet> 
                <servlet-name>pathjsp</servlet-name> 
                <jsp-file>pathfinder.jsp</jsp-file> 
        </servlet> 

        <!-- URL 들을 pathjsp 서블릿으로 매핑 ( /long/path/* URL 매핑을 기술 ) --> 
        <servlet-mapping> 
                <!-- /shop/item/ 으로 시작하는 모든 URL들은 pathjsp 서블릿이 호출됩니다. --> 
                <servlet-name>pathjsp</servlet-name> 
                <url-pattern>/shop/item/*</url-pattern> 
        </servlet-mapping> 


        <!-- ========================================================== --> 
        <!-- 필터--> 
        <!-- ========================================================== --> 
        <!-- 각각의 request 에 캐릭터 셋을 설정하는 필터예제 ( 톰캣의 servlets-examples 로부터 ) --> 
        <filter> 
                <filter-name>Set Character Encoding</filter-name> 
                <filter-class>filters.SetCharacterEncodingFilter</filter-class> 
                <init-param> 
                        <param-name>encoding</param-name> 
                        <param-value>EUC_JP</param-value> 
                </init-param> 
        </filter> 
        <filter-mapping> 
                <filter-name>Set Character Encoding</filter-name> 
                <url-pattern>/*</url-pattern> 
        </filter-mapping> 

        <!-- 각 페이지의 최 상위에서 HTTP request 덤프를 뜨기 위한 필터 예제 ( 톰캣의 servlets-examples 로부터 ) --> 
        <filter> 
                <filter-name>Request Dumper Filter</filter-name> 
                <filter-class>filters.RequestDumperFilter</filter-class> 
        </filter> 
        <filter-mapping> 
                <filter-name>Request Dumper Filter</filter-name> 
                <url-pattern>/*</url-pattern> 
        </filter-mapping> 


        <!-- ========================================================== --> 
        <!-- 리스너 --> 
        <!-- ========================================================== --> 
        <!-- 어플리케이션 이벤트 리스너 예제 정의 --> 
        <listener> 
                <listener-class>com.metawerx.listener.ContextListener</listener-class> 
        </listener> 
        <listener> 
                <listener-class>com.metawerx.listener.SessionListener</listener-class> 
        </listener> 


        <!-- ========================================================== --> 
        <!-- 보안 --> 
        <!-- ========================================================== --> 
        <!-- 역할 정의 --> 
        <security-role> 
                <role-name>admin</role-name> 
        </security-role> 
        <security-role> 
                <role-name>cms_editors</role-name> 
        </security-role> 
         
        <!--  /private/* 에 대한 액세스 제약 조건 정의 --> 
        <security-constraint> 

                <display-name>Security constraint for the /private folder</display-name> 

                <web-resource-collection> 
                         
                        <web-resource-name>Protected Area</web-resource-name> 
                        <url-pattern>/private/*</url-pattern> 
                         
                        <!-- 기술한 HTTP request 에 대해서만 액세스가 금지됨 --> 
                        <!-- 액세스를 금지하려면 아래 주석을 제거하면 됨 --> 
                        <!-- 
                        <http-method>DELETE</http-method> 
                        <http-method>GET</http-method> 
                        <http-method>POST</http-method> 
                        <http-method>PUT</http-method> 
                        --> 

                </web-resource-collection> 

                <auth-constraint> 
                        <!-- 오로지 admin과 cms_editors 만 여기를 액세스할 수 있습니다. --> 
                        <role-name>admin</role-name> 
                        <role-name>cms_editors</role-name> 
                </auth-constraint> 

        </security-constraint> 

        <!-- FORM에 기반한 인증 --> 
        <!-- 아래 주석을 제거하면 기본 HTTP 인증을 사용합니다. -> 
        <!-- 
        <login-config> 
                <auth-method>FORM</auth-method> 
                <form-login-config> 
                        <form-login-page>/login.jsp</form-login-page> 
                        <form-error-page>/error.jsp</form-error-page> 
                </form-login-config> 
        </login-config> 
        --> 
        <!-- 이 어플리케이션은 기본 인증을 사용합니다. --> 
        <login-config> 
                <auth-method>BASIC</auth-method> 
                <realm-name>Editor Login</realm-name> 
        </login-config> 

        <!-- 어플리케이션의 모든 페이제에 대해서 SSL 제약을 걸어주는 정의 --> 
        <security-constraint> 

                <web-resource-collection> 
                        <web-resource-name>Entire Application</web-resource-name> 
                        <url-pattern>/*</url-pattern> 
                </web-resource-collection> 

                <user-data-constraint> 
                        <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
                </user-data-constraint> 

        </security-constraint> 


        <!-- ========================================================== --> 
        <!-- 에러 핸들러 --> 
        <!-- ========================================================== --> 
        <!-- 404 에 대한 에러 핸들러 --> 
        <error-page> 
                <error-code>404</error-code> 
                <location>/error404.jsp</location> 
        </error-page> 

        <!-- java.lang.Throwable 에 대한 에러 핸들러--> 
        <error-page> 
                <exception-type>java.lang.Throwable</exception-type> 
                <location>/errorThrowable.jsp</location> 
        </error-page> 


        <!-- ========================================================== --> 
        <!-- 그 밖의 MIME 타입 --> 
        <!-- ========================================================== --> 
        <!-- 아래처럼 XML mime-mapping 을 하면, octet/stream으로 보내는 대신, 적절한 스프레드 시트를 오픈합니다. --> 
        <mime-mapping> 
                <extension>xls</extension> 
                <mime-type>application/vnd.ms-excel</mime-type> 
        </mime-mapping> 


        <!-- ========================================================== --> 
        <!-- 로케일 --> 
        <!-- ========================================================== --> 
        <!-- 로케일 인코딩 --> 
        <locale-encoding-mapping-list> 
                <locale-encoding-mapping> 
                        <locale>ja</locale> 
                        <encoding>Shift_JIS</encoding> 
                </locale-encoding-mapping> 
        </locale-encoding-mapping-list> 


        <!-- ========================================================== --> 
        <!-- 웰컴 파일 --> 
        <!-- ========================================================== --> 
        <!-- 패쓰에 파일 네임이 없을 경우 어떤 파일을 보여줄 지 순서대로 정의합니다. --> 
        <!-- 예를들면 사용자가  http://yoursite.com/ 나 http://yoursite.com/somefolder 을 호출하면 --> 
        <!-- 기본값은 서버전역의 web.xml 파일에 씌여진  index.jsp 나 index.htm 같은 것들이 제공됩니다. --> 

        <!-- 이 태그를 사용하면 기본값을 오버라이딩 하므로 이곳에 추가해야함을 잊지 마십시요. --> 
        <welcome-file-list> 
                <!-- index.swf나 splash.jsp가 있으면 사용하고, 그렇지 않으면 일반적인 기본값을 찾습니다. --> 
                <welcome-file>index.swf</welcome-file> 
                <welcome-file>splash.jsp</welcome-file> 
                <welcome-file>index.html</welcome-file> 
                <welcome-file>index.htm</welcome-file> 
                <welcome-file>index.jsp</welcome-file> 
        </welcome-file-list> 

</web-app>

원본 : http://wiki.metawerx.net/wiki/Web.xml



각각의 태그에 대한 설명은 원본 사이트의 해당 설명 페이지로 이동합니다.

일부 페이지는 한 번 정리해보면 좋을 거 같은데....

언제 정리해볼 지는.. ㄷㄷㄷㄷ