无法在Spring Boot Application中访问和使用静态资源

时间:2015-07-03 09:16:12

标签: java spring maven spring-mvc spring-boot

我一直在努力争取资源工作很长一段时间,我知道有成千上万的类似问题..无论如何,我的条件是这个

我将从我的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>

以下是我正在处理的错误

Errors loading resources

在终端我看到了这个

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

这是什么意思?

我有一个正确的结构并通过惯例

来完成

Structure

但是没有运气。我尝试改为public /并尝试使用webjars。一切都是徒劳。这有什么规范,如何设置这样就不会破坏!谢谢!

编辑::配置文件

这是我的应用程序文件,随弹簧启动提供

@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);
    }
}

修改

在进一步检查申请后,我找到了这个

Trace output

它说它允许的请求是PUT,但为什么呢?根据我的理解,有些东西阻止了我对资源文件的请求,是吗?

迫切希望解决这个问题,即使使用Spring Boot,也很难配置Spring!

3 个答案:

答案 0 :(得分:4)

发现我遇到的问题是无法访问静态资源。 对于那些体验相同的人:

此行为(405错误)表示某些内容阻止了静态资源的路径。这不一定是/ static或/ public。它什么都不做。

在我的情况下,问题是控制器阻塞了/ css路径。要解决此问题,需要在类lvl上添加@RequestMapping(value = "/Somepath")注释以释放静态资源的路径。

这对我有用,现在我可以毫无问题地访问我的静态资源。

这可能是一个非常恼人的问题,有人可能花费数小时和数天试图解决这个问题。希望这有助于他人节省时间

如果有替代或其他方法可以防止这种行为,请在评论中提及

答案 1 :(得分:0)

如果您正在尝试按照评论中提到的配置类配置资源映射,那么它应该是这样的:

@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);
    }
}

this帖子也可以提供帮助。

答案 2 :(得分:0)

我遇到了完全相同的问题,是什么帮助我添加:

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

OR

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

来自这篇文章 servlet for serving static content here