Spring MVC - сервлету-диспетчеру не удается найти ни одной страницы - PullRequest
1 голос
/ 07 октября 2019

Я делаю действительно простое демонстрационное веб-приложение, используя Spring mvc, Java class annotations и .jsp вместо .html. Когда я запускаю Tomcat на localhost - я всегда получаю ошибку 404. Где я могу ошибиться?

Config.class

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.mylov.springsecurity.demo.config")
public class Config {

    //Define bean for ViewResolver
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/view/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

Инициализация сервлет-диспетчера

public class DispatcherServletInit extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{Config.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

Контроллер

@Controller
public class DemoController {

    @GetMapping({"", "/"})
    public String showHome() {
        return "home";
    }
}

Структура проекта:

enter image description here

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Вам необходимо сканировать пакеты в пакете demo . Поэтому Spring найдет ваши контроллеры и классы Config. Но теперь вы указываете только на конфиг. Таким образом, пакет «контроллер» не будет сканироваться.

Попробуйте сделать это:

@ComponentScan(basePackages = "com.mylov.springsecurity.demo")
0 голосов
/ 08 октября 2019

Попробуйте предоставить сопоставление, как показано ниже, чтобы все URL отображались с помощью сервлета:

public class DispatcherServletInit extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{Config.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/*"};
    }
}

Также измените базовые пакеты на следующие, чтобы класс контроллера также выбирался для сканирования компонентов:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.mylov.springsecurity.demo")
public class Config {
..........
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...