簡體   English   中英

無法在Spring Boot應用程序中訪問和使用靜態資源

[英]Unable to access and use static resources in Spring Boot Application

我一直在爭取使資源投入一段時間的工作,而且我知道有成千上萬個類似的問題。無論如何,我的情況是這樣

我將從pom開始。.我可能在這里錯過了什么?

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 

http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

<groupId>com.ruruapps</groupId>
<artifactId>spring-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>spring-demo</name>
<description>Spring-Demo Application</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.thymeleaf-version>2.1.4</org.thymeleaf-version>
    <webjars-bootstrap.version>3.3.5</webjars-bootstrap.version>
    <webjars-jquery-ui.version>2.1.1</webjars-jquery-ui.version>
    <webjars-jquery.version>2.0.3-1</webjars-jquery.version>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</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-security</artifactId>
    </dependency>
    <!-- Thymeleaf -->
    <!--<dependency>-->
        <!--<groupId>org.thymeleaf</groupId>-->
        <!--<artifactId>thymeleaf</artifactId>-->
        <!--<version>2.1.4.RELEASE</version>-->
    <!--</dependency>-->

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- Webjars (static dependencies distributed as WAR files) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap</artifactId>
        <version>3.3.5</version>
    </dependency>
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>jquery</artifactId>
        <version>2.1.4</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
</project>

這是我正在處理的錯誤

加載資源時出錯

在終端上,我看到了

Looking up handler method for path /css/bootstrap/css/bootstrap.min.css
Did not find handler method for [/css/bootstrap/css/bootstrap.min.css]
Request method 'GET' not supported

這是什么意思?

我有一個正確的結構,按照慣例

結構體

但是,從來沒有運氣過。 我嘗試更改為public /,並嘗試使用webjar。 一切都是徒勞。 這有什么規范,我該如何設置它,這樣才不會被打破! 謝謝!

編輯::配置文件

這是Spring Boot隨附的我的應用程序文件

@SpringBootApplication
@EnableAutoConfiguration(exclude = {
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.ManagementSecurityAutoConfiguration.class})
@ComponentScan(basePackages = {"webapp"})
@EnableJpaRepositories
public class SpringDemoApplication {

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

而且我有一個WebConfig文件,該文件通常是空的,但是我嘗試在addResourceHandlers上添加@Overide,沒有任何改進

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"webapp"})
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/resources/static/").setCachePeriod(31556926);
    }
}

編輯

在進一步檢查應用程序之后,我發現了這個

跟蹤輸出

它說它允許的請求是PUT,但是為什么呢? 據我了解,是某件事阻止了我對資源文件的請求,對嗎?

迫切需要解決此問題,即使使用Spring Boot,配置Spring也確實很麻煩!

發現了我無法訪問靜態資源所面臨的問題。 對於那些經歷相同的人:

此行為(405錯誤)表示某些東西正在阻止您的靜態資源的路徑。 不必是/ static或/ public。 它不會做任何事情。

就我而言,問題是控制器阻塞了/ css路徑。 要解決此問題,需要在類lvl上使用@RequestMapping(value = "/Somepath")注釋來釋放靜態資源的路徑。

這對我有用,現在我可以毫無問題地訪問我的靜態資源。

這可能是一個非常煩人的問題,有人可能要花數小時和數天的時間來解決這個問題。 希望這可以幫助其他人節省時間

如果有防止此行為的替代方法或其他方法,請在評論中提及

如果您嘗試通過注釋中提到的配置類來配置資源映射,那么應該像這樣:

@EnableWebMvc 
@ComponentScan(basePackages = {"org.company.yourpackage"})
@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/resources/static/").setCachePeriod(31556926);
    }
}

這篇文章也可能會有所幫助。

我遇到了完全相同的問題,是什么幫助我添加了:

enter code here
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.js</url-pattern>
</servlet-mapping>

要么

<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/js/*</url-pattern>
</servlet-mapping>

來自此后繼servlet的服務,此處用於提供靜態內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM