将.war文件部署到tomcat 8在IDE中工作正常,但是当我部署到我的VPS时,我丢失了所有的JS和CSS

Dre*_*208 6 java tomcat spring-boot

我有一个spring-boot应用程序.当我开始在我的intellij IDE中运行Tomcat 8.0_35我没有问题,看起来很棒.我决定部署在我的VPS上,只有HTML渲染.我通过手动将.war文件放入webapps,在我的localhost上复制了这个问题.由于我收到所有404错误,我想我可能需要设置一个webconfig类:

@Configuration
public class WebConfiguration extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter {

    private static final Logger log = Logger.getLogger(WebMvcAutoConfiguration.class);

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);

        registry.addResourceHandler("/css/**").addResourceLocations("/resources/css/");

        registry.addResourceHandler("/image/**").addResourceLocations("/resources/image/");

        registry.addResourceHandler("/images/**").addResourceLocations("/resources/images/");

        registry.addResourceHandler("/javascripts/**").addResourceLocations("/resources/javascripts/");

        registry.addResourceHandler("/libs/**").addResourceLocations("/resources/lib/");

    }

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

    @Bean
    public DispatcherServlet dispatcherServlet(){
        DispatcherServlet dispatcherServlet = new DispatcherServlet();

        dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);

        return dispatcherServlet;
    }

    @Bean
    public ServletContextTemplateResolver templateResolver() {
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        resolver.setOrder(1);
        return resolver;
    }

}  
Run Code Online (Sandbox Code Playgroud)

我需要的是ServletContextTemplateResolver因为我使用的是spring-mobile而且我在渲染页面时遇到了问题.

我没有看到在Tomcat的日志或者任何localhost.logcataline.log

@SpringBootApplication
public class StidhamFinancialApplication extends SpringBootServletInitializer {

    public static void main(String[] args) throws UnknownHostException {
        SpringApplication app = new SpringApplication(StidhamFinancialApplication.class);

        Environment env = app.run(args).getEnvironment();
       System.out.println(String.format("Access URLs:\n----------------------------------------------------------\n\t" +
                "Local: \t\thttp://127.0.0.1:%1s\n\t" +
                "External: \thttp://%2s:%3s\n----------------------------------------------------------",
            env.getProperty("server.port"),
            InetAddress.getLocalHost().getHostAddress(),
            env.getProperty("server.port")));
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(StidhamFinancialApplication.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的所有JS和CSS文件都可以在我的IDE中找到,所有内容似乎都配置正确.我不知道下一步该尝试什么.我一直在调试这几天没有运气.

我把它上传到git at https://github.com/drewjocham/financial

任何建议将不胜感激.

只有日志抱怨的是一些jar文件:

org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan No TLD files were found in [file:/Library/apache-tomcat-8.0.35/webapps/stidhamfinancial/WEB-INF/lib/jandex-1.1.0.Final.jar]. Consider adding the JAR to the tomcat.util.scan.StandardJarScanFilter.jarsToSkip property in CATALINA_BASE/conf/catalina.properties file.
Run Code Online (Sandbox Code Playgroud)

在我的logging.properties中,我添加了以下内容:

org.apache.jasper.compiler.TldLocationsCache.level = FINE

org.apache.catalina.startup.TldConfig.jarsToSkip=antlr-2.7.7.jar
org.apache.catalina.startup.TldConfig.jarsToSkip=spring-boot-1.3.5.RELEASE.jar
org.apache.catalina.startup.TldConfig.jarsToSkip=groovy-2.4.6.jar
org.apache.catalina.startup.TldConfig.jarsToSkip=javassist-3.18.1-GA.jar
org.apache.catalina.startup.TldConfig.jarsToSkip=aopalliance-1.0.jar
Run Code Online (Sandbox Code Playgroud)

做了一些研究后但似乎没有用.但是我不认为这可能是个问题.

San*_*hav 6

始终使用相对路径来引用资源。

index.html 中的片段

    <link rel="stylesheet" type="text/css" href="/resources/css/superfish.css"/>
    <link rel="stylesheet" type="text/css" href="/resources/css/nivo-slider.css"/>
    <link rel="stylesheet" type="text/css" href="/resources/css/jquery.qtip.min.css"/>
    <link rel="stylesheet" type="text/css" href="/resources/css/jquery-ui.css"/>
    <link rel="stylesheet" type="text/css" href="/resources/css/jquery.fancybox.css"/>
    <link rel="stylesheet" type="text/css" href="/resources/css/jquery.fancybox-buttons.css"/>
Run Code Online (Sandbox Code Playgroud)

应该

    <link rel="stylesheet" type="text/css" href="resources/css/superfish.css"/>
    <link rel="stylesheet" type="text/css" href="resources/css/nivo-slider.css"/>
    <link rel="stylesheet" type="text/css" href="resources/css/jquery.qtip.min.css"/>
    <link rel="stylesheet" type="text/css" href="resources/css/jquery-ui.css"/>
    <link rel="stylesheet" type="text/css" href="resources/css/jquery.fancybox.css"/>
    <link rel="stylesheet" type="text/css" href="resources/css/jquery.fancybox-buttons.css"/>
Run Code Online (Sandbox Code Playgroud)

解释

当有人在 URL/资源开头使用“/”时,浏览器将尝试从 Web 服务器的 ROOT 上下文加载该资源。Web 服务器的根上下文可能与您的应用程序相同也可能不同,因为应用程序可以部署在根上下文或任何其他上下文中。

始终建议使用相对路径来链接您的资源

您应该对所有静态 URL 使用相对路径。我还发现您的 github 存储库中没有许多资源,例如 superfish.css。包括其他会导致 404 的内容


Mar*_*ias 4

德鲁1208

我打开了这个 Pull 请求,它将解决您的问题 https://github.com/drewjocham/financial/pull/1

我添加了一些休眠配置以便能够运行并执行测试。并且还从资源路径中删除了“/”。


更新

我发现了这个问题。资源文件夹结构如下所示:
resources css style.css images team-6-med-blur.png

因此,在文件中style.css,图像路径是相对于该文件的,而不是相对于应用程序上下文的。然后你需要从: 更改
background-image:url('resources/images/stidhamfinancial/team-6-med-blur.png');

background-image:url('../images/stidhamfinancial/team-6-med-blur.png');

它将显示图像。

我还在你的仓库中打开了PR#2 。