본문 바로가기
Spring/Spring MVC 5

URL Mapping

코동이 2020. 5. 24.

localhost:8080/aaaa/bbb.txt라는 tomcat 기반의 웹서비스 실행이 있다고 생각해보자.

이때 다시 처음 나오는 aaaa를 특별하게 context-path이다.(=어플리케이션 이름)

가장 최 상단은 webapps이고 그 안에 aaaa 폴더 안에 bbb.txt를 실행시킨 것이다. 

우리는 context-path 이후의 경로를 설계해야 한다.

 

eclipse에서 우리가 만든 코드들은 .plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps에 실행될 수 있게 변환되어 저장되어있다. 우리가 코드를 실행시키면 wtpwebapps로 복사가 되고 여기서 실행이 된다.

 

<Controller.class>

localhost:8080/MVCTEST/sub1/test1 -> @GetMapping("/sbu1/test1")
localhost:8080/MVCTEST/sub1/test2 -> @GetMapping("/sbu1/test2")
localhost:8080/MVCTEST/sub1/test3 -> @GetMapping("/sbu1/test3")
localhost:8080/MVCTEST/sub2/test1 -> @GetMapping("/sbu2/test1")
localhost:8080/MVCTEST/sub2/test2 -> @GetMapping("/sbu2/test2")
localhost:8080/MVCTEST/sub2/test3 -> @GetMapping("/sbu2/test3")

 

6개의 주소를 만들고 싶은데 Controller를 다음과 같이 정의하면,  구분하기 수정하기 불편하다.

 

 

<sub1Controller.class>
@Controller
@RequestMapping("/sub1")
public class sub1Controller{
	@GetMapping("/test1")
    public String test1(){
    	return "sub1/test1";
    }
    
    @GetMapping("/test2")
    public String test2(){
    	return "sub1/test2";
    }
    
    @GetMapping("/test3")
    public String test3(){
    	return "sub1/test3";
    }
}


<sub2Controller.class>
@Controller
@RequestMapping("/sub2")
public class sub2Controller{
	@GetMapping("/test1")
    public String test1(){
    	return "sub2/test1";
    }
    
    @GetMapping("/test2")
    public String test2(){
    	return "sub2/test2";
    }
    
    @GetMapping("/test3")
    public String test3(){
    	return "sub2/test3";
    }
}

하위 folder에 맞게 2개의 class로 분리해서 Controller를 만든다.

주의할 것은 RequestMapping을 먼저 설정했기 때문에 GetMapping에서는 그 이후에 경로를 설정한다.

하지만, return을 입력할 때는 전혀 관계가 없으므로 해당 주소를 정확히 다 입력해야 한다.

 

 

Get,Post mapping 2개 모두 같은 코드를 반환하는 경우

@GetMapping("/test8")
public String test8_get(){
	return "test8";
}

@PostMapping("/test8")
public String test8_post(){
	return "test8";
}

===============================================================

@GetMapping("/test8")
public String test8_get(){
	return test8_post();
}

@PostMapping("/test8")
public String test8_post(){
	return "test8";
}

===============================================================

@RequestMapping( value="/test8" method= {RequestMethod.GET, RequestMethod.POST})
public String test8(){
	return "test8";
}

get방식과 post방식의 return이 차이가 없을 때 나눠서 쓰거나 get에서 post를 반환하지 말고

RequestMapping 방식을 쓰면 간편하게 코드를 정의할 수 있다.

반응형