2014-03-05 1 views
0

Spring MVC 프레임 워크로 웹 애플리케이션 개발을 배우려고하고 있는데 컨트롤러 매핑이 어떻게 작동하는지 완전히 알지 못합니다. 설정과 코드를 먼저 표시 한 다음 내가 이해하지 못하는 것을 설명하면 더 낫습니다.Spring 3.2.6을 사용한 핸들러 메소드 매핑

@Controller 
@RequestMapping("/main/courses") 
public class CourseController { 
... 

이 컨트롤러에서 문제가되는 방법의 매핑 :

@RequestMapping(value="", method = RequestMethod.GET) 
    public String getCourses(Model model) {  
... 

내 컨트롤러 클래스의

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

매핑 :

여기 내 web.xml에 매핑입니다 보시다시피, value 속성은 빈 따옴표로 설정되어 있으며 이것이이 매핑의 유일한 방법입니다 작동합니다. value 속성을 "/"으로 변경하면 404 오류가 발생합니다. 이 컨트롤러에서 잘 작동하는 다른 매핑이 있습니다 (예 : value="/add"). 유일한 문제는이 컨트롤러의 루트에 매핑하려고 할 때입니다.

value=""은 유효한 값입니까? 왜 value="/"이 작동하지 않습니까?

+0

(으)로해야합니다. 아무도 비슷한 문제가 없었습니까? –

+1

그래서 http : // localhost : port/context/main/courses가 getCourses()에 매핑되도록 하시겠습니까 ??? requestMapping 어노테이션에서 "Value"속성을 제거하기 만하면, 그 uri에 대한 모든 GET 요청은 getCourses() 메소드에 의해 처리 될 것이다. – M4ver1k

답변

0

클래스 수준에서 사용되는 @RequestMapping은 모든 처리기 메서드가 해결할 기본 경로 매핑을 설정합니다. 당신이 경로 요소로 추가

@RequestMapping("/add") 

같은 방법에 또 다른 @RequestMapping를 지정하면 사용자의 예에서

, 즉

@RequestMapping("/main/courses") 

입니다. 당신은 당신이 새 경로 요소를 추가 그래서

@RequestMapping("/") 

처럼 다른이 있지만, 요소 자체가 비어 있으면 그래서 요청이

/main/courses/add 

로 할 필요가있다. 그래서 요청은 그냥 빈 String의,

@RequestMapping("") 

새로운 경로 요소가없는 같은 매핑을

/main/courses/ 

로 할 필요가있다. 따라서 요청은

/main/courses 
+0

좋습니다. @RequestMapping (value = "", method = RequestMethod.GET)'을 사용하는 것이 좋습니까? 아니면 단지 "value"속성'@RequestMapping (method = RequestMethod.GET)'을 생략해야합니까? –

+0

@just_a_girl 값을 생략해도 동등합니다. INFO 레벨에서 로깅을 사용 가능하게하면 생성 된 경로 맵핑을 볼 수 있습니다. –

관련 문제