本来无心学springboot,毕竟当前也没有用到,但是一个好心的同事给做了个培训并分享了demo源码,闲来无事时想着不如就运行一下,切身感受下springboot。但是没成想,在他那里运行正常的例子,在我的环境上就是不正常,着实郁闷了几天。
源码都一样,只是IDE不一样,人家用的eclipse, 我用的idea。
错误如下:
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Thu Jan 18 11:01:36 CST 2018 There was an unexpected error (type=Not Found, status=404). /WEB-INF/jsp/index.jsp
在网上搜罗了很多很多资料后,才发现原来与idea创建工程的方式有关, 假设你的code目录如下:
learn-springboot | --- module1 (这是我们要运行的springboot+jsp项目) | --- module2如果你将idea工程创建在learn-springboot这一级,
在IDEA中运行module1时,在C:\Users\xxx\\AppData\Local\Temp这个目录下,会生成两个tomcat目录, 如下:
其中, tomcat.xxxx.port这个目录下没有自动生成jsp java和class文件。
但是如果将idea工程建在module1这一级,
在IDEA中运行module1时,在C:\Users\xxx\AppData\Local\Temp这个目录下,只会生成tomcat.xxxx.port一个目录,而且当你在IE中访问时,在这个路径下会生成相应jsp java和class文件,相应的jsp文件也可以访问到,不会出现异常,如下:
在eclipse里运行没有异常,eclipse运行时只会生成tomcat.xxx.port目录,并且会自动生成jsp java和class文件。
其实,知道这一点,已经可以解决我的问题了。但是对于这个问题,中间还查到了其他的解决方式,也一并总结在这里吧。
1. 进入module1目录,使用mvn spring-boot:run方式启动,不会出现jsp文件找不到问题
2. 在module1中,增加如下配置类,也可以解决jsp文件找不到问题
@Configuration public class TomcatConfig { @Bean public EmbeddedServletContainerFactory embeddedServletContainerFactory() { ConfigurableEmbeddedServletContainer factory = new TomcatEmbeddedServletContainerFactory(); factory.setDocumentRoot(new File("D:\\Study\\learn-springboot\\module1\\src\\main\\webapp\\")); return (EmbeddedServletContainerFactory) factory; } }