Web/JSP

JSP - <c:url /> 쓰는 이유

JaeHoney 2021. 1. 1. 23:04

<c:url>은 무엇인가?

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
    <title>메인</title>
</head>
<body>
    <p>환영합니다.</p>
    <p><a href="<c:url value="/register/step1" />">[회원 가입하기]</a>
</body>
</html>

 

2번째 줄<%@ taglib prefix... %>는 JSTL의 코어의 라이브러리를 등록하고 prifix를 "c"로 사용하겠다는 의미입니다. uri부분의 라이브러리를 등록하는데 uri의 값은 JSTL중에 코어 라이브러리로 되어있기 때문입니다.

 

prefix는 변경할 수 있습니다. prefix="a1"로 설정한다면, <a href="a1:url...>로 아래의 코드를 바꿔주면 됩니다.

 

기본적인 html 태그를 사용한다면 <a href="/context path/register/step1 />이 될 것입니다. 이미지에서도 <img src="/context path/register/step1 />을 사용할 것입니다.

 

그렇다면 <c:url />은 왜 쓰는 걸까요?  주 이유는 아래와 같습니다.

  • context path를 자동으로 포함시키므로 서버 소스를 수정함에 따른 변화를 자동으로 적응해준다.
  • 클라이언트의 브라우져가 쿠키사용을 금지하면 로그인 유지가 힘들어진다. 이 때 세션을 유지하기위해 링크 뒤에 특정값(sessionId)을 부여해줘서 로그인을 유지해준다.

 

다만, img, JS, CSS를 <c:url.../> 태그로 사용하고 핸들링할 경우, sessionId를 파일명의 일부로 간주해서 not found가 나올 수 있습니다. 이 때 해결할 수 있는 방법은 대표적으로 EL로 대체, 정규 표현식으로 치환, 페이지 세션 끄기가 있습니다.

 

context path를 동적으로 가져오는 것에 목표를 둔다면. EL로 대체하는 방법이 대표적입니다. 예시는 아래와 같습니다.

// <a href="<c:url value="/register/step1" />">

// 1번
<a href="${pageContext.serveltContext.contextPath}/register/step1">

// 2번
<a href="${pageContext.request.contextPath}/register/step1">

1번 예시와 2번 예시는 동일한 결과를 얻습니다.

 

 

'Web > JSP' 카테고리의 다른 글

JSP - 기본 문법 (스크립트 태그)  (0) 2020.10.03
JSP - JSP(Java Server Pages)란 ?  (0) 2020.09.29
톰캣이란 ?  (0) 2020.09.29