본문 바로가기

Java

web modules 기능과 path 설정

@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부터 확인하는 습관을 기르자

반응형