Приложение Spring 404 для файла CSS, но не для файла HTML - PullRequest
0 голосов
/ 13 мая 2019

Решение: класс SpringWebConfig не был выбран, потому что он был в другом пакете, чем приложение.Как только я собрал их и немного подправил пути, все заработало как задумано.Последовал плохой гид по настройке пакета.Спасибо всем за помощь!

У меня есть приложение Spring, которое я пытаюсь настроить с аннотацией.На localhost при тестировании Spring возвращает HTML-страницы в src / main / resources / templates, но ничего, что я указал в моем файле config.java, не соблюдалось.Я также не могу заставить браузер загружать любые CSS-файлы в src / main / resources / static.Мне никогда не удавалось заставить эту вещь что-либо разрешить в WEB-INF.

Я прочитал около ста руководств по настройке аннотаций, конфигурации xml, и сегодня я перенастраивал это около десятка раз,Здесь также есть тонна тем, но ничего не помогло.Как будто ни одно из моих изменений в моем webconfig.java не вызывается вообще.

Настройка пути - это css файлы в src / main / resources / static и html в src / main / resources / templates.

Приложение:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);
    }

Springвеб-конфигурация:

@EnableWebMvc // mvc:annotation-driven
@Configuration
@ComponentScan({"config"})
public class SpringWebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("static/");
    }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/static/");
        viewResolver.setSuffix(".html");
        System.out.println("test");
        return viewResolver;
    }


    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
      configurer.enable("WebInitializer"); 
    }

}

Инициализатор сервлета:

public class WebInitializer {

    public class MyWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

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

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

    }

}

replaytemplate.html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="ISO-8859-1"></meta>
<title>$title</title>
<link rel="stylesheet" href="/static/main.css" type="text/css"></link>
</head>
<body>
    <div class="topnav">
        <a class="active" href="#Patreon">Patreon</a> <a href="#Stats">Stats</a>
        <a href="#Ladder">Ladder</a> <a href="#Tournaments">Tournaments</a> <a
            href="#Adv. Search">Adv. Search</a> <a href="#Forum">Forum</a> <a
            href="#Wiki">Wiki</a>
</div>
<ul>
    <li>$ReplayID</li>
    <li>$TimePlayed</li>
    <li>$TimeUploaded</li>
    <li>$GameLength</li>
    <li>$Map</li>
    <li>$P1URL</li>
    <li>$P1Race</li>
    <li>$P2URL</li>
    <li>$P2Race</li>
</ul>
</body>
</html>

Я могу разрешить эту веб-страницу, но Chrome 404 в файле CSS,У меня аналогичные результаты с upload.html и dropzone.css.

Я просто хочу иметь возможность понять, что происходит и почему, и, похоже, я не могу найти никаких руководств, объясняющих, почему на springwebconfig.java не ссылаются, или где я 'm предназначено для размещения любого из файлов HTML или CSS.Я видел множество руководств по WEB-INF, но я никогда не смогу найти ссылки на те, которые нужно решить.Должен ли я иметь некоторые конфигурации XML в дополнение к этому?У меня есть настройка, которая теперь хорошо решает upload.html, но в chrome я получаю 404 при обращении к файлам css.

TL; DR Ничто в SpringWebConfig, похоже, не работает с viewresolver.Я должен переместить html-файлы в src / main / resources / templates для разрешения, и когда это происходит, я получаю 404 файла css, независимо от того, на что я изменяю href, похоже.Иногда, когда я изменяю href (я думаю, что иногда понимаю, что все правильно), в консоли eclipse ничего не отображается, он просто не применяет css и выдает 404 in chrome для файла css.В других случаях я получаю ошибку разрешения шаблона в Eclipse, а 404 в Chrome.

Редактировать: pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://maven.apache.org/POM/4.0.0">
        <modelVersion>4.0.0</modelVersion>
        <groupId>continuum</groupId>
        <artifactId>Continuum</artifactId>
        <version>0.1.0</version>
        <packaging>war</packaging>
        <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>1.3.2.RELEASE</version>
        </parent>
        <dependencies>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-thymeleaf</artifactId>
                </dependency>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                        <scope>provided</scope>
                </dependency>
                <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
                <dependency>
                        <groupId>scelight</groupId>
                        <artifactId>Scelight</artifactId>
                        <version>1.0</version>
                </dependency>
                <dependency>
                        <groupId>com.microsoft.sqlserver</groupId>
                        <artifactId>mssql-jdbc</artifactId>
                        <version>7.0.0.jre8</version>
                </dependency>
                <dependency>
                        <groupId>org.hibernate</groupId>
                        <artifactId>hibernate-core</artifactId>
                        <version>4.3.11.Final</version>
                </dependency>
                <dependency>
                        <groupId>c3p0</groupId>
                        <artifactId>c3p0</artifactId>
                        <version>0.9.1.2</version>
                </dependency>
                <dependency>
                        <groupId>org.apache.commons</groupId>
                        <artifactId>commons-lang3</artifactId>
                        <version>3.8.1</version>
                </dependency>
                <dependency>
                        <groupId>org.apache.poi</groupId>
                        <artifactId>poi</artifactId>
                        <version>4.0.1</version>
                </dependency>
        </dependencies>
        <properties>
                <java.version>1.8</java.version>
        </properties>
        <build>
                <plugins>
                        <plugin>
                                <groupId>org.springframework.boot</groupId>
                                <artifactId>spring-boot-maven-plugin</artifactId>
                        </plugin>
                        <plugin>
                                <artifactId>maven-war-plugin</artifactId>
                                <version>2.6</version>
                                <configuration>
                                        <failOnMissingWebXml>false</failOnMissingWebXml>
                                </configuration>
                        </plugin>
                </plugins>
        </build>
        <repositories>
                <repository>
                        <id>spring-milestone</id>
                        <url>https://repo.spring.io/libs-release</url>
                </repository>
        </repositories>
        <pluginRepositories>
                <pluginRepository>
                        <id>spring-milestone</id>
                        <url>https://repo.spring.io/libs-release</url>
                </pluginRepository>
        </pluginRepositories>
</project>

Ответы [ 3 ]

0 голосов
/ 13 мая 2019

посмотрите на https://www.mkyong.com/spring-boot/spring-boot-hello-world-example-jsp/,, вам не нужно настраивать распознаватель

0 голосов
/ 13 мая 2019

Ваша ссылка на таблицу стилей CSS, похоже, неверна.Я вижу, что вы используете thymeleaf, чтобы вы могли сделать что-то вроде ниже, чтобы связать свой файл CSS:

<link rel="stylesheet" type="text/css" th:href="@{/main.css}"/>

Статический каталог подается из /.Таким образом, ваш src/main/resources/static/main.css будет обслуживаться с /main.css.Вышеприведенное также может быть записано как

<link rel="stylesheet" type="text/css" href="/main.css"/>

Я вижу, вы использовали @EnableWebMvc в своем приложении, которое отключит автоматическую настройку Spring Boot Spring MVC

0 голосов
/ 13 мая 2019

Это просто неправильно, потому что вы не учитываете контекст. Пожалуйста, отметьте http://server/context/static/main.css.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...