📚 Study/Servlet&JSP

web.xml 배포 설명자와 URL Pattern

0_ch4n 2022. 5. 27. 02:40
반응형

✔️ web.xml

  • 애플리케이션의 클래스, 리소스, 구성을 기술하고 웹 서버가 웹 요청을 처리하는 방법을 기술합니다.
  • 앱의 WAR에서 WEB-INF/ 디렉터리에 위치합니다.
<web-app>
    <!-- 애플리케이션의 이름과 설명을 제공 -->
    <display-name>Example App</display-name>
    <description>An example application which is used to play with some of the features of Tomcat</description>

    <!-- 세션 타임아웃 제공 -->
    <session-config>
        <session-timeout>120</session-timeout>
    </session-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 파라미터를 정의 -->
    <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>

	<!-- 서블릿에 대한 이름, 클래스, 설명 등을 제공 -->
    <servlet>  
        <servlet-name>서블릿 이름</servlet-name>
        <servlet-class>서블릿 클래스</servlet-class>
        <description>설명</description>
    </servlet>
    
	<!-- 각 서블릿을 URL에 매핑 -->
    <servlet-mapping>  
        <servlet-name>서블릿 이름</servlet-name>  
        <url-pattern>/welcome</url-pattern>  
    </servlet-mapping>  

	<!-- 필터에 대한 이름, 클래스, 초기 변수 이름과 값을 제공 -->
    <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>

	<!-- 각 필터를 URL에 매핑 -->
    <filter-mapping>
        <filter-name>1번 필터</filter-name>
        <url-pattern>/filter</url-pattern>
    </filter-mapping>
    
    <filter-mapping>
        <filter-name>2번 필터</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <filter-mapping>
        <filter-name>3번 필터</filter-name>
        <servlet-name>서블릿 이름</servlet-name>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
    
    <!-- 오류 핸들러로 오류 코드에 따라 표시할 페이지를 제공 -->
    <error-page>
        <error-code>500</error-code>
        <location>/errors/servererror.jsp</location>
    </error-page>
    
    <!-- 경로에 파일 이름이 정의되어 있지 않을 경우 표시할 파일을 순서대로 정의 -->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

 

✔️ URL 패턴

  • 클라이언트에서 특정 URL로 요청 시 해당 서블릿이 처리할 수 있게 하기 위해 해당 URL을 서블릿에 올바르게 매핑해야 합니다.
  • <servlet-mapping> 의 <url-pattern> 태그를 통해 설정하거나 @WebServlet의 urlPatterns 속성을 사용합니다.

  •  종류
    • exact mapping : /login/hello.do
    • path mapping : /login/*
    • extension mapping : *.do
    • default mapping : /

 

  • 특징 
    • 우선순위는 exact -> path -> extension -> default 순입니다.
    • exact, path, extension은 동적 리소스, default는 정적 리소스입니다.
    • default mapping은 <servlet-mapping>에 걸리지 않은 요청들을 처리합니다.

 

  • URL을 처리하는 서블릿을 찾는 과정
    • 요청이 들어오면 Servlet Context의 servletMapping에서 URL을 key로 어떤 서블릿이 처리하는지 찾습니다.
    • 그 후 Servlet Context의 children에서 서블릿의 주소값을 찾습니다.

 

📌 web.xml (JSP, Serlvet 가능)

<!-- Servlet 매핑 -->
<servlet>
	<servlet-name>HelloServlet</servlet-name>
	<servlet-class>servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>HelloServlet</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

<!-- JSP 매핑 -->
<servlet>
    <servlet-name>HelloJSP</servlet-name>
    <jsp-file>/hello.jsp</jsp-file>
</servlet>

<servlet-mapping>
    <servlet-name>HelloJSP</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

 

📌 @WebServlet (Servlet은 가능, JSP는 불가능)

@WebServlet("/hello1")
public class HelloServlet1 extends HttpServlet {

 

📄 참고

스프링의 정석

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

https://dololak.tistory.com/740?category=636501 

 

반응형