@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(value = "/big", method = RequestMethod.GET)
public String hello(){
return "hello/hello-main";
}
}
위처럼 컨트롤러를 만들어 놓았다.
예상대로라면 아래 URL로 접속할 수 있어야 한다.
http://localhost:8080/hello/big
그런데 접속이 되지 않았다.
컨트롤러에 프린트를 추가했다.
System.out.println("hello controller access");
콘솔에 출력되지 않았다.
아예 컨트롤러를 못 찾고 있었다.
매핑이 잘 못 됐나?
@RequestMapping("/hello")
@RequestMapping("/hello")
@RequestMapping("hello")
여러 방법으로 매핑을 설정해도 찾지 못했다.
그러다가 우연히 아래 URL로 접속 되는 걸 확인했다.
http://localhost:8080/hello/hello/big
잉 뭐지?
앞에 hello가 왜 붙지?
이 hello는 어디서 나온 거지?
컨트롤러 클래스의 이름과 관련이 있을까?
@Controller
public class HeyController {
@RequestMapping(value = "hi")
public String tt() {
return "hey-main";
}
}
위처럼 컨트롤러를 다른 이름으로 다시 만들어 보았다.
아래 주소로 접속이 된다면 가설이 맞을 것이다.
컨트롤러 이름이 앞에 붙는 것.
http://localhost:8080/hey/hi
접속이 되지 않았다.
대신 아래 주소로는 접속이 됐다.
http://localhost:8080/hello/hi
그렇다면 여기서 hello는 컨트롤러에서 온 것도 아니다.
찾아 본 결과, 여기서 /hello 는 web modules 설정값이었다.
이 web modules 기능은 path 값을 자동으로 덧붙여 준다.
어떨 때 쓰는 기능일까?
모듈에 따라 path 값을 다르게 설정해 놓고,
여러 패키지를 띄워 놓을 수 있다.

/hello 라는 path 로 접속할 때는 A 패키지를 보여주고,
/hey 라는 path 로 접속할 때는 B 패키지를 보여주고,
서버 하나를 올려 놓을 때 여러 패키지를 띄워 놓고 쓸 수 있게 된다.
이게 web module 세팅이다.
그리고 어떤 컨트롤러가 어떤 매핑으로 올라가는지,
console 창 보면 다 나온다.
항상 뭐가 안 되면 console부터 확인하는 습관을 기르자
'Java' 카테고리의 다른 글
| Spring이 service 인터페이스와 serviceImpl 를 연결하는 법 (0) | 2022.04.02 |
|---|---|
| AOP 란? 스프링 xml에서 <aop:config> 태그 용도 (0) | 2022.04.02 |
| [JAVA] 증감연산자 의미와 위치에 따른 종류 (ft. i++ 의미) (0) | 2022.03.19 |
| [JAVA] while 문에서 애초에 조건을 만족하지 않는다면? (ft. while문 do while문 차이) (0) | 2022.03.19 |
| [JAVA] switch 문을 반복문으로 바꾸기 (0) | 2022.03.19 |