1. 什么是classpath?

classpath相当于Java执行环境,它指定了一些常用的包或jar的位置,方便我们对项目文件的使用,而不必重复多次写所需要文件的位置。
    在classpath中可能需要使用所有相同名字的资源文件,如果用classpath:只会加载第一个,而使用classpath*:前缀则能够加载所有符合类型的文件。然而,使用classpath*:需要遍历所有的classpath,加载速度很慢,因此您应该尽量避免使用classpath*。

Website------- webapps下的项目名(项目工程名,不是包名),例如:ROOT(Tomcat的页面)
|------静态页面(HTML、CSS、JS、图片)---静态页面只需要这个就够了
|------JSP页面
|------WEB-INF----如果有servlet或者JSP则此目录必须有(里面的内容不直接提供对外访问)
|-----web.xml(必须的)------出现WEB-INF则必须有web.xml,web 2.5+可省略这个,使用注解替代配置信息(例如:@WebServlet),全用注解效率不高,推荐替代部分配置信息
|-----classes(可选的)-----自己写的java类的class文件,没有源代码,Eclipse里发布项目时会自动创建,并将字节文件导入到该文件夹下,还有自己写的配置文件
|-----lib(可选的)-----例如,数据库第三方jar包,引用了java类或者第三方jar包
1.在Idea中看到的src和resource不是classpath, 项目被打成war包后WEB-INF中的classes,lib才是classpath,WEB-INF 是资源目录, 客户端不能直接访问,所以我们需要添加classpath访问。

2.WEB-INF/classes目录存放着idea中的src目录下的java文件编译之后的class文件,resource目录下的xml、properties等资源配置文件,这是一个定位资源的入口。

3.引用classpath路径下的文件,只需在文件名前加classpath:

<context:property-placeholder location="classpath:/properties/config.properties"/>
<import resource="classpath:spring/spring-datasource.xml"/>
4.lib和classes同属classpath,两者的访问优先级为: lib>classes。 5.classpath 和 classpath* 区别:
classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。

  

  

src路径下的文件在编译后会放到WEB-INF/classes路径下吧。默认的classpath是在这里。直接放到WEB-INF下的话,是不在classpath下的。用ClassPathXmlApplicationContext当然获取不到。
如果单元测试的话,可以在启动或者运行的选项里指定classpath的路径的。 用maven构建项目时候resources目录就是默认的classpath
classPath即为java文件编译之后的class文件的编译目录一般为web-inf/classes,src下的xml在编译时也会复制到classPath下
ApplicationContext ctx = new ClassPathXmlApplicationContext("xxxx.xml"); //读取classPath下的spring.xml配置文件
ApplicationContext ctx = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/xxxx.xml"); //读取WEB-INF 下的spring.xml文件 解释classes含义:
1.存放各种资源配置文件 eg.init.properties log4j.properties struts.xml
2.存放模板文件 eg.actionerror.ftl
3.存放class文件 对应的是项目开发时的src目录编译文件
总结:这是一个定位资源的入口

  

2.eclipse中的classpath分析

在eclipse下的Spring项目中,有一个.classpath文件,里面配置了整个项目的运行环境(如下图所示)。

