java - 在 Java 8 Spring 4.2.4 中加载静态资源时获取 404

标签 java spring spring-mvc tomcat

我有一个以编程方式设置的 Java 8 Spring 4.2.4 应用程序。但是,我在我的 Tomcat 访问日志中得到以下信息 -(CSS 和 JS):

127.0.0.1 - - [22/Feb/2016:11:54:02 -0600] "GET /javafullstack/ HTTP/1.1"   200     34257
127.0.0.1 - - [22/Feb/2016:11:54:02 -0600] "GET /javafullstack/resources/font-awesome/css/font-awesome.min.css HTTP/1.1" 404 992
127.0.0.1 - - [22/Feb/2016:11:54:02 -0600] "GET /javafullstack/resources/js/classie.js HTTP/1.1" 404 992
127.0.0.1 - - [22/Feb/2016:11:54:02 -0600] "GET /javafullstack/resources/js/jquery.js HTTP/1.1" 404 992
127.0.0.1 - - [22/Feb/2016:11:54:02 -0600] "GET /javafullstack/resources/js/bootstrap.min.js HTTP/1.1" 404 992

等等

这是我所拥有的:

package com.thoughtscript.javafullstack.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.resource.PathResourceResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.thoughtscript.javafullstack")
public class Config {

@Bean
public UrlBasedViewResolver setupViewResolver() {
    UrlBasedViewResolver resolver = new UrlBasedViewResolver();
    resolver.setPrefix("/webapp/");
    resolver.setSuffix(".jsp");
    resolver.setViewClass(JstlView.class);
    return resolver;
}

@Bean
public JpaTransactionManager jpaTransMan() {
    JpaTransactionManager jtManager = new JpaTransactionManager(getEntityManagerFactoryBean().getObject());
    return jtManager;
}

@Bean
public LocalEntityManagerFactoryBean getEntityManagerFactoryBean() {
    LocalEntityManagerFactoryBean lemfb = new LocalEntityManagerFactoryBean();
    lemfb.setPersistenceUnitName("localEntity");
    return lemfb;
}

public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(3600)
            .resourceChain(true).addResolver(new PathResourceResolver());
}
}

所有相关的东西都在爆炸 war 中: javafullstack\资源

否则项目设置是: javafullstack\src\main\webapp\resources

示例 .jsp 片段:

           <!-- jQuery -->
            <script src="<c:url value="/resources/js/jquery.js "/>"></script>

            <!-- Bootstrap Core JavaScript -->
            <script src="<c:url value="/resources/js/bootstrap.min.js "/>"></script>

            <!-- Plugin JavaScript -->
            <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"></script>
            <script src="<c:url value="/resources/js/classie.js "/>"></script>
            <script src="<c:url value="/resources/js/cbpAnimatedHeader.js "/>"></script>

            <!-- Contact Form JavaScript -->
            <script src="<c:url value="/resources/js/jqBootstrapValidation.js "/>"></script>
            <script src="<c:url value="/resources/js/contact_me.js "/>"></script>

            <!-- Custom Theme JavaScript -->
            <script src="<c:url value="/resources/js/freelancer.js "/>"></script>

            <!-- Custom -->
            <script src="<c:url value="/resources/js/custom.js "/>"></script>

非常感谢任何帮助!

最佳答案

好的,这是因为我未能在 Config 类中扩展 WebMvcConfigurerAdapter。通过扩展,我可以覆盖 addResourceHandlers()。

它应该是这样的:

package com.thoughtscript.javafullstack.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.resource.PathResourceResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.thoughtscript.javafullstack")
public class Config extends WebMvcConfigurerAdapter{

    @Bean
    public UrlBasedViewResolver setupViewResolver() {
        UrlBasedViewResolver resolver = new UrlBasedViewResolver();
        resolver.setPrefix("/webapp/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        return resolver;
    }

    @Bean
    public JpaTransactionManager jpaTransMan() {
        JpaTransactionManager jtManager = new JpaTransactionManager(getEntityManagerFactoryBean().getObject());
        return jtManager;
    }

    @Bean
    public LocalEntityManagerFactoryBean getEntityManagerFactoryBean() {
        LocalEntityManagerFactoryBean lemfb = new LocalEntityManagerFactoryBean();
        lemfb.setPersistenceUnitName("localEntity");
        return lemfb;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(3600)
                .resourceChain(true).addResolver(new PathResourceResolver());
    }
}

关于java - 在 Java 8 Spring 4.2.4 中加载静态资源时获取 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35560934/

相关文章:

java - 如何指定Spring应该使用哪个子类

java - Spring boot 中匿名用户的 oAuth token

java - 如何检查 th :utext in thymeleaf page 的值

java - Azure Web 应用服务日志记录中的 Spring Boot MVC 未按预期工作

java - Hibernate 3.6.7 到 4.0.1 升级,嵌套事务

java - java中溢出整数是如何存储的?为什么?

java - Jackson:获取反序列化的空引用

java - 通过 ajax 发送 Map<String,List<String>> 作为请求参数

java - jersey-spring 版本,带有 spring 4.2.5

Java GUI 测试与图像识别?