Spring(Boot)

스프링부트 정적 리소스 상대경로 절대경로 사용 시 차이

hamaganatanadda 2023. 9. 18. 22:11

springboot 2.7.15

JDK 8

 

정적 리소스 폴더를 변경하지 않고 static 위치에서 사용

패키지 구조: static 아래에 부트스트랩 css 추가

controller

@Controller
public class TestController {
    @GetMapping("/")
    public String main() {
        return "main";
    }
    
    @GetMapping("/board")
    public String board() {
        return "main";
    }
    
    @GetMapping("/board/list")
    public String list() {
        return "main";
    }
}

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>jsp </title>
    <link href='<c:url value="/bootstrap.min.css" />' rel="stylesheet" /> <!-- 1 -->
    <link href='<c:url value="bootstrap.min.css" />' rel="stylesheet" /> <!-- 2 -->
    <link href='bootstrap.min.css' rel="stylesheet" /> <!-- 3 --> <!-- == './bootstrap.min.css --> 
    <link href='/bootstrap.min.css' rel="stylesheet" /> <!-- 4 --> 
    <link href='${pageContext.request.contextPath}/bootstrap.min.css' rel="stylesheet" /> <!-- 5 --> 
</head>
<body>
    <div>hi</div>
</body>
</html>

1, 4, 5 절대경로

2, 3 상대경로

 

 

소스 보기 시 나오는 주소와 클릭 시 이동하는 주소 다름

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>jsp </title>
    <link href='/bootstrap.min.css' rel="stylesheet" /> <!-- 1 -->
    <link href='bootstrap.min.css' rel="stylesheet" /> <!-- 2 -->
    <link href='bootstrap.min.css' rel="stylesheet" /> <!-- 3 --> <!-- == './bootstrap.min.css --> 
    <link href='/bootstrap.min.css' rel="stylesheet" /> <!-- 4 --> 
    <link href='/bootstrap.min.css' rel="stylesheet" /> <!-- 5 --> 
</head>
<body>
    <div>hi</div>
</body>
</html>

1. context path "/" 

  - localhost:8080, localhost:8080/board

    -> 정상

  - localhost:8080/board/list

    -> 상대경로인 2, 3번은 http://localhost:8080/board/bootstrap.min.css 로 파일을 찾지 못 함

 

2. context path "/test" 로 변경(server.servlet.context-path=/test)

   접근은 http://localhost:8080/test/bootstrap.min.css 로 해야함

  - localhost:8080/test, localhost:8080/test/board

    -> 4번째 http://localhost:8080/bootstrap.min.css로 파일을 찾지 못 함

  - localhost:8080/test/board/list

    -> 1, 5를 제외하고는 경로 에러

 

절대경로 + context path에 따라 맞춰 사용하고 c url은 JSESSIONID가 생기기 때문에 제거하는 설정을 사용하거나 EL 방식인 5번을 사용