Spring Boot project with static content generates 404 when running jar
Spring
Boot project with static content generates 404 when running jar
|
The recent blog post (https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot)
This is thanks to the WebMvcAutoConfiguration class which automatically adds these directories to the classpath. This all seems fine and appears to work when using the spring-boot-maven-plugin spring-boot:run goal, When you package your Spring Boot project and allow the spring-boot-maven-plugin to |
|||
|
It turns out that whilst Spring Boot is being clever at adding the various resource directories to the classpath, Maven is not and it's up to you to deal with that part. By default, only The easiest solution is to create your
I hope this is useful to someone, it's kind of obvious when you step back and look at how Maven works but it might stump a few people using Spring Boot as it's designed to be pretty much configuration free. |
|||||||||
|
|
I am banging my head against the wall trying to figure out how to do this with gradle. Any tips? EDIT: I got it to work by adding this to my build.gradle:
|
|||||||||||||
|
---------- 我是华丽丽的分隔线 ----------
转自:http://forum.spring.io/forum/spring-projects/boot/747399-static-content-with-spring-boot
static content with spring boot
Apr 9th, 2014, 10:48 AMHi ,
we are developing a web app with spring boot. It is packaged as jar, because we want to run it standalone using the integrated tomcat.
We have currently two problems:
1) I have the index.html and all the js files in src/main/webapp, and this is perfectly working when I run my main.java from eclipse. But when I run mvn clean install the webapp directory and its content is not going in the jar. (so I can't distribute it)
2) Even if I manage to add this resources to the jar, (adding the webapp resource to the maven sources in the pom) I end up having a huge jar because we have lots of static content (images etc) !
So my question in what is the best way to serve static content in a spring boot standalone application ? Where should I put my javascript files ? and my images ?
any suggestion is welcome, thanks !Tags: None
Apr 10th, 2014, 12:59 PMFor "1", did you you change the the packaging to a "war"? There is some documentation on how to do the conversion in the boot guide.
http://docs.spring.io/spring-boot/do...yable-war-file
For "2" we package all JS and images with the app. Large resources like videos, etc are hosted elsewhere.
- Unapproved
Apr 11th, 2014, 04:55 AMthe first question: you can create a folder in the src/main/resource named "static",then you could move all files into this folder, then run mvn install,it would be OK...
Apr 11th, 2014, 07:24 AMHi guys, thanks for the suggestions
At the end I left all the js in src/main/webapp and in the maven assembly added a fileSet rule to copy the content of webapp to a "static" folder :Code:<fileSet>
<directory>src/main/webapp</directory>
<outputDirectory>static</outputDirectory>
<includes>
<include>**/*</include>
</includes>
</fileSet>so the jar remains slim but I get everything copied inside the dist folder

ale
Apr 16th, 2014, 01:04 PMhi, I am also having similar problem. The doc (http://docs.spring.io/spring-boot/do...static-content)
indicated that /public,/static,/resources or /META-INF/resources will all be served. But I am still getting 404 from the browser.
I tried created a "public" folder and tried putting it immediately under the project root dir, under /src/main/resources/ but neither of them work.
I am running it directly in Intellij, which executes the Application class.
Anyone know where I should put the public folder exactly?
Thanks,
Joseph
Apr 18th, 2014, 12:14 PMhi Patrad,
Here is my project structure:Code:.
.
+- gradle
| +-- wrapper
+- src
| +- main
| | +- java
| | | +-- com
| | | +-- precious
| | | +- config
| | | +- greeting
| | | +-- security
| | +-- resources
| | +-- static
| | +- app
| | +- css
| | +- fonts
| | +-- js
| | +-- bower_components
| | +- angularjs
| | | +- css
..................src/main/resources/static/index.html is the file I am trying to access. And "http://localhost:8080/index.html" is the url I uses.
I can hit the restful controller without any problem. However I can't hit the static content from the browser.
The thing that looks strange to me is even for static content, it always goes thru "dispatchServlet", is that normal? I was under the impression that static content should be served directly thru tomcat. I haven't tried moving dispatchServlet to a non-root
context url as the doc seems discourage that (http://docs.spring.io/spring-boot/do...patcherservlet).
Joseph
Apr 18th, 2014, 12:46 PMThat looks right to me. (Your app is deployed at the root context right?)
I think the dispatcherServlet is suppose to map /** to to ResourceHttpRequestHandler.
You may have a mapping that overrides that behavior.
At start up you should see a bunch of log lines where Spring MVC tells you what URL mappings it is using.Code:INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.actuate.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]If you do see the /** mapping, then try setting a break point in ResourceHttpRequestHandler and debug what it is doing.
Apr 18th, 2014, 01:56 PMthanks Patrad,
I read something in http://stackoverflow.com/questions/2...ic-web-content that
might help. I will give it a try late tonight and see if it solves my problem.
Thanks,
Joseph
Apr 20th, 2014, 05:51 AMAn update on what I eventually found and made it work!!. Thanks to Robert Hunt (see attached link)
Short answer is, the doc is correct that all those resource, static, public paths were added to the ResourceHttpRequestHandler, however they were added as a classpath resource, so they need to be in a class path. However the pom.xml didn't have that. Thus the
404 not found error.
adding the following in the <build> section in the pom.xml solves my problem:
<resources>
<resource>
<directory>src/main/public</directory>
<targetPath>public</targetPath>
</resource>
</resources>
However questions remains why the embeded tomcat docBase is set to a random folder??? (a bit more detail in the link provided below)
Spring Boot project with static content generates 404 when running jar的更多相关文章
- Spring boot web程序static资源放在jar外部
spring boot程序的static目录默认在resources/static目录, 打包为jar的时候,会把static目录打包进去,这样会存在一些问题: static文件过多,造成jar包体积 ...
- 不常见偏门的Bug,Spring Boot IDEA 静态资源 图片访问404,初学者之殇
用过Idea朋友都知道,它有一个非常让人喜欢的功能就是:打算在某个a目录下创建一个hello.class文件,那么你仅需要右键点击New-Java Class- 然后输入名字:a.hello 即可. ...
- 初学 Spring boot 报错 Whitelabel Error Page 404
按照教程,写了个最简单的 HelloWorld,尼玛报错 -->Whitelabel Error Page 404. 网上99%都是项目结构不对,说什么 Application放在父级 pack ...
- 创建Spring boot project报错:Project build error: Non-resolvable parent POM for xxx:0.0.1-SNAPSHOT: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent
刚开始创建Spring boot项目时,pom.xml文件时报如下图错误: 在网上百度的说让更新下Maven的update project,我试了没用,最后将version版本改了就行了,我原来版本是 ...
- [Spring Boot ] Creating the Spring Boot Project : Demo: Creating a REST Controller
In Spring boot, define a REST API endpoint is pretty easy. package com.globomatisc.bike.controllers; ...
- Spring Boot 打war包后自定义404页面不生效解决方法
最近做一个项目,自定义了404页面,本地测试可以到自定义页面,但是打包放到tomcat里面就不行.搞了一天终于看到一个比较正确的方法.下面附上连接,非常感谢各位博主们 1.https://blog.c ...
- spring boot项目使用swagger-codegen生成服务间调用的jar包
swagger-codegen的github:https://github.com/swagger-api/swagger-codegen 需要的环境:jdk > 1.7 maven > ...
- Spring Boot文档
本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...
- Spring Boot ConfigurationProperties validate
使用@Query可以在自定义的查询方法上使用@Query来指定该方法要执行的查询语句,比如:@Query("select o from UserModel o where o.uuid=?1 ...
随机推荐
- Spring Cloud-Ribbon负载均衡策略类IRule(五)
IRule IRule AbstractloadBalancerRule 负载均衡策略抽象类 负责获得负载均衡器 保存在内部 通过负载均衡器维护的信息 作为分配的依据 public abstract ...
- linux 中使用iptables 防止ddocs及cc攻击配置 。
#防止SYN攻击,轻量级预防 iptables -N syn-floodiptables -A INPUT -p tcp –syn -j syn-floodiptables -I syn-flood ...
- sqlite3树形结构遍历效率对照測试
sqlite3树形结构遍历效率对照測试 一.缘起 项目数据结构:本人从事安防行业,视频监控领域.项目中会遇到监控点位的组织机构划分.暂时划分的巡逻点位等.这些相机点位.连同组织机构,它们在逻辑关系上构 ...
- PHP自己定义函数及数组
个人原创博客:http://www.phpthinking.com/archives/350 一.自己定义函数 自己定义函数就是我们自己定义的函数.在PHP中自己定义函数格式例如以下: 1 funct ...
- 日积(Running)月累(ZSSURE):Task之Cancel、OpenAccess之Delete及fo-dicom之DeepCopy、
题记: 最近看了一篇关于架构方面的良心长文你的架构是怎样一步步腐化的?,文中字字句句道出了诸多从业者.初创企业,以及BAT都会遇到的问题,细细品读后认为工作生活中的诸多情况皆如此,都会有一个体量由小到 ...
- POJ1151 Atlantis 扫描线算法
题目大意 给出几个矩形对角端点坐标,求这些矩形整体覆盖的面积. 扫描线算法 整个平面被每个矩形的水平边所在直线(以后简称“水平线”)分成了几个部分,而整体覆盖面积则为每相邻的两个水平线间夹的长度(以后 ...
- oc11---结构体作为属性
// // main.m // 结构体作为对象的属性 #import <Foundation/Foundation.h> typedef struct { int year; int mo ...
- c#为程序添加全局热键的方法
在程序失去焦点或者在后台运行时,可以通过使用全局热键的方式,进行一些快捷的操作,如QQ默认操作中ctrl+alt+A调出截图功能. 在Windows中实现热键功能需要使用win32的Api函数Regi ...
- javascript定义类或对象的方式
本文介绍的几种定义类或对象的方式中,目前使用最广泛的是:混合的构造函数/原型方式.动态原型方式.不要单独使用经典的构造函数或原型方式. 工厂方式 构造器函数 原型方式 混合的构造函数/原型方式 动态原 ...
- 如何提升SQL语句的查询性能
在对数据库进行操作时,如果SQL语句书写不当,对程序的效率会造成很大影响. 提高SQL效率可以从一下几个方面入手: 1,数据库设计与规划 Primary Key字段的长度尽量小,能用small int ...
jetty