Spring Core/자질구래 [spring] DispatcherServlet의 url은 왜 "/*"가 아니고 "/" 일까? - 평소에 궁금했었는데 찾아보지 못한 내용이 있었는데 바로 Legacy Spring에서 DispatcherServlet의 url mapping이 왜 "/*"가 아니라 "/"일까이다. DispatcherServlet의 urlmapping url mapping 방식 전통적으로 web.xml의 URL mapping에서 wildcard은 크게 3가지 형태로 사용된다. 형태 의미 /* 경로 기반의 매핑ex) /abc/* -> /abc/ 아래의 모든 요청, : /abc/def, /abc , /abc.do 등 사용 가능 *.ext 확장자 기반 매핑으로 경로에 상관 없이 확장자가 같은 모든 요청ex)*.do -> 확장자가 do인 모든 요청: /abc.do, /abc/def/ghi.do / 어떤 URL 매핑에도 연결되지 않았을 때 최후의 수단ex) / -> /abc/def/ghi.do, /abc 등 모든 요청 만약 1번, 2번, 3번이 적용된 servlet이 있다면 1번 url의 servlet이 모든 요청을 다 매핑해서 처리한다. 여기서 1번이 없고 2, 3번만 있다면 확장자가 ext에 해당하는 요청은 2번이, 나머지는 3번이 처리한다. 즉 ext가 do일 때 /abc.do는 2번이 처리하고 /abc는 3번이 처리한다. 마지막으로 1, 2 번이 없고 3번만 있다면 이 녀석도 모든 요청을 다 처리해준다. 그런데 왜 /*가 아닌 / 일까? /*는 모든 요청을 처리하기는 하지만 막상 servlet에서 getServletPath() 명령으로 요청된 path를 찾아보면 빈 문자열이 반환된다. This method will return an empty string ("") if the servlet used to process this request was matched using the "/*" pattern. 따라서 /*로 DispatcherServlet을 매핑시켜버리면 어떤 요청인지 알 수 없기 때문에 @Controller의 @RequestMapping에 url을 넘겨줄 수 없는 것이다.! url 사용 시 주의! 하지만 / 요청은 servlet의 url mapping에 사용된다. 즉 filter에는 /형태로 url을 사용하면 동작하지 않는다. urlmappingtest.zip 0.01MB 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기모두의 코딩 저작자표시 비영리 변경금지 Contents DispatcherServlet의urlmapping urlmapping방식 그런데왜/*가아닌/일까? url사용시주의! 당신이 좋아할만한 콘텐츠 레거시 스프링 프로젝트 작성 절차 2024.10.25 Spring Legacy To SpringBoot 2023.10.30 [spring]SQL script를 활용한 DB 초기화 2022.12.03 [spring]classpath vs classpath* 2022.12.03 댓글 0 + 이전 댓글 더보기