代码解释:(转载于http://mingyundezuoan.iteye.com/blog/2224973)

kind: 
        src:源文件的具体位置,对应java build path操作中source中的一项路径。
        con:运行的系统环境。
        lib:库文件或目录, path为库文件或目录位置。注意: 当指定库文件时(非库目录, 通常是jar包), 应当包             含文件名。
        output:指明为默认class输出路径, path为相应输出路径。注意: 这一条在文件中有且只能有一条。
        var:指定工程所用到的库文件或目录, 对应工程属性Java build path中Libraries项中的一项,指明带有全             局编译路径中设置的变量(Window->Prefrences->Java->Build Path->Classpath Variables),path为             这个变量目录下的库文件。

path:源文件路径。
    output:为这条路径中源文件编译以后class文件的输出路径,对应java build path操作中source选项面板下方            default output path ,所指代的路径。

including:额外包含其他目录下的所有java文件。
    excluding:不包含的文件。

3.intellij idea的classpath分析

首先在打开的项目窗口打开File->Project Structure...,得到如下图所示的项目结构:

在最上面一栏可以看到这里是Source标签中的详细信息,在右边可以看到项目里面目录的类型,有Source Folders、Resource Folders等等,这里指的是Source Folders表示的都是代码源文件目录,生成的class文件会输出到target->classess文件夹中,但是里面的源文件不会复制到target->classes文件夹中,Test Source Folders表示的都是测试代码源文件目录,生成的class文件同样会输出到target->classess文件夹中,并且里面的源文件不会复制到target->classes文件夹中,而Recource Folders表示的都是资源文件目录,这些目录里面的文件会在代码编译运行被直接复制到target->classess文件夹中。可以这么讲,target->classes即为classpath,任何我们需要在classpath前缀中获取的资源都必须在target->classes文件夹中找到,否则将出现java.io.FileNotFoundException的错误信息。

如果您在项目中想添加一些自己的目录到Source Folders、Resource Folders这样的目录分类里来实现编译过后正确地文件输出,则可以点击需要设置的文件夹,再在文件结构窗口上方的Make as:后面选择正确的目录类型即可。
---------------------

原文:

https://blog.csdn.net/skyebefreeman/article/details/56495637

https://blog.csdn.net/seudongnan/article/details/78255922

https://blog.csdn.net/zhuhai__yizhi/article/details/78183311

https://blog.csdn.net/qq_36838191/article/details/81985012

https://blog.csdn.net/seudongnan/article/details/78255922

https://my.oschina.net/AmosWang/blog/1341357

https://blog.csdn.net/u011095110/article/details/76152952/

classpath分析的更多相关文章

  1. 异常:No Spring WebApplicationInitializer types detected on classpath

    原因: 启动服务提供者/服务消费者-->去注册中心Zookeeper无法注册这个服务 / 在监控中心无法发现服务 异常提示:No Spring WebApplicationInitializer ...

  2. IntelliJ IDEA(社区版)学习记录

    一.下载 地址:官网下载地址 二.安装 运行安装程序,一路下一步.注意选择安装路径. 三.基本概念 project:相当于donet下的解决方案 module:相当于donet下的项目工程 四.IDE ...

  3. IntelliJ IDEA学习记录

    一.下载 地址:官网下载地址 二.安装 运行安装程序,一路下一步.注意选择安装路径. 三.基本概念 project:相当于donet中的解决方案(solution),eclipse中的工作空间(wor ...

  4. 分析Java的类加载器与ClassLoader(二):classpath与查找类字节码的顺序,分析ExtClassLoader与AppClassLoader的源码

    先回顾一下classpath classpath的作用: classpath的作用是指定查找类的路径:当使用java命令执行一个类(类中的main方法)时,会从classpath中进行查找这个类. 指 ...

  5. zookeeper源码分析之二客户端启动

    ZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: create(path, data, flags): 创建一个ZNode, path是其 ...

  6. pmd静态代码分析

    在正式进入测试之前,进行一定的静态代码分析及code review对代码质量及系统提高是有帮助的,以上为数据证明 Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可 ...

  7. Tomcat内存溢出的三种情况及解决办法分析

    Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三种 ...

  8. Java ClassLoader 原理详细分析(转)

    转载自:http://www.codeceo.com/article/java-classloader.html 一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管 ...

  9. 深入理解 spring 容器,源码分析加载过程

    Spring框架提供了构建Web应用程序的全功能MVC模块,叫Spring MVC,通过Spring Core+Spring MVC即可搭建一套稳定的Java Web项目.本文通过Spring MVC ...

随机推荐

  1. 1.ECS(CentOS7)主机名修改命令

    命令:hostnamectl 使用--help参数查看hostnamectl里面每个参数对应的含义: [root@localhost ~]# hostnamectl --help Query or c ...

  2. VMware Harbor学习

    同时安装Clair和Notary# ./install.sh --with-notary --with-clair 与notary或者Clair一起安装时管理Harbor的生命周期当Harbour与N ...

  3. ping ip多进程处理小程序

    最近,环境维护需要经常需要判断某些服务器上的IP是否可达,由于服务器数量较多,逐一手工ping检查太过繁琐.写个小程序使用. 实现和说明 1.使用配置文件ip.txt实现可配置指定ip列表. 2.利用 ...

  4. 慕容小匹夫 Unity3D移动平台动态读取外部文件全解析

    Unity3D移动平台动态读取外部文件全解析   c#语言规范 阅读目录 前言: 假如我想在editor里动态读取文件 移动平台的资源路径问题 移动平台读取外部文件的方法 补充: 回到目录 前言: 一 ...

  5. C#整数的三种强制类型转换int、Convert.ToInt32()、int.Parse()的区别

    .int适合简单数据类型之间的转换,C#的默认整型是int32(不支持bool型): .int.Parse(string sParameter)是个构造函数,参数类型只支持string类型: .Con ...

  6. maven 创建war类型项目

    1. 创建maven project时选择packaging为war 2. 在webapp文件夹下新建META-INF和WEB-INF/web.xml 3. 在pom.xml中添加web项目需要的ja ...

  7. Hadoop集群(三) Hbase搭建

    前面已经完成Zookeeper和HDFS的安装,本文会详细介绍Hbase的安装步骤.以及安装过程中遇到问题的汇总. 系列文章:   Hadoop集群(一) Zookeeper搭建 Hadoop集群(二 ...

  8. 理解 e.clientX,e.clientY e.pageX e.pageY e.offsetX e.offsetY

    event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 event.pageX ...

  9. cakePHP模型内置回调函数afterFind()的使用。

    在用find获取数据后,我们要对所获取到的数据做一些处理,这时,直接在模型层覆盖cakephp内置的回调函数,使用find时会自动调用. 其中$baomings 就是find 到的 $this-> ...

  10. uuid生成工具类

    public class UUIDTool { public static String getUUID() { return UUID.randomUUID().toString().replace ...