• SpringMvc4.2.5 零配置出现 No mapping found for HTTP request with URI(转)


    原文地址: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加载两次,可以注释掉其中一边。

    
    
  • 相关阅读:
    Python学习2——使用字符串(完整版)
    Python补充4——替换与修改
    Python学习3——列表和元组
    数据结构链表——双向链表
    数据结构链表—— 循环链表
    数据结构链表——静态链表
    LeetCode 61——旋转链表(JAVA)
    LeetCode 2——两数相加(JAVA)
    LeetCode 328——奇偶链表(JAVA)
    HillCrest Sensor HAL
  • 原文地址:https://www.cnblogs.com/huanghongbo/p/8920318.html
Copyright © 2020-2023  润新知