SpringMvc4.2.5 零配置出現 No mapping found for HTTP request with URI

來源:互聯網
上載者:User

標籤: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(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.