写了一个SpringBoot项目,运行项目时,输入正确的访问路径,发现项目访问不到,经过查看,其他配置正常。
1、错误信息
2、错误原因
经过一番解决,发现造成该种情况的原因是因为项目目录结构错误导致,启动类Application类被我错误的放置在一个单独包里。 错误目录结构图如下: (项目报错忽略,这是Eclipse的原因)
启动类代码:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3、解决方法一(移动启动类位置):
启动类Application类的正确放置位置应该是放置在最外层包,要能包含所有的子包(而我的是独立放置在一个平行层面的包里,导致页面找不到)。正确目录结构如下:
即启动类Application类与其他子包属于同一根目录下。
【原因】Spring底层在解析配置类,会去解析@ComponentScan,读取basePackages,如果没有读取到,会将当前配置类所在的包当做扫描包
(意思即是:
①由于原来的目录结构,配置类(启动类)没有指定扫描的包,因此系统会默认将启动类所在的包(com.lzy.springboot.application)当做扫描包,因此系统扫描包时并没有搜索控制器所处在的包(com.lzy.springboot.controllers),因此项目在发布运行时找不到请求路径,所以若启动类没有指定扫描的包,需要把启动类放在与需要扫描的包在同一级根目录下;
②启动类指定扫描包请查看 “解决方法二”)
4、解决方法二(添加指定扫描包:@SpringBootApplication(scanBasePackages=“指定扫描包”)):
修改启动类注解,添加指定的controller扫描位置,即可解决问题,代码如下:
@SpringBootApplication(scanBasePackages="com.lzy.springboot.controllers")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
上面两种方法,刷新页面即可正常访问网页
5、总结出现网页找不到的原因
- 启动类位置不正确
- 页面访问路径与控制器@RequestMapping定义的路径不一致