-
스프링 레거시 프로젝트 톰캣 구동시 시작 url 설정http 웹기본지식 2024. 9. 4. 15:32
보통 스프링 프로젝트를 생성한 후 톰캣으로 구동하면 프로젝트명이 시작 url 로 설정되어있다.
만약 프로젝트를 springTest으로 생성하고 해당 프로젝트를 톰켓으로 구동하면 http://localhost:8080/springTest 으로 url 이 설정된다.
이유가 뭘까?
그 이유는 톰캣의 path 에 프로젝트명이 자동으로 설정되기 때문이다.
만약 저 부분을 /로 변경하면 http://localhost:8080/ 으로 url 이 설정된다.
그럼 의문이 들수있다. 저게 변경되면 controller url 매핑도 다 / -> /springTest 로 변경해야하는거 아닌가?
아래 url 접근 원리를 보면 url 매핑을 변경하지 않아도 된다는 것을 알 수 있다.
url 접근 원리
스프링의 URL 매핑이 톰캣의 컨텍스트 경로를 인식하는 방식은 다음과 같습니다:
- 스프링 컨트롤러는 URL 패턴을 정의합니다.
- 톰캣의 컨텍스트 경로는 애플리케이션의 루트 URL을 정의합니다.
- 실제 요청 URL은 http://localhost:8080/{context-path}/{controller-path} 형태로 결합되어 처리됩니다.
즉 /springTest 는 루트 url 을 의미하는것이기 때문에 controller mapping url 과는 관계가 없다.
만약 톰캣의 컨텍스트 경로가 아닌 컨트롤러 경로를 제어하려면?
<servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/spring/</url-pattern> </servlet-mapping>
- 다음과 같이 dispatcherServlet 경로를 / 에서 원하는 시작경로로 변경하면된다.
- 해당 태그의 의미는 dispatcherServlet 이 /spring 으로 시작하는 경로의 요청만 수행할 수 있다 라는 의미이다.
- dispatcherServlet 경로를 변경하면 컨트롤러 매핑부분도 아래와 같이 모두 변경시켜줘야한다.
@Controller public class HomeController { @GetMapping("/spring/") public String main() { return "main"; } }