具体区别表现可见:SpringBoot项目打成jar与war的区别
为什么src/main/resources
下的静态资源要被编译进入项目名\target\classes
才能被外部访问,而src/main/webapp
下的静态资源,无需编译到项目名\target\classes
可以直接被访问到??
src/main/resources:
放代码:
/**
* Create a new DefaultResourceLoader.
* <p>ClassLoader access will happen using the thread context class loader
* at the time of this ResourceLoader's initialization.
* @see java.lang.Thread#getContextClassLoader()
*/
public DefaultResourceLoader() {
this.classLoader = ClassUtils.getDefaultClassLoader();
}
这段代码,是Spring获得自己的 默认资源加载器
的过程,我们还知道Spring提供了ResourceHttpRequestHandler
来配置src/main/resources(classpath)
下指定访问目录,而DefaultResourceLoader(默认的资源加载器)
本质上就是DefaultClassLoader(默认的类加载器)
,而类加载器
主要是针对**.class
文件的路径,所以此时我们可以理解:为什么src/main/resources(classpath)
的静态资源也需要编译到classes目录
下?
src/main/webapp:
对于webapp我们似乎更容易理解,它主要是通过servlet container
的ContextPath
来确定资源在文件系统中
的位置,然后使用如下API从文件系统
中获取对应资源
: