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는 그 뒤에 어떤 문자가 붙더라도 한 곳에서 처리해주게 됩니다.
'▸JSP & Servlet > 기본 문법' 카테고리의 다른 글
쿠키 이용 시 유의 사항 (자동로그인 로직 구현 등) (0) | 2020.02.23 |
---|---|
sendRedirect 작동 방식 및 예외 처리에서의 사용 (0) | 2020.02.23 |
RequestDispatcher - 페이지 forward/include (0) | 2020.02.21 |
JDBC를 이용한 DB작업_커넥션풀(Connection Pool) [3/3] (6) | 2020.02.20 |
JDBC를 이용한 DB작업_DB 연동 및 데이터 작업 [2/3] (2) | 2020.02.19 |
댓글