▸JSP & Servlet/기본 문법

URL 매핑_'/' 와 '/*' 의 차이점

코데방 2020. 2. 22.
728x90

MVC 패턴의 구조를 짜기 위해 해당 개념을 이해해야 할 것 같습니다.

 

 

[ / ]

 

 

직접 URL 매핑을 한 경우를 제외하고 모두 / 로 매핑된 서블릿(또는 JSP)에서 나머지 모든 요청을 받겠다는 의미입니다. 이 방식으로 URL 매핑된 서블릿을 디폴트 서블릿이라고 합니다.

 

디폴트 서블릿을 지정하더라도 JSP 파일의 경우 해당 파일로 바로 접속이 됩니다. 그 이유는 JSP가 'web.xml' 파일에서 자동으로 URL 매핑이 되어 있기 때문입니다. 'web.xml'에서 찾아보면 아래 코드에서 이미 jsp와 jspx 확장자에 대한 매핑을 해주고 있는 것을 볼 수 있습니다. 따라서 사용자가 JSP를 제외한 어떤 URL(정확히는 URI)주소로 입력을 하건간에 모두 디폴트 페이지로 가게 되지만, JSP 파일 위치를 정확히 입력해주면 해당 JSP 페이지로 이동하게 되는 것입니다. 

    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

 

 

위와 같은 경우라면 사용자가 잘못된 JSP파일 위치를 URL로 입력하면 페이지를 찾을 수 없어 404 에러 페이지가 반환되게 됩니다. 이런 경우를 방지하고 싶으면 위의 기본 JSP 매핑 설정을 비활성화한 뒤, 실제 보여줄 화면의 JSP 파일만 개별적으로 URL 매핑하면 됩니다. 그러면 사용자가 잘 못 입력한 요청도 컨트롤러가 받아서 적절한 화면을 보여줄 수 있게 됩니다. 아래와 같은 형식으로 'web.xml'의 매핑을 고쳐주면 됩니다.

 

<!-- 비활성처리 -->
<!-- The mappings for the JSP servlet -->
<!--     <servlet-mapping> -->
<!--         <servlet-name>jsp</servlet-name> -->
<!--         <url-pattern>*.jsp</url-pattern> -->
<!--         <url-pattern>*.jspx</url-pattern> -->
<!--     </servlet-mapping> -->

	<servlet>
		<servlet-name>join-jsp</servlet-name>
		<jsp-file>/join/join.jsp</jsp-file>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>join-jsp</servlet-name>
		<url-pattern>/join</url-pattern>
	</servlet-mapping>

 

 


 

 

[ /* ]

 

 

이 방식의 매핑은 모든 URI 주소에 대해 해당 서블릿을 매핑하는 방식입니다. 사용자 또는 컨테이너에서 어떤 URI주소를 입력하건 해당 서블릿으로 요청이 돌아갑니다. 만약 컨트롤러를 /*로 매핑해두게 되면 컨트롤러에서 다른 페이지로 리다이렉트하거나 포워딩을 하게 되더라도 다시 컨트롤러로 요청이 돌아오기 때문에 뷰를 출력해줄 수 없다는 문제가 생깁니다.

 

따라서 이 방식은 루트(/*)가 아닌 특정 상황에서 "/폴더/*"의 형태로 쓰이게 될 것 같습니다. 해당 형식에 대한 URI는 그 뒤에 어떤 문자가 붙더라도 한 곳에서 처리해주게 됩니다.

728x90

댓글

💲 추천 글