我有一个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;
}
}
我需要ServletContextTemplateResolver
因为我使用的是spring-mobile而且我在渲染网页时遇到了问题。
我在tomcat的日志中看不到任何内容localhost.log
和cataline.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);
}
}
我的IDE中找到了所有的JS和CSS文件,似乎所有内容都配置正确。我不知道下一步该尝试什么。我已经调试了几天而没有运气。
我是在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.
在我的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
做了一些研究后但似乎没有用。但是我不认为这可能是个问题。
答案 0 :(得分:4)
始终使用相对路径来引用资源。
来自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"/>
应该是
<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"/>
解释
当某人在URL /资源的开头使用“/”时,浏览器将尝试从Web服务器的ROOT上下文加载该资源。 Web服务器的根上下文可能与您的应用程序相同或不同,因为可以在根上下文或任何其他上下文中部署应用程序。
始终建议使用相对路径来链接资源
您应该为所有静态网址使用相对路径。我还发现许多资源在你的github repo中都没有,比如superfish.css。包括他们将导致404
的其他内容答案 1 :(得分:3)
Drew1208
我打开了这个解决您问题的Pull请求 https://github.com/drewjocham/financial/pull/1
我添加了一些hibernate配置,以便能够运行并执行测试。并且还从资源路径中删除了“/”。
<小时/> UPDATE
我发现了这个问题。
资源文件夹结构如下所示:
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。