JHipster项目启动后默认的8080主页是空白页面?
2017-07-01 00:38
399 查看
背景
根据官网一步步地生成项目,他喵的启动后居然是一个空白页面,这怎么玩啊?还有这种操作的吗?跟说好的不一样啊!关于JHipster资料,国内少的可怜,几乎都是同一样的东西,纯介绍的文章,只好上stackoverflow上查了。相似的情况
在stackoverflow找到了一个相似的提问,不过没有具体的解决方法,倒是里面的某个评论给了我很大的提示。By default, yarn listens on port 9000 (webpack + browser sync) to hot reload frontend code and contents, maven or gradle listens on port 8080 to hot reload server code. You must run both in dev.
在开发阶段,通常使用
yarn start来启动angular2,可以在开发过程中热加载修改后的代码,然后通过
./mvnw来启动Spring Boot后端的api服务。
那么问题来了,我以后要上线的时候也要这样启动啊?(╯‵□′)╯︵┻━┻
解决过程
由于前端是angular2,虽然可以热加载方便开发者开发,但是上线也不会这样做的。通过了解angular2,可以通过
ng build打包好,然后可以直接访问主页。
我在项目的目录下执行
ng build后,打包好的代码自动生成到target的www上面。
再次启动项目,还是空白页面,回到原点。
打开浏览器的F12的network,居然只有一个localhost???
不对啊!为什么只会有一个localhost呢?其他资源没有加载吗?有猫腻!
打开生成项目的代码,找到配置web资源的
WebConfigurer,通过查看代码,我们可以看到:
public void customize(ConfigurableEmbeddedServletContainer container) { MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT); // IE issue, see https://github.com/jhipster/generator-jhipster/pull/711 mappings.add("html", "text/html;charset=utf-8"); // CloudFoundry issue, see https://github.com/cloudfoundry/gorouter/issues/64 mappings.add("json", "text/html;charset=utf-8"); container.setMimeMappings(mappings); // When running in an IDE or with ./mvnw spring-boot:run, set location of the static web assets. setLocationForStaticAssets(container); /* * Enable HTTP/2 for Undertow - https://twitter.com/ankinson/status/829256167700492288 * HTTP/2 requires HTTPS, so HTTP requests will fallback to HTTP/1.1. * See the JHipsterProperties class and your application-*.yml configuration files * for more information. */ if (jHipsterProperties.getHttp().getVersion().equals(JHipsterProperties.Http.Version.V_2_0) && container instanceof UndertowEmbeddedServletContainerFactory) { ((UndertowEmbeddedServletContainerFactory) container) .addBuilderCustomizers(builder -> builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true)); } }
其中,
setLocationForStaticAssets(container);就是设置网站的静态资源的位置。眼看代码是没问题的,唯有debug救我。debug下面的代码:
private void setLocationForStaticAssets(ConfigurableEmbeddedServletContainer container) { File root; String prefixPath = resolvePathPrefix(); root = new File(prefixPath + "target/www/"); if (root.exists() && root.isDirectory()) { container.setDocumentRoot(root); } }
通过debug发现,root的路径多了%20的字符导致找不到路径,%20就是空格,将空格去掉再试一试~
果然是这个问题,去掉空格之后就有内容了。
结案
看看目录的路径是否带有空格或者中文字符,有的话去掉试试看。相关文章推荐
- Maven项目启动时如何查找默认的显示页面
- linux下修改tomcat默认访问主页为自己项目的页面
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- idea同时启动多个项目,启动不起来,以及打不开默认页面解决方法
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- 在MyEclipse中启动项目正常,但不能访问Tomcat默认主页解决办法
- tomcat设置项目默认启动
- ios-项目启动页面
- 解决Tomcat可以在eclipse启动,却无法显示默认页面
- 更改默认启动页面
- eclipse j2ee可以启动项目无法访问http:localhost:8080/的解决方案
- android 解决启动页面加载图片空白以及去掉标题栏
- 关于tomcat启动后,直接访问本地地址默认的页面
- 如何在 GitHub 建立个人主页和项目演示页面
- tomcat后台日志启动正常,但是不能访问http://ip:8080页面