1
我是新來Spring MVC的 &經歷克雷格牆Spring4 in Action。關係B/W的控制方法視圖名稱和@RequestMapping(值= 「/ ...」)Spring MVC中
考慮片斷,
@RequestMapping(value = "/spittles", method = RequestMethod.GET)
public String spittles(Model model, @RequestParam("max") long max,
@RequestParam("count") int count) {
model.addAttribute("spittleList",spittleRepository.findSpittles(max, count));
return "spittles"; // <-- return view name
}
該圖像示出了spittles.jsp駐留在/WEB-INF /視圖/
WebConfig的.java:
@Configuration
@EnableWebMvc // Enable Spring MVC
@ComponentScan(basePackages={"org.spittr"})
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver =
new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
/* configure static content handling */
configurer.enable();
}
}
1)爲什麼我需要返回字符串「spittles」在控制器的方法?
2)是否(返回字符串)保持對所述
@RequestMapping的關係(值= 「/ spittles」,方法= RequestMethod.GET)
作爲值(/spittles)是相同的控制器方法中返回的字符串?
3)爲什麼我看不到一個.jsp擴展當我進入URL
這一切都與視圖解析器如何在MVC中工作有關。廣告1)這是應該顯示給用戶的視圖(jsp頁面)的名稱。廣告2)號碼URL映射與視圖解析不直接相關。廣告3)在MVC中,您只能看到視圖的名稱(JSP只是表示層,您可以使用Thymeleaf而不是JSP,它將以非常類似的方式工作)。 –
@ R4J:但是,如果我只是從控制器方法返回null,它也可以工作。 –
是的,即使你返回null也行,因爲視圖解析器InternalResourceViewResolver通過爲jsp添加前綴/後綴來解析@Controllers的視圖。如果該JSP存在,那麼它呈現其他顯示jsp未找到錯誤。 –