복붙노트

[SPRING] 주석이없는 Spring MVC 3.1?

SPRING

주석이없는 Spring MVC 3.1?

Spring 3.1과 함께 새로운 프로젝트를 시작하고 @Controller 어노테이션을 사용하는 방법에 대한 모든 문서와 포럼 의견에 깊은 관심을 기울여 왔습니다.

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

또한 Spring 2.x를 사용하여 이전의 많은 작업에서 BaseCommandController 계층 구조에 익숙했습니다.

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

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

최신 정보:

안녕하세요, Dave, 이처럼 여러 개의 URL을 매핑 할 수 있다는 말씀입니까 (petclini.web.ClinicController에서 변경)?

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

이것이 잘 작동하면 좋습니다.

제 질문은 여전히 ​​유효합니다. 내 Java 소스에 URL을 원하지 않으면 @Controller 클래스와 매핑하는 것이 가장 좋습니다.

문안 인사,

해결법

  1. ==============================

    1.주석 및 주석이 달린 컨트롤러를 지원하는 간단한 설정이 있습니다.

    주석 및 주석이 달린 컨트롤러를 지원하는 간단한 설정이 있습니다.

    Dispatcher 서블릿 구성 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 annotation-config 용 컨트롤러

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

    @Controller 어노테이션에 자신의 핸들러를 사용하고자한다면. ClassPathBeanDefinitionScanner 및 DefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods를 살펴볼 수 있습니다.

  2. from https://stackoverflow.com/questions/9991519/spring-mvc-3-1-without-annotations by cc-by-sa and MIT license