首页 > 解决方案 > 在名称为“SpringDisptacher”的 DispatcherServlet 中找不到具有 URI [/WorkforceManagement/] 的 HTTP 请求的映射

问题描述

我是 Spring MVC 的新手,我正在尝试构建一个应用程序。但是,在运行应用程序时,我收到一个错误消息“没有找到带有 URI 的 HTTP 请求的映射”。我也包括我的代码和控制台日志。请帮我解决这个问题

这是我的 Web App Initializer 类

public class SpringWebAppInitializer implements WebApplicationInitializer {

    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
        appContext.register(ApplicationContextConfig.class);

        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("SpringDisptacher", new DispatcherServlet(appContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

        // UtF8 Charactor Filter.
        FilterRegistration.Dynamic fr = servletContext.addFilter("encodingFilter", CharacterEncodingFilter.class);
        fr.setInitParameter("encoding", "UTF-8");
        fr.setInitParameter("forceEncoding", "true");
        fr.addMappingForUrlPatterns(null, true, "/");

    }

}

这是我的 ApplicationContextConfig 类

@Configuration
@ComponentScan("com.wfm.account.*")
@EnableTransactionManagement
public class ApplicationContextConfig {

    @Autowired
    private static Environment env;

    private static final String JDBC_DRIVER_CLASS = "oracle.jdbc.driver.OracleDriver";
    private static final String JDBC_URL = "URL";
    private static final String DB_USERNAME = "cisadm";
    private static final String DB_PASSWORD = "PASSWORD";


    @Bean(name = "viewResolver")
    public InternalResourceViewResolver getViewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Bean(name = "dataSource")
    public DataSource getDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        //Set Driver properties
        dataSource.setDriverClassName(JDBC_DRIVER_CLASS);
        dataSource.setUrl(JDBC_URL);
        dataSource.setUsername(DB_USERNAME);
        dataSource.setPassword(DB_PASSWORD);


        System.out.println("Data Source is : " + dataSource);

        return (DataSource) dataSource;
    }

    @Bean(name = "transactionManager")
    public DataSourceTransactionManager getTransactionmanagerDataSource() {
        DataSourceTransactionManager txManager = new DataSourceTransactionManager();

        DataSource dataSource = this.getDataSource();
        txManager.setDataSource(dataSource);

        return txManager;

    }

}

这是我的控制器

    public class UserController {

    @Autowired
    private UserDao userDao;

    @RequestMapping(value = {"/"}, method = RequestMethod.GET)
    public String welcome(Model model) {
        userDao.insertUser("SYSUSER", "sysuer15", "abc@com.au", "0893266188");
        User userDetails = userDao.findUser("N018003");
        model.addAttribute("user", userDetails);
        return "welcome";
    }

}

此控制台日志

16:36:06.795 [main] DEBUG o.s.web.servlet.DispatcherServlet - Published WebApplicationContext of servlet 'SpringDisptacher' as ServletContext attribute with name [org.springframework.web.servlet.FrameworkServlet.CONTEXT.SpringDisptacher]
16:36:06.797 [main] INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'SpringDisptacher': initialization completed in 2828 ms
16:36:06.798 [main] DEBUG o.s.web.servlet.DispatcherServlet - Servlet 'SpringDisptacher' configured successfully
Dec 20, 2018 4:36:06 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
Dec 20, 2018 4:36:06 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-8009"]
Dec 20, 2018 4:36:06 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in [11,285] milliseconds
16:36:08.335 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'SpringDisptacher' processing GET request for [/WorkforceManagement/]
16:36:08.355 [http-nio-8080-exec-2] WARN  o.s.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/WorkforceManagement/] in DispatcherServlet with name 'SpringDisptacher'
16:36:08.356 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet - Successfully completed request

标签: spring-mvc

解决方案


当我浏览了您的代码时,一切似乎都很完美,除了:-

  • @EnableWebMvc 用于 ApplicationContextConfig 文件。
  • @Controller 用于 UserController 文件。

我使用您的代码开发了我的简单解决方案,您可以在下面找到它:-

配置类:-

@EnableWebMvc
@Configuration
@ComponentScan("com.sof.controller")
public class ApplicationContextConfig {
    @Bean(name = "viewResolver")
    public InternalResourceViewResolver getViewResolver() {
       InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
       viewResolver.setPrefix("/WEB-INF/views/");
       viewResolver.setSuffix(".jsp");
       return viewResolver;
    }
}

SpringWebAppInitializer 类:-

public class SpringWebAppInitializer implements WebApplicationInitializer {
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
        appContext.register(ApplicationContextConfig.class);

        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("SpringDisptacher", new DispatcherServlet(appContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}

用户控制器类

@Controller
public class UserController {

    @RequestMapping(value = {"/"}, method = RequestMethod.GET)
    public String welcome(Model model) {
      //  userDao.insertUser("SYSUSER", "sysuer15", "abc@com.au", "0893266188");
      //  User userDetails = userDao.findUser("N018003");
        model.addAttribute("user", "Hi Roumil");
        return "welcome";
    }
}

本项目源代码

如果您还有任何疑问,我很乐意为您提供帮助...


推荐阅读