사용환경

  • MacBook Air (M1, 2020) 16GB
  • JDK 8
  • Eclipse 2021-12
  • tomcat 8.5


에러의 발생


  • 역시 여느 때와 같은 JSP 수업 시간… Model2 MVC 패턴으로 웹 페이지를 만드는 것을 실습하고 있었는데 서블릿을 통해 가상주소로 페이지를 열다 보니까 jsp 페이지 자체는 잘 열리는데 jsp 페이지와 연결된 외부 css파일의 경로를 제대로 찾질 못해서 기본으로 적용되어 있던 css가 제대로 적용되질 않았다.
  • 이걸 해결하고 수업이 끝났다면 좋았겠지만 여기까지 했을 때 마침 수업 시간이 끝나버려서… 다음 수업까지 기다릴 수도 있었겠지만 간단해 보이는 걸 해결 못하니까 너무 신경쓰였다. 그래서 고쳐 보겠다고 경로를 온갖 방법으로 지정을 해 줬는데 계속 상대 경로를 지정하는 것이었어서 그런지 페이지로 이동하는 경로에 따라 어떤 경우엔 잘 되고 어떤 경우엔 잘 나오지 않는 등 여러가지로 css 파일이 완벽하게 로드되지 않았다.
  • 물론 절대경로도 나름 시도를 해 보았으나 잘못 알고 있었는지 절대경로도 먹히질 않았다… 주륵 🥲


문제 해결

  • 구글에 jsp 절대경로를 검색하니까 자료가 많았다.
  • 절대경로를 설정하는 간단한 방법은 루트를 뜻하는 /를 입력하고 하위 폴더명을 타고타고 입력하는 것이지만 저게 먹히지 않았기 때문에 다른 방법을 찾았다.
  • 바로
${pageContext.request.contextPath}


를 이용해 어느 경우라도 절대경로가 적용될 수 있게 해주는 것이다.

  • 한 시간동안 헤메면서도 생각했지만 jsp 페이지에 직접 접근했을 때와 서블릿을 통해 접근했을 때 상대경로의 기준이 달라져서 그러는 것 같았는데 찾아보니까 진짜였다.

<link href="${pageContext.request.contextPath}/css/default.css" rel="stylesheet" type="text/css">
  • 이런 식으로 찾아가고자 하는 폴더와 파일의 경로를 el 표현식을 사용한 contextPath 뒤에 입력해주면 절대경로로 세팅되면서 정상적으로 css 파일을 찾아가게 된다.
  • 그런데 방금 적용시켜 보니까 jsp 액션태그의 경로에는 절대경로를 넣으니까 500 에러가 나서 액션태그는 피하고 HTML 태그에만 적용시켜 주면 될 거 같다.

  • 짠👏 적용 끝!