標籤:nbsp ping public 序列 reg type jackson ring tps
原文地址:SpringMvc4.2.5 零配置出現 No mapping found for HTTP request with URI
採用 spring 零配置,參考 http://hanqunfeng.iteye.com/blog/2113820,WebInitializer 類代碼如下:
public class WebInitializer implements WebApplicationInitializer { private static final Logger logger = LogManager.getLogger(WebInitializer.class); @Override public void onStartup(ServletContext servletContext) throws ServletException { logger.info("-------->啟動web應用"); /* * Log4jConfigListener: log4j 2日誌配置,設定檔為 classpath:log4j2.xml */ servletContext.addListener(new Log4jServletContextListener()); Log4jServletFilter log4jServletFilter = new Log4jServletFilter(); servletContext.addFilter("log4jServletFilter", log4jServletFilter); /* * OpenSessionInViewFilter: 加上該 filter 可以保證jackson能夠序列化LAZY FetchType */ OpenSessionInViewFilter openSessionInViewFilter = new OpenSessionInViewFilter(); FilterRegistration.Dynamic openSessionInViewFilterRegistration = servletContext .addFilter("openSessionInViewFilter", openSessionInViewFilter); //指定在spring配置的sessionFactory openSessionInViewFilterRegistration.setInitParameter("sessionFactoryBeanName", "sessionFactory"); //singleSession預設為true,若設為false則等於沒用OpenSessionInView openSessionInViewFilterRegistration.setInitParameter("singleSession", "true"); openSessionInViewFilterRegistration.addMappingForUrlPatterns( EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE), false, "/"); ServerParameter params = ServerParameter.getInstance(); DBMananger.loadEnv(); if(DBMananger.connDB()) { // 資料庫連接成功,再載入APP配置 params.addAttribute("connDBSataus", true); /* * spring mvc 外的配置 AppConfig類 */ AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.register(AppConfig.class); servletContext.addListener(new ContextLoaderListener(rootContext)); } /* * spring-mvc 上下文 */ AnnotationConfigWebApplicationContext springMvcContext = new AnnotationConfigWebApplicationContext();// springMvcContext.register(MvcConfig.class); /* * DispatcherServlet */ DispatcherServlet dispatcherServlet = new DispatcherServlet(springMvcContext); ServletRegistration.Dynamic dynamic = servletContext.addServlet("dispatcherServlet", dispatcherServlet); dynamic.setLoadOnStartup(1); dynamic.addMapping("/"); /* * CharacterEncodingFilter: 解決中文亂碼問題 */ CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("utf-8"); FilterRegistration characterEncodingfilterRegistration = servletContext.addFilter("characterEncodingFilter", characterEncodingFilter); characterEncodingfilterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*"); }}
MvcConfig 配置如下:
public class MvcConfig extends WebMvcConfigurationSupport { private static final Logger logger = LogManager.getLogger(MvcConfig.class); /** * 註冊視圖處理器 * @return */ @Bean public ViewResolver viewResolver() { logger.info("註冊視圖處理器-------->ViewResolver"); InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/jsp/"); viewResolver.setSuffix(".jsp"); return viewResolver; } /** * 資源訪問處理器 * 可以在jsp中使用/images/**的方式訪問/images/下的內容 */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { logger.info("資源訪問處理器-------->addResourceHandlers"); registry.addResourceHandler("/resources/**") .addResourceLocations("/resources/") .resourceChain(true).addResolver( new VersionResourceResolver().addContentVersionStrategy("/**")); }}
結果出現No mapping found for HTTP request with URI警告,訪問靜態資源時為404錯誤。
經調試發現,在MvcConfig類中加入下面Bean,問題解決
@Bean public HandlerMapping resourceHandlerMapping() { logger.info("HandlerMapping"); return super.resourceHandlerMapping(); }
為什麼要顯式聲明該Bean,尚未得知。
另外,如果在MvcConfig類中加註解,@Configuration,在WebInitializer類中配置
AnnotationConfigWebApplicationContext springMvcContext = new AnnotationConfigWebApplicationContext(); springMvcContext.register(MvcConfig.class);
將會導致MvcConfig載入兩次,可以注釋掉其中一邊。
SpringMvc4.2.5 零配置出現 No mapping found for HTTP request with URI(轉)