Как индексный файл влияет на ваш весенний проект MVC?

1

У меня есть проект веб-приложения Spring mvc, который я делаю с набором весенних инструментов, я использую maven для добавления своих зависимостей и тимелеафа, чтобы сделать свое мнение.

У меня есть проект, настроенный на основе кода. У меня нет файлов xml.

"У меня DONT есть страница по умолчанию, которую вы можете настроить с помощью"

<welcome-file-list>
    <welcome-file></welcome-file>
</welcome-file-list>

У меня есть файл index.html в моей папке webapp, у меня есть все мои css, js, ajax-папки там, я не использую папку web-inf, чтобы поместить мои.html файлы

Моя проблема в том, что когда я помещаю этот URL http://localhost:8080/myapp/ мое приложение должно перейти на страницу, на которой находится этот контроллер

@RequestMapping(value = "/")
public String home() {
    logger.info("***HOME***");

    return "home.jsp";
}

но вместо этого он переходит на мою страницу index.html вместо перехода на home.jsp, и если я создам контроллер для моей страницы index.html, как это

    @RequestMapping(value = "/index")
    public String showIndex() {
       logger.info("***INDEX***");

        return "index.html";
    }

дает мне следующую ошибку:

"HTTP 500 - обработка запроса не выполнена, вложенное исключение - org.thymeleaf.exceptions.TemplateInputException: документ анализа синтаксиса: template =" index.html ", строка 56 - столбец 4"

Я думаю, что эта ошибка является beacuse, я использую thymeleaf, и в этой строке у меня есть <img> открытый без </img>.

Мой вопрос заключается в том, почему моя страница index.html работает, если я НЕ создаю контроллер, и он работает FINE, но если я создаю контроллер, как я полагаю, это не сработает.

У меня есть только один viewResolver в моем классе конфигурации и является thymeleaf view resolver, как этот index.html отображается без проблем, если у меня есть только один резольвер

это мой конфигурационный класс

@EnableWebMvc
@ComponentScan(basePackages = {"com.abc.myapp"})
@Configuration
public class ConfigApp extends WebMvcConfigurerAdapter{

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}
@Bean 
    public ServletContextTemplateResolver templateResolver() {
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
        resolver.setPrefix("/");
 //     resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        resolver.setOrder(1);
        resolver.setCacheable(false);
        return resolver;
    }

   @Bean
   public MessageSource messageSource() {
     ReloadableResourceBundleMessageSource messageSource = new                           ReloadableResourceBundleMessageSource();
    messageSource.setBasenames("classpath:messages/messages");
    messageSource.setUseCodeAsDefaultMessage(true);
    messageSource.setDefaultEncoding("UTF-8");
    messageSource.setCacheSeconds(0);// # -1 : never reload, 0 always reload
    return messageSource;
}
    @Bean 
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver());
        engine.setMessageSource(messageSource());

        return engine;
    }

    @Bean 
    public ThymeleafViewResolver thymeleafViewResolver() {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        resolver.setCache(false);
        return resolver;
    }

и это мой класс webInitializer

public class InitiaApp extends AbstractAnnotationConfigDispatcherServletInitializer {

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

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

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

и мой класс configRoot

@Configuration
public class ConfiguracionRoot {

}
  • 0
    Я предполагаю, что веб-сервер все еще пытается использовать разумные значения по умолчанию для отображения страницы приветствия. В вашем случае, поскольку веб-сервер может найти файл index.html в корневом контексте, он просто отображает страницу без отправки запроса в контроллер Spring. Во втором случае вы на самом деле вызываете контроллер, который возвращает представление тимелист. Thymeleaf требует правильно сформированный XML для правильного отображения в веб-браузере. Если вы удалите index.html и используете некоторые другие имена представлений, все должно работать как положено
Теги:
spring
spring-mvc
thymeleaf

1 ответ

0

Когда вы не используете контроллер, вы не используете распознаватель вида Thymeleaf. Это означает, что браузер является тем, который переводит html файл, который гораздо более прощает и не требует строгости HTML 5. При использовании контроллера вы вынуждены использовать Thymeleaf view resolver. В вашем представлении resolver у вас установлен режим шаблона HTML5. Также Thymeleaf требует, чтобы вы использовали хорошо сформированный XML, что означает, что каждому открытому тегу нужен закрытый тег. Прочтите 1.2 документации Thymeleaf для дальнейшего уточнения. http://www.thymeleaf.org/doc/usingthymeleaf.html

  • 2
    Вы должны дать свой ответ более подробно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню