[Spring] web.xml / servlet-context.xml의 path 분석

리트리버J

·

2020. 11. 7. 09:02

728x90

    
    // 1. web.xml의 DispactherServlet에서 servlet-context.xml로 보낸다.    
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    
    // 2. servlet-context.xml의 등록된 beans에서 Controller에서 넘어온 String 값에
    // prefix:접두사, suffix:접미사 를 붙여서,
    // ${rootContext}/WEB-INF/views/ + 넘어온 String + .jsp 가 되어
    // 페이지 이동을 할 수 있게 되는 것이다.
    // 기본적으로 WEB-INF에 직접 접근 할 수 없기 때문에
    // Controller를 통해서 접근 해야 한다.
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    // 여기서 의문점이 생겼다.
    // 분명 WEB-INF는 src/main/webapp에 있는데,             (하단 사진 참조)
    // 왜 /WEB-INF/views/만 붙이고 불러 올 수 있는 것일까?



    // 답은 Navigator에서 보이는 .settings에 있었다.
    // Navigator가 없다면 상단 메뉴 - window - show View - Navigator 추가.
    // .settings의 org.eclipse.wst.common.component를 들어가보자. (하단 사진 참조)



    // defaultRootSource에 source-path를 보게 되면,
    // /src/main/webapp이 적혀 있다.
    // 이 Path와 servlet-context.xml의 prefix를 통하여 들어 갈 수 있는 것이다!!
    <?xml version="1.0" encoding="UTF-8"?>
    <project-modules id="moduleCoreId" project-version="1.5.0">
        <wb-module deploy-name="test">
            <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
            <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
            <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
            <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
            <property name="java-output-path" value="target/classes"/>
            <property name="context-root" value="study"/>
        </wb-module>
    </project-modules>

    ++ 추가))
    Tomcat Server의 welcome-file 의 index.jsp가 자동으로 index.jsp파일을 찾아서
    띄워주게 되는데,
    WEB-INF 내부가 아닌, webapp폴더 하위에 index.jsp를 생성하면
    default-sevlet이 작동되어, Dispatcher servlet을 타지 않고 바로 열린다.
    이 부분도, 위의 source-path를 /src/main/webapp/WEB-INF/views로 바꾸면,
    더이상 webapp폴더 하위에선 인식하지 못한다.

    servlet-mapping의 url-pattern에 대해서 더 깊은 공부가 필요 할 것 같다.
    



728x90