2014-11-19 3 views
0

"/"의 url-patten에 대해 DispatcherServlet을 구성했습니다. @RequestMapping 내에서 값이 단지 /, 내가 배포하고 http://host/webapp/에 갈 경우 내가 그것을 변경하는 경우, 나는, 그러나, (404)를 얻을 수@Requestmapping ("/")은 Spring MVC에서 404를 생성합니다.

@Controller 
public class HomeController { 

    @RequestMapping("/") 
    public void home() { 
     System.out.print("Test"); 
    } 
} 

:

지금, 나는 다음과 같은 컨트롤러 코드가 /*이면 콘솔에 Test이 인쇄됩니다. 그것은 기본적 0 개 이상의 문자가 될 수 단지 /* 때문에 포함한 모든 경로를 잡는다, 그러나 왜 단순히 /에 매핑 않습니다 /* 작품으로하지 나를 위해 작동하는 이유

은 이해가?

어떻게 작동시킬 것인가보다, 나는 "왜"에 관심이 있습니다. @RequestMapping("/")이 사용되었고 아무도 그것이 틀렸다는 것을 말하는 것처럼 보였습니다. 그래서, 왜 나를 위해서 아니겠습니까? 무슨 일이 일어나고 있는지 알고 싶습니다.

도움이 될 것입니다. 여기

내 WebApplicationInitializer입니다 :

여기
public class MyWebInitializer 
    implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) 
    throws ServletException { 

    AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); 
    context.setConfigLocation("com.web"); 
    context.setServletContext(servletContext); 
    servletContext.addListener(new ContextLoaderListener(context)); 
    context.refresh(); 

    ServletRegistration.Dynamic dispatcher = servletContext 
     .addServlet("DispatcherServlet", new DispatcherServlet(context)); 
    dispatcher.setLoadOnStartup(1); 
    dispatcher.addMapping("/"); 
    System.out.println("WebInitializer.onStartup is complete"); 
    } 
} 

내 자바 구성되는 "com.web"패키지에 지적 context.setConfigLocation("com.web") 선으로에 :

@Configuration 
@EnableWebMvc 
@ComponentScan({"com.web"}) 
public class SpringConfig 
    extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    System.out.println("Configuring static resources."); 
    registry.addResourceHandler("/css/**").addResourceLocations("/css/"); 
    } 

    @Bean 
    public ViewResolver configureViewResolver() { 
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
    viewResolver.setPrefix("/WEB-INF/views/"); 
    viewResolver.setSuffix(".jsp"); 

    return viewResolver; 
    } 
} 

@RequestMapping("/")을하지 않습니다 HomeController 클래스에서 실행되지 않습니까?

+0

. 스프링 문서화에도 그러한 예가 있습니다. http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping – grid

+0

의 두 번째 목록을 참조하십시오. 생각 뿐이야. 그래서, 왜 그렇지 않은가? 질문에 내 구성 (자바 기반)을 붙여 넣을 것입니다. 어쩌면 올바르게로드하지 않을 수도 있지만 잘못된 것을보기가 어렵습니다. – user1902183

+0

Tomcat에 배포하고 있습니까? 그렇다면 어떤 버전입니까? – grid

답변

0

변경 당신은 단지 공격하려면 아래의 경우에 RequestMapping는

@RequestMapping(method = RequestMethod.GET) 

는 시도를주고 당신을 위해 밖으로 작동하는 방법을 알려주세요 "/".

그런 다음 추가 할 경우 매개 변수에 지수 값 매개 변수를 추가 말 : 그것은 작동해야

@RequestMapping(value = {"/","/index},method = RequestMethod.GET) 
+0

첫 번째 것은 의미가 있습니다. 어떤 GET 요청을 잡을 것입니다. 두 번째 것은 내가 100 % 이해하지 못하는 것입니다. 첫째, method = RequestMethod.GET은 필요하지 않습니다. 그것은 그것 없이도 작동 할뿐만 아니라 어쨌든 기본값입니다. 그러나 "/ index"를 추가하여 두 작업 (즉,/및/색인)을 만드는 것이 내가 얻지 못하는 이유입니다. 왜 그냥 "/"작동하지 않는가 ??? Spring에서/index에 대해 이야기하고 사용 가능/작동시키기 위해 무엇을하는 문서가 있습니까? – user1902183

+0

사실 나는 방금 시도했지만 "/ index"조차도 host/webapp /를 메소드에 매핑하기 위해 자체적으로 작동합니다. 당신이 저를 가리킬 수있는 몇 가지 문서가 있습니까? 나는 아무 것도 찾을 수 없다. – user1902183

+0

/index 그 자체로는/당신이 언급 한대로 그 자체로는 작동하지 않을 것입니다. 또한 metho = RequestMethod.GET은 두 번째 경우에는 필요하지 않으며 기본적으로 GET 호출을 자동으로 처리합니다. 개인적으로는 API, 참조 문서 및 실험 검토의 조합이었습니다. – Aeseir

관련 문제