2012-04-03 4 views
4

나는 Spring 3.1로 새로운 프로젝트를 시작하고 @Controller 어노테이션을 사용하는 방법에 대한 모든 문서와 포럼 의견에 깊이 관여 해왔다.주석이없는 Spring MVC 3.1?

저는 MVC 용 주석을 개인적으로 싫어합니다. 필자는 SimpleUrlHandlerMapping을 사용하여 한 곳에서 webapp의 모든 URL을 사용할 수있는 것을 선호합니다.

또한 스프링 2.x를 사용한 많은 이전 연구에서, 저는 BaseCommandController 계층에 매우 익숙합니다.

나는 제한받지 않고 권한을 부여하기 때문에 항상 Spring을 좋아했습니다. 이제 스프링 MVC가 URL을 java 소스에 넣도록 강요한다는 것을 알았습니다. (a) 컨트롤러를 여러 URL에 매핑 할 수 없으며 (b) 웹 애플리케이션에서 어떤 URL이 사용 중인지 알아 내기 위해 스캔해야합니다. 다른 자바 소스 파일을 통해, 나는 비실용적이라고 생각한다.

@Controller와 SimpleUrlHandlerMapping을 결합하는 권장 방법은 무엇입니까?


업데이트 :

안녕 데이브, 당신은 당신이 이런 식으로 (petclini.web.ClinicController에서 변경) 여러 URL을 매핑 할 수 있습니다 말?

@RequestMapping({"/vets", "/another"}) 
public ModelMap vetsHandler() { 

다음이 작동하면 좋습니다.

내 질문에 여전히 머물러 있습니다. URL을 내 Java 소스에 넣지 않으려면 @Controller 클래스와 매핑하는 것이 가장 좋습니다.

감사합니다, 여기에

+0

여러 개의 URL을 더 이상 매핑 할 수 없다는 것을 알지 못합니다. 문서 참조가 있습니까? –

+0

@ (사용자 이름)을 주석으로 사용하여 주석에 응답 - 원래 질문에 묻어있는 질문을 다른 사람에게 보게되면 절대 보지 못할 수도 있습니다. 나는 당신에게 * 그것이 바뀌 었는지 묻고 있는데 만약 그렇다면 문서 링크를 제공한다. 개인적으로 나는 [this] (https://github.com/bclozel/springmvc-router)와 같은 것을 라우팅에 사용합니다. 나는 내 자신을 굴렸다. 그러나 분명히 다른 누군가도 그렇게했다. –

+0

@Dave Newton : 링크를 가져 주셔서 감사합니다. (BTW : 나는 코드에서 형식을 지정할 수 있도록 질문에서 대답했다.) – Stewart

답변

3

는 주석과 비 주석 컨트롤러를 지원하도록 설정 간단합니다.

디스패처 서블릿 구성 XML

<mvc:annotation-driven/> 
<bean id="testController" class="com.test.web.TestController"/> 
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> 
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
     <value> 
     /test=testController 
     </value> 
    </property> 
    <property name="order" value="0"/> 
</bean> 

간단한 URL 매핑 컨트롤러

public class TestController implements Controller { 

    @Override 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 
     PrintWriter responseWriter = response.getWriter(); 
     responseWriter.write("test"); 
     responseWriter.flush(); 
     responseWriter.close(); 
     return null; 
    } 
} 

당신이 당신의 자신의 핸들러를 사용하려면 MVC 주석 - 설정

@Controller 
@RequestMapping("/home") 
public class HomeController { 

    @RequestMapping(method = RequestMethod.GET) 
    @ResponseBody 
    public String dashboard(Model model, HttpServletRequest request) { 
     return "home"; 
    } 
} 

에 대한 컨트롤러 @Controller 어노테이션. 아마도 ClassPathBeanDefinitionScannerDefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods을 들여다 볼 수 있습니다.

+0

이것은 유효 해 보입니다.하지만 컨트롤러 인터페이스가 아닌 SimpleUrlHandlerMapping을 사용하여 @Controller에 대해 특별히 묻고있었습니다. 특히이 인터페이스의 많은 구현이 이제는 더 이상 사용되지 않으므로 특히주의해야합니다. – Stewart

+0

서브 클래스 계획과 비슷합니다. http://grepcode.com/file/repo1.maven.org/maven2/org.springframework/spring-webmvc/3.1.0.RELEASE/org/springframework/web/servlet/mvc/ annotation/DefaultAnnotationHandlerMapping.java # DefaultAnnotationHandlerMapping.detUrlsForHandler % 28java.lang.String % 29 아마도 springmvc-router가 시도한 것입니까? – Stewart

관련 문